提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
- kubernetes 已经在 1.24 版本中删除了 docker-shim 这个组件,使得 docker 无法对接 1.24 以后版本的
kubernetes PS:之前都是 kubernetes 团队维护 docker-shim 组件,因为一些历史原因,放弃了
docker-shim 之前写过一篇 基于 containerd 二进制部署 k8s-v1.23.3,总体体验下来,觉得自己被
docker 惯坏了 containerd 的上手很不习惯,原生的 ctr 命令不好用,build 镜像也依赖 buildkit 服务
对于菜鸡的我来说,containerd 就好比手动挡的车,只有老司机才能驾驭,我更喜欢自动挡多一点
这篇文章,都是使用了当前最新版本的组件来部署,仅供学习使用
实际的生产也好,公司环境也好,还是要选择当前的稳定版本,直接使用最新版会过于激进
另外,如果有需求部署 kubernetes 的话,在不喜欢 containerd 的前提下,可以直接使用 cri-dockerd ,这样在后期如果需要提升到 1.24 以上版本的 kubernetes 就可以减少很多烦心事
虽然,不管是升级容器运行时版本还是升级 kubernetes 版本,都会很糟心,只不过,能少一个是一个 [手动狗头.jpg]
提示:以下是本篇文章正文内容,下面案例可供参考
kubernetes | v1.26.3 |
---|---|
etcd | v3.5.7 |
cfssl | v1.6.3 |
– | – |
docker | 23.0.1 |
cri-dockerd | v0.3.1 |
cni | v1.1.1 |
calico | v3.25.0 |
大部分的组件都是通过 github 下载的,下面整合了下载链接,可以开始前先准备好二进制文件
# kubernetes 二进制文件
https://dl.k8s.io/v1.26.3/kubernetes-server-linux-amd64.tar.gz
# etcd 二进制文件
https://github.com/etcd-io/etcd/releases/download/v3.5.7/etcd-v3.5.7-linux-amd64.tar.gz
# cfssl 二进制文件
https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64
# cfssljson 二进制文件
https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64
# docker 二进制文件
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/docker-23.0.1.tgz
# cri-dockerd 二进制文件
https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1.amd64.tgz
IP | 角色 |
---|---|
192.168.11.147 | master/worker |
192.168.11.148 | master/worker |
192.168.11.149 | master/worker |
一般情况下,master 节点也会复用成 worker 节点,毕竟机器也挺贵的 如果有特殊要求,不希望 master
节点运行容器的话,这里需要注意一些场景 metrics-server 服务获取节点资源使用情况时,需要保证和 apiserver之间的网络可以互通
如果 master 节点不部署容器,理论上只需要部署网络插件来互通网络,实际上我没有尝试过,因为我穷,我都是 master 节点复用 worker 节点
我只尝试过 master 节点复用 worker 节点,但是 master节点不调度容器的场景,因为我的网络插件都是以容器的方式运行的
开始整活
挑选一个节点作为操作节点,我这边就按照顺序,选择了 192.168.11.147 这个节点来进行后面的操作
环境准备
创建干活的目录
这个目录,主要是建立一些模板文件,然后直接通过分发和 ssh 的方式来部署,减少频繁切换节点的操作 这里利用了 shell
变量的方式来操作的,如果终端退出过,需要重新定义 work_dir 这个变量,否则后面的其他操作会导致目录不存在的报错
work_dir='/data/k8s-work-dir'
mkdir -p ${work_dir}/{
bin,images,pkg,tmp/{
ssl,service}}
节点免密操作
静默生成 ssh 证书
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa -q
分发 ssh 证书到所有节点,包含操作节点本身,下面的 ip 记得替换成自己的节点 ip
ip_head='192.168.11';for i in 147 148 149;do ssh-copy-id ${ip_head}.${i};done
关闭防火墙
下面的 ip 记得替换成自己的节点 ip
ip_head='192.168.11';for i in 147 148 149;do \
ssh ${ip_head}.${i} "systemctl disable firewalld"; \
ssh ${ip_head}.${i} "systemctl stop firewalld"; \
done
关闭 selinux
下面的 ip 记得替换成自己的节点 ip
ip_head='192.168.11';for i in 147 148 149;do \
ssh ${ip_head}.${i} "setenforce 0"; \
ssh ${ip_head}.${i} "sed -i 's/SELINUX=[a-z].*/SELINUX=disabled/g' /etc/selinux/config"; \
done
有返回 setenforce: SELinux is disabled 这样的内容,说明 selinux
已经被关闭过了,不需要理会,继续往下操作
关闭 swap 分区
下面的 ip 记得替换成自己的节点 ip
ip_head='192.168.11';for i in 147 148 149;do \
ssh ${ip_head}.${i} "swapoff -a"; \
ssh ${ip_head}.${i} "sed -i '/