Kubernetes 的安装
安装 kubernetes
安装前的准备
一、安装 docker
二、关闭 swap 交换分区
这里有两种方式,临时关闭和永久关闭
临时关闭
1 | |
永久关闭
编辑/etc/fstab,用# 注释里面涉及 swap 行
1 | |

三、检查 hostname
1 | |
安装工具
安装 kubeadm、kubelet、kubectl(国内版本)
- 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包
1 | |
2.添加 Kubernetes apt 仓库
添加 apt key 以及源
1 | |
- 安装
1 | |
若不指定则默认安装最新版本。更多可用版本列表,通过 sudo apt-cache policy kubelet 查看

安装 kubemetes
在安装完 kubectl、kubeadm、kubelet 工具后,就可以通过 kubeadm 设置 k8s 集群了,执行以下命令:
1 | |
init 命令可选的参数分别有:
| 参数 | 描述 | 值 |
|---|---|---|
| –image-repository | 指定镜像的仓库,国内使用阿里云即可。 | registry.aliyuncs.com/google_containers |
| –kubernetes-version | 这里需要和本机装的 kubectl、kubeadm 版本保持一致 | v1.22.3 |
| –pod-network-cidr | 指定 pod 使用的网段 | 10.244.0.0/16 |
| –cert-dir | 指定证书的路径 | |
| –dry-run | 输出将要执行的操作,不做任何改变 | |
| –feature-gates | 指定功能配置键值对,可控制是否启用各种功能 | |
| -h, –help | 输出 init 命令的帮助信息 | |
| –apiserver-advertise-address | 指定 API Server 地址 | |
| –apiserver-cert-extra-sans | 指定 API Server 的服务器证书 | |
| –ignore-preflight-errors | 忽视检查项错误列表,例如“IsPrivilegedUser,Swap”,如填写为 ‘all’ 则将忽视所有的检查项错误 | |
| –kubernetes-version | 指定 Kubernetes 版本 | |
| –node-name | 指定节点名称 | |
| –pod-network-cidr | 指定 pod 网络 IP 地址段 | 10.244.0.0/16 |
| –service-cidr | 指定 service 的 IP 地址段 | |
| –service-dns-domain | 指定 Service 的域名,默认为“cluster.local” | |
| –skip-token-print | 不打印 Token | |
| –token | 指定 token | |
| –token-ttl | 指定 token 有效时间,如果设置为“0”,则永不过期 |
在启动之后会等待片刻,出现以下字样就代表安装成功。

在出现以上字样之后需要将 kubectl 的文件移动到 HOME 目录下,这样才能使用 kubectl 命令
执行以下命令
1 | |
执行成功后复制下图中的命令,该命令用于工作节点加入到集群中;

获取 kubernetes 集群各个组件的状态以及节点状态
1 | |

在上图可以看到,获取 pod 状态时,coredns 节点的状态不是 Running 而是 Pending,这是因为集群目前还没有安装网络插件,K8S 没有准确的定义一个网络插件,而是定义了接口,实现了该接口的网络插件 K8S 就可以运行;
安装网络插件
K8S 没有准确的定义一个网络插件,而是定义了接口,实现了该接口的网络插件 K8S 就可以运行;K8S 网络插件接口各大厂商都有进行 实现 ,这里使用的是 flannel 。
网络插件你可以从网上下载一个插件的配置文件然后应用,也可以直接引用网上的插件;
第一种方法适合网络不好的场景,第二种适合网络好的。
下载文件
1 | |
直接应用网络上的配置文件
这种方式无需下载文件到本地,但需要网络好
1 | |
这两种方式运行之后再获取通过命令 kubectl get pods --all-namespaces 去查看各个组件状态,发现 coredns 组件依然还是 Pending 状态,这是因为再应用网络插件时,这个插件也在下载仓库里的镜像进行应用,这里可以使用以下命令去验证:
1 | |
命令中的
kube-flannel-ds-amd64-vcmx9需要配置自己的网络插件名称,通过kubectl get pods --all-namespaces获取到。
使用命令后可以获取到这个组件的详细信息,详细信息的前面不需要看,到最底下的 Evnets 标签,步骤会卡在 "quay.io/coreos/flannel: v0.15.1" 这个镜像的拉取上,所以等待拉取镜像成功即可。

如果等不了,可以取巧;将这个镜像名复制下来,然后去到阿里云将相同的镜像下载下来,然后进行改成与事件中相同的镜像名称。这个时候再重新部署网络插件的话发现本地就有这个镜像就不会去网络上拉取镜像,而是直接应用本地镜像;
1 | |
执行完以上步骤之后就可以发现,网络插件部署成功,coredns 组件也是 Running 状态了

工作节点加入集群
工作节点也请安装 kubectl、kubeadm、kubelet 这 3 个工具,然后使用在上文中复制的 kubeadm join 命令,表示让该节点以工作节点的方式加入到集群当中
1 | |
加入后在执行 kubectl get nodes 就可以看到工作节点已经加入到集群当中

从集群中删除工作节点
卸载节点
1 | |
此时节点值是被卸载,不会有 pod 被调度到该工作节点中
删除节点
1 | |
清空节点配置
此步骤需要到在被删除工作节点上运行,前面步骤在 master 节点执行
1 | |
安装 Kuborad 可视化
这里使用 kuborad 可视化界面, 参考文档
使用命令
1 | |
访问 Kuboard
- 在浏览器中打开链接
http://your-node-ip-address:30080 - 输入初始用户名和密码,并登录
- 用户名:
admin - 密码:
Kuboard123
- 用户名:
安装 k8s 踩坑——kublet 一直重启
kubelet 一直重启是因为 docker 作为 kubernetes 的容器运行时,需要 docker 的 cgroup 属性要与 kubernetes 保持一致;
该属性在 /etc/docker/daemon.json 文件中进行追加设置即可
1 | |