Kubeadm 安装 Kubernetes V1.22.2 踩坑手记
记录一下最近在云服务器上折腾最新版 Kubernetes 遇到的一些坑。
使用 Docker 作为 Container Runtime
cgroup 驱动
kubeadm 支持在执行
kubeadm init
时,传递一个KubeletConfiguration
结构体,KubeletConfiguration
结构体包含cgroupDriver
字段,用于控制 kubelet 的 cgroup 驱动。
注意:如果没有在KubeletConfiguration
中设置cgroupDriver
字段,kubeadm init
会将它设为默认值systemd
。
Kubernetes 官方推荐使用systemd
设为默认 cgroup 驱动。
特别注意:如果使用Docker
作为容器运行时,Docker 默认的驱动类型为cgroupfs
,需要修改成native.cgroupdriver=systemd
。
编辑/etc/docker/daemon.json
文件,修改 docker 的 cgroup 驱动类型
1 |
|
设置 docker 代理
因为 kubeadm 默认为 google 的镜像仓库地址k8s.gcr.io,国内无法访问,所以需要使用代理(如果你没有的话,可以搜索使用私有镜像仓库
的方式拉取)。
1 | mkdir -p /etc/systemd/system/docker.service.d |
增加以下配置(ps:以下端口是我自己的代理配置,按需更改!)
1 | [Service] |
修改 docker0 网桥默认网段
Docker 服务启动后会创建一个 docker0 网桥,他在内核层连通了其他的物理或虚拟网卡,以此实现将所有容器和本地主机都放在同一个物理网络。
Docker 默认指定了 docker0 接口的 IP 和子网掩码,让主机和容器之间以通过网桥互相通信。
为了防止 docker0 网桥网段与宿主机或 VPC 网络网段冲突,建议修改之。
编辑/etc/docker/daemon.json
文件,增加如下配置,然后重启dockersystemctl restart docker
1 | # 以下为笔者配置,按需修改 |
下面是 TODO
- openssl 自签名证书 for kubernetes dashboard
- 安装 Nginx-ingress
- 安装 Traefik-ingress
- 部署 StatefulSet 服务