Ubuntu 22.04部署Kubernetes 1.25
基本环境
最近想要安装最新版本的k8s进行学习和测试,但是k8s1.24后的版本不再支持docker,需要安装cri-dockerd,过程相对复杂了一点。在网上查阅了相关资料进行了尝试,除了安装过程麻烦了一点,使用上与之前的版本没有什么区别。
另外,使用的主机是 win11+Ubuntu 双系统,导致遇到了一些额外的问题。下面对安装过程和遇到的问题进行了记录。
系统和软件版本
内容 | 版本 |
---|---|
Ubuntu | 22.04.1 LTS |
docker | 20.10.21 |
cri-dockerd | 0.2.6.3 |
k8s | 1.25.0 |
master节点ip
192.168.103.46
安装过程
1 准备工作
1.1 修改主机名
hostname $hostname
sudo hostnamectl set-hostname k8s-master
sudo gedit /etc/hosts
# 写入以下内容
192.168.103.46 k8s-master
1.2 关闭swap分区
# free命令,swap行全为0说明没有swap分区
free -m
# 查看swap分区,没有输出说明没有swap分区
sudo swapon -show
# 关闭全部swap分区
sudo swapoff -a
# 修改配置文件,把swap相关的注释掉
sudo vi /etc/fstab
1.3 关闭防火墙
sudo ufw disable
sudo ufw status
1.4 重启电脑,确认swap和防火墙均已关闭
2 安装docker
# 先卸载旧版
apt-get remove docker docker-engine docker.io containerd runc
# 安装证书
apt update
apt-get install ca-certificates curl gnupg lsb-release
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 写入docker镜像源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 修改docker启动项
sudo mkdir /etc/docker
sudo gedit /etc/docker/daemon.json
# 复制以下内容
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}
# 保存关闭后,重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
# 设置开机启动
sudo systemctl enable docker
# 查看docker版本
sudo docker version
3 安装cri-dockerd
# 从github下载cri-dockerd安装包
# Ubuntu应该下载deb包,CentOS是rpm包
# 注意版本号,18.04是bionic,22.04.1是jammy
wget https://github.com/Mirantis/cri-dockerd/releases/cri-dockerd_0.2.6.3-0.ubuntu-jammy_amd64.deb
# 安装
dpkg -i cri-dockerd_0.2.6.3-0.ubuntu-jammy_amd64.deb
# 设置启动参数
sed -i -e 's#ExecStart=.*#ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8 --container-runtime-endpoint fd:// --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib/cni/cache --cni-conf-dir=/etc/cni/net.d#g' /usr/lib/systemd/system/cri-docker.service
# 设置开机启动
systemctl daemon-reload
systemctl enable cri-docker
# 修改containerd的配置,注释掉 disabled_plugins = ["cri"]
# !不修改拉取镜像会报错!!
vi /etc/containerd/config.toml
4 安装k8s
# 安装工具
sudo apt-get install -y apt-transport-https ca-certificates curl
# 安装GBP秘钥
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
sudo echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] http://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 更新软件源
sudo apt-get update
# 查看k8s可用版本
apt-cache madison kubeadm
# 安装k8s 1.25.0版本
sudo apt-get install -y kubelet=1.25.0-00 kubeadm=1.25.0-00 kubectl=1.25.0-00
# 锁定版本,防止自动更新
sudo apt-mark hold kubelet kubeadm kubectl
# 配置kubelet
mkdir /etc/sysconfig
sudo gedit /etc/sysconfig/kubelet
# 复制以下内容,保存退出
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/run/cri-dockerd.sock"
# 开机启动
systemctl enable --now kubelet
注:以上操作在所有节点上都要执行
下面的操作,master节点进行初始化(kubeadm init),集群其他节点加入master节点(kubeadm join)
所有节点都要安装flannel插件
5 初始化master节点
# 查看所需镜像
sudo kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
# 拉取镜像
sudo kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --cri-socket unix:///run/cri-dockerd.sock
# kubeadm初始化
# 注意--cri-socket=unix:///run/cri-dockerd.sock这个参数是必须的,标明使用cri-dockerd
sudo kubeadm init --control-plane-endpoint=192.168.103.46 --kubernetes-version=v1.25.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --cri-socket=unix:///run/cri-dockerd.sock --upload-certs --image-repository registry.aliyuncs.com/google_containers
# 如果集群初始化失败需要重置,执行
sudo kubeadm reset --cri-socket=unix:///run/cri-dockerd.sock
# 配置环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
6 安装flannel插件
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
sudo kubectl apply -f kube-flannel.yml
# 等待一会后,查看节点状态,已经Ready,说明初始化成功
kubectl get nodes
7 Worker节点加入集群
# master节点执行
kubeadm token create --print-join-command
# 得到加入集群命令
kubeadm join 192.168.103.81:6443 --token zeehjn.njmfi35v5xsdnnq9 --discovery-token-ca-cert-hash sha256:9f904207151177ba30bfd43eb6c18d1a866346d60370a1bc7d1462a70ac287dc
worker节点执行上面输出的命令即可
遇到的问题
1、Ubuntu找不到无线网卡,通过安装网卡驱动解决
# 首先查找无线网卡型号
lspci |grep Network
# 在github搜索对应驱动,这里安装的是rtw8852be
https://github.com/lwfinger/rtw8852be
# 按照教程安装成功后,可以使用无线网络
2、在安装系统时设置了swap分区映射,导致swap分区关不了,最后使用DiskGenius工具直接删除对应的分区解决
3、k8s 1.24以上版本不支持docker,需要使用cri-dockerd
4、containerd默认禁用cri,需要修改其配置文件
修改 /etc/containerd/config.toml
注释掉 disabled_plugins = ["cri"]
5、ip和主机名变了之后需要重新配置
配置过程较为繁琐,在后面的文章中会记录成功配置的步骤