Kubernetes入门教程 --- 使用kubeadm进行集群安装
Kubernetes入门教程 --- 使用kubeadm和二进制安装
- 1. Introduction
- 1.1 架构图
- 1.2 关键字介绍
- 1.3 简述
- 2. 使用Kubeadm Install
- 2.1 申请三个虚拟环境
- 2.2 准备安装环境
- 2.3 配置yum源
- 2.4 安装Docker
- 2.5 时间同步
- 2.6 安装组件
- 2.7 部署集群
- 2.8 Master安装网络插卡
- 3. 查询状态
- 3.1 查询node节点
- 3.2 查询pod
- 3.3 测试集群
- 3.4 部署Dashboard
- 3.5 创建用户
- 4. Version1.18特性
- 4.1 Debug
- 4.2 Sidecar
- 4.3 Volumn
- 4.4 ConfigMap/Secret
- 5. Error
- 6. Awakening



1. Introduction
1.1 架构图
- 架构图
左面的master架构
右边是node架构
1.2 关键字介绍
- 关键字介绍
kubectl:命令行工具
Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器
controller:负责维护集群的状态,比如副本期望数量、故障检测、自动扩展、滚动更新等
api server:所有服务访问的唯一入口,提供认证、授权、访问控制、API 注册和发现等机制
scheduler:负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上
etcd:键值对数据库,保存了整个集群的状态,官方将它定义成一个可信赖的分布式键值存储服务
kubelet:负责维护容器的生命周期,同时也负责 Volume 和网络的管理
kube-proxy:负责为 Service 提供 cluster 内部的服务发现和负载均衡
Container runtime:负责镜像管理以及 Pod 和容器的真正运行
label:标签,用于对pod进行分类,同一类pod会拥有相同的标签
NameSpace:命名空间,用来隔离pod的运行环境
1.3 简述
- kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。
1.创建一个 Master 节点:kubeadm init
2.将一个 Node 节点加入到当前集群中:ubeadm join <Master节点的IP和端口
2. 使用Kubeadm Install
2.1 申请三个虚拟环境
| 序号 | ip | 节点类型 |
|---|---|---|
| 1 | 10.136.217.11 | master |
| 2 | 10.136.217.12 | mode |
| 3 | 10.136.217.13 | node |
2.2 准备安装环境
- 1.关闭selinux
vim /etc/selinux/config
添加 SELIUNX=disabled
并将其他两行注释掉- 永久关闭selinux
sed -i ‘s/enforcing/disabled/’ /etc/selinux/config- 2.临时关闭swap内存
swapoff -a- 3.永久关闭swap内存
vim /etc/fstab
#永久关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
- 设置host,在master节点
vim /etc/hosts
- 调整内核参数
cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
- 保存参数
sysctl --system
2.3 配置yum源
- 配置源文件
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kube
2.4 安装Docker
- 安装wget
yum install -y wget- 配置docker源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo- 安装docker
yum -y install docker-ce-18.06.1.ce-3.el7- 开机启动docker
systemctl enable docker && systemctl start docker- 查看docker版本
docker --version- 守护进程重启
systemctl daemon-reload
systemctl start docker- 避免每次使用docker都要sudo
sudo usermod -aG docker xxxxx
2.5 时间同步
- 安装组件
yum install ntpdate -y- 时间同步
ntpdate http://time.windows.com
2.6 安装组件
- 安装
yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0- 开机启动
systemctl enable kubelet && systemctl start kubelet
- kubelet命令补全
echo “source <(kubectl completion bash)” >> ~/.bash_profile
source ~/.bash_profile
2.7 部署集群
- 查看需要的镜像
kubeadm config images list
- 上传 kubeadm-basic.images.tar.gz 压缩包至 /opt 目录
tar zxvf kubeadm-basic.images.tar.gz
- for循环安装
for i in $(ls /opt/kubeadm-basic.images/*.tar); do docker load -i $i; done
- 复制镜像都其他节点
scp -r kubeadm-basic.images root@nodehostname:/opt
- 在其他节点for循环安装
for i in $(ls /opt/kubeadm-basic.images/*.tar); do docker load -i $i; done- 初始化kubeadm(方法一)
kubeadm config print init-defaults > /opt/kubeadm-config.yaml
cd opt
vim kubeadm-config.yaml
vim kubeadm-config.yaml
......
localAPIEndpoint:
advertiseAddress: 192.168.229.90 #指定master节点的IP地址
bindPort: 6443
......
kubernetesVersion: v1.15.1 #指定kubernetes版本号
networking:
dnsDomain: cluster.local
podSubnet: "10.244.0.0/16" #指定pod网段,10.244.0.0/16用于匹配flannel默认网段
serviceSubnet: 10.96.0.0/16 #指定service网段
scheduler: {}
--- #末尾再添加以下内容
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs #把默认的service调度方式改为ipvs模式
- 初始化
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
- 证书目录
ls /etc/kubernetes/pki
- 初始化kubeadm(方法二)
kubeadm init --apiserver-advertise-address=0.0.0.0 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.15.1 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16- 参数详解
1.apiserver-advertise-address:apiserver通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址
2.apiserver-bind-port:apiserver的监听端口,默认是6443
3.cert-dir:通讯的ssl证书文件,默认/etc/kubernetes/pki
4.control-plane-endpoint:控制台平面的共享终端,可以是负载均衡的ip地址或者dns域名,高可用集群时需要添加
5.image-repository:拉取镜像的镜像仓库,默认是k8s.gcr.io
6.kubernetes-version:指定kubernetes版本
7.pod-network-cidr:pod资源的网段,需与pod网络插件的值设置一致。通常,Flannel网络插件的默认为10.244.0.0/16,Calico插件的默认值为192.168.0.0/16;
8.service-cidr:service资源的网段
9.service-dns-domain:service全域名的后缀,默认是cluster.local- 修改 kube-proxy 的 configmap,开启 ipvs
kubectl edit cm kube-proxy -n=kube-system
mode: ipvs- 设定kubectl
- node 节点上执行 kubeadm join 命令加入群集
kubeadm join 192.168.2.66:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:aeeaa0e74c0854944d152aaf29f7b2f10863fc05a8dc1d73a7687b04bfde9e75
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
2.8 Master安装网络插卡
- master上安装calico.yaml,解决STATUS notReady
wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml --no-check-certificate- 编辑calico.yaml
将pod cidr => 192.168.0.0/16 改为 10.244.0.0/16- 应用
kubectl apply -f calico.yaml
3. 查询状态
3.1 查询node节点
- kubectl get nodes
3.2 查询pod
- 查询所有pod
kubectl get pods --namespace=kube-system
- 查询具体pod
kubectl --namespace=kube-system describe pod podname
- 查询k8s版本
kubectl version
3.3 测试集群
- 在集群创建pod
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort- 查看状态
kubectl get pods
kubectl get svc
3.4 部署Dashboard
- 下载
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml- 修改Service为NodePort类型
vim recommended.yaml
- 设定
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard
- 访问
https://NodeIP:30001
3.5 创建用户
- 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system- 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin- 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk ‘/dashboard-admin/{print $1}’)
4. Version1.18特性
4.1 Debug
4.2 Sidecar
4.3 Volumn
4.4 ConfigMap/Secret
5. Error
- The connection to the server localhost:8080 was refused - did you specify the right host or port?
1.编辑
vim /etc/profile
添加 =>export KUBECONFIG=/etc/kubernetes/admin.conf
2.更新
source /etc/profile
6. Awakening
在一秒钟内看到本质的人和花半辈子也看不清一件事本质的人,自然是不一样的命运。
相关文章:
Kubernetes入门教程 --- 使用kubeadm进行集群安装
Kubernetes入门教程 --- 使用kubeadm和二进制安装1. Introduction1.1 架构图1.2 关键字介绍1.3 简述2. 使用Kubeadm Install2.1 申请三个虚拟环境2.2 准备安装环境2.3 配置yum源2.4 安装Docker2.5 时间同步2.6 安装组件2.7 部署集群2.8 Master安装网络插卡3. 查询状态3.1 查询n…...
华为OD机试真题Python实现【相对开音节】真题+解题思路+代码(20222023)
相对开音节 题目 相对开音节构成的结构为辅音+元音(aeiou)+辅音(r除外) 常见的单词有bike cake 给定一个字符串,以空格为分隔符 反转每个单词的字母 若单词中包含如数字等其他非字母时不进行反转 反转后计算其中含有相对开音节结构的子串个数 (连续子串中部分字符可以重复) …...
海思SD3403/SS928V100开发(5)MIPI_YUV相机vio sample开发----修改思路
1. 前言 sensor输出格式: YUV422 8bit 硬件连接: MIPI_YUV相机(4lane MIPI) -> SS928V100 MIPI0(4lane) 框图: 2. 几个问题 基于SS928 SDK中的 vio sample修改; 但是sample里面都是基于RAW RGB sensor开发的sample, 没有现成的MIPI_YUV sensor的参考,需要自己…...
javaee之node.js与es6
问题1:在IDEA控制台为什么node显示不会出来命令 修改完之后记得重新启动电脑 问题2:response.end()作用 在Web开发中,浏览器端的请求到达服务器进行处理的时候,Response.End的作用就是让request执行到此结束,输出到客户…...
11 nacos源码开篇
nacos核心功能点: 服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存…...
13.Jenkins集成sonarqube
Jenkins集成sonarqube1.jenkins集成sonarqube2.jenkins以maven的方式集成sonarqube scanner报错1报错21.jenkins集成sonarqube 1.在jenkins插件管理中安装sonarqube scanner 2.jenkins要知道sonarqube服务端是谁,需要配置(系统管理–系统配置–sonarq…...
JavaWeb13-线程休眠和指定唤醒:LockSupport
目录 1.LockSupport.park():休眠当前线程 2.LockSupport.unpark(线程对象):唤醒某一个指定的线程 3.扩展:LockSupport.parkUntil(long)等待最大时间是一个固定时间 4.LockSupport和Interrupt 5.LockSupport VS wait 相同点:…...
【第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性)】
第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性) 1.Spring是什么? ①Spring是一款主流的java EE 轻量级开源框架。 ②广义的Spring:Spring技术栈,Spring不再…...
前端react面试题(边面边更)
展示组件(Presentational component)和容器组件(Container component)之间有何不同 展示组件关心组件看起来是什么。展示专门通过 props 接受数据和回调,并且几乎不会有自身的状态,但当展示组件拥有自身的状态时,通常也只关心 UI 状态而不是…...
产品3C认证在哪里办理
一、什么是CCC认证 3C认证的全称为“中国强制性产品认证”,英文名称China Compulsory Certification,英文缩写CCC。它是中国政府为保护消费者人身安全和国家安全、加强产品质量管理、依照法律法规实施的一种产品合格评定制度。年12月,国家…...
UA-DETRAC数据集转YOLO格式
一: 数据集下载 原官方数据集 链接:https://pan.baidu.com/s/1P_CeSIpJIYSA1dykmFhgYw 提取码: 7f4g 处理完成数据集(每10帧取一张) 链接:后续添加 提取码:后续添加 二: 处理标…...
代码随想录---二叉树的总结和二叉树的定义
二叉树的种类: 满二叉树:树的所有节点都是满,即都有左右孩子。 这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。 完全二叉树:完全二叉树的定义如下:在完全二叉树中,…...
Hive SQL 执行计划
我们在写Hive SQL的时候,难免会在运行的时候有报错,所以知道Hive SQL的执行计划具体是什么,然后假如在之后的运行过程中有报错,可以根据执行计划定位问题,调试自己的SQL开发脚本。 一、含义 Hive SQL的执行计划描述S…...
MySQL InnoDB引擎——三层B+树可以存储多少数据量
先说结论: 3层B树大概可以存: 主键为bigint:约2000w主键为int:约4000w*备注: 在《阿里开发手册》中建议,单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表,如果预计三年后…...
部署跨云容灾的五大难点
为什么企业需要跨云容灾? 据统计,全球已有70%的企业使用云计算服务。上云帮助企业更高效地管理数据资产,但它并非绝对安全。如停电、漏水等机房事故;地震、火灾等自然性灾害;亦或是人为失误,都有可能造成数…...
Docker Compose
为什么需要使用Docker ComposeDocker Compose 容器编排技术1、现在我们有一个springboot项目,需要依赖Redis、mysql、nginx。如果使用docker原生部署的话,则需要安装Redis、mysql、nginx容器,才可以启动我们springboot项目,这样的…...
【ARM架构】armv8 系统安全概述
ARMv8-A 系统中的安全 一个安全或可信的操作系统保护着系统中敏感的信息,例如,可以保护用户存储的密码,信用卡等认证信息免受攻击。 安全由以下原则定义: 保密性:保护设备上的敏感信息,防止未经授权的访问…...
数学小课堂:数学边界
文章目录 引言I 费马大定理1.1毕达哥拉斯定理的推广1.2 一波三折的定理证明过程1.3 希尔伯特第十问题II 数学的边界2.1 认识论问题2.2 在边界内做事情2.3 总结引言 了解数学本身的局限性,才能更好地使用它的原理和思维方式。 数学的边界,这是一个硬的边界,大家不要试图逾越…...
检测中断到来时,让LED灯状态取反,并且在串口工具上打印一句话
任务:检测中断到来时,让LED灯状态取反,并且在串口工具上打印一句话例如:当按键1按下之后,让LED1状态取反,并打印“LED1 down”当按键2按下之后,让LED2状态取反,并打印“LED2 down”当…...
2023年CDGA考试-第7章-数据安全(含答案)
2023年CDGA考试-第7章-数据安全(含答案) 单选题 1.数据安全不仅涉及防止不当访问,也涉及对数据的适当访问,下列理解不正确的是 ( ) A.强密码有助于提高破解风险 B.安全专家建议 45-180天修改一次密码 C.用户要尽量使用多套密码和账户 D.具有高度敏感信息权限的用户都应使…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
el-amap-bezier-curve运用及线弧度设置
文章目录 简介示例线弧度属性主要弧度相关属性其他相关样式属性完整示例链接简介 el-amap-bezier-curve 是 Vue-Amap 组件库中的一个组件,用于在 高德地图 上绘制贝塞尔曲线。 基本用法属性path定义曲线的路径,可以是多个弧线段的组合。stroke-weight线条的宽度。stroke…...
uniapp获取当前位置和经纬度信息
1.1. 获取当前位置和经纬度信息(需要配置高的SDK) 调用uni-app官方API中的uni.chooseLocation(),即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...
react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
之前都是使用react-pdf来渲染pdf文件,这次有个需求是要兼容xp环境,xp上chrome最高支持到49,虽然说iframe或者embed都可以实现预览pdf,但为了后续的定制化需求,还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...























