ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用kubeoperator安装的k8s 版本1.20.14 将节点上的容器运行时从 Docker Engine 改为 containerd

2022-06-27 18:03:51  阅读:229  来源: 互联网

标签:Engine 14 containerd systemctl yum docker 1.20 config dockershim


官方文档:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd/

背景描述:
1.当前k8s版本是 v1.20.14,使用kubeoperator进行安装的,但是使用kubeoperator不能对k8s进行大版本升级
2.安装的容器运行时是dockershim-> Docker Engine,调用路径如下:

3.鉴于k8s版本1.24以后推荐容器运行时使用containerd,因此需要一个测试环境,把现有k8s集群中使用的dockershim-> Docker Engine 换成 containerd

注意:
1.官方提供的还有:将 Docker Engine 节点从 dockershim 迁移到 cri-dockerd。地址:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd/

意味着,在k8s1.24版本以上也能继续使用Docker Engine,只不过需要把原先的dockershim替换成cri-dockerd。

1、检查状态并停止服务
systemctl daemon-reload
systemctl stop docker
systemctl disable docker
systemctl stop kubelet
systemctl stop containerd.io # 没安装


systemctl status kubelet.service  || systemctl status docker.service 


2、升级并配置containerd 

# 默认好像没安装,因此不用升级,直接进行安装
# yum update -y containerd.io-1.4.12

yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast

yum -y install containerd.io  #版本:1.6.6

直接生产默认配置文件:containerd config default > /etc/containerd/config.toml

#在/etc/containerd/config.toml 中 注释 disabled_plugins 这一行 ==》 这一步不用做

#sed -i '/disabled_plugins/s/^/#/' /etc/containerd/config.toml 

配置代理 设置本地、service和pod的段为no_proxy  =》 这一步不用做

mkdir /etc/systemd/system/containerd.service.d

cat > /etc/systemd/system/containerd.service.d/http_proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://10.2.13.41:8888/"
Environment="HTTPS_PROXY=http://10.2.13.41:8888/"
Environment="NO_PROXY=xx.com,10.95.0.0/16,10.96.0.0/16,cluster.local,localhost"
EOF

# 重启containerd  设置自启动
systemctl daemon-reload
systemctl restart containerd  # systemctl start containerd  
systemctl enable containerd.service

# 查看状态
systemctl status containerd -l

# 查看代理是否配置成功
systemctl show --property=Environment containerd


3、修改kubelet使用containerd的配置文件:
sed -i 's/"\(.\+\)"/"\1 --container-runtime=remote --container-runtime-endpoint=unix:\/\/\/run\/containerd\/containerd\.sock"/g' /var/lib/kubelet/kubeadm-flags.env

编辑文件 /var/lib/kubelet/kubeadm-flags.env,将 containerd 运行时添加到标志中: 
--container-runtime=remote 和 --container-runtime-endpoint=unix:///run/containerd/containerd.sock"。

kubectl edit no develop-master-1

kubectl edit no develop-worker-1
kubectl edit no develop-worker-2

更改 kubeadm.alpha.kubernetes.io/cri-socket 值,将其从 /var/run/dockershim.sock 改为你所选择的 CRI 套接字路径 (例如:unix:///run/containerd/containerd.sock)。

# 重启服务并查看状态
systemctl daemon-reload
systemctl start kubelet
systemctl status kubelet.service -l

# crictl配置
cat <<EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 0
debug: false
EOF

查看升级前组件版本:
ctr -v && crictl -v
查看镜像:
ctr namespaces list
ctr -n k8s.io container list


# kubectl get nodes -o wide
NAME               STATUS   ROLES                              AGE    VERSION    INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
develop-master-1   Ready    control-plane,etcd,master,worker   187d   v1.20.14   192.168.2.163   <none>        CentOS Linux 7 (Core)   3.10.0-1160.49.1.el7.x86_64   docker://20.10.7
develop-worker-1   Ready    worker                             187d   v1.20.14   192.168.2.164   <none>        CentOS Linux 7 (Core)   3.10.0-1160.49.1.el7.x86_64   docker://20.10.7
develop-worker-2   Ready    worker                             187d   v1.20.14   192.168.2.165   <none>        CentOS Linux 7 (Core)   3.10.0-1160.49.1.el7.x86_64   containerd://1.6.6

问题:
1.使用yum方式安装containerd后,需要生产默认配置文件

containerd config default > /etc/containerd/config.toml
systemctl restart containerd

然后需要修改里面的默认的sandbox_image ,以及镜像仓库等。

尚未解决的问题:配置私有镜像仓库时需要配置拉取镜像使用的用户名和密码,这个还不知道怎么配置

2.之前的pod在启动时,有些公共镜像拉取不下来,这是因为containerd拉取镜像的时候必须是全路径的,也就是说必须带上仓库地址

后续情况:

问题1的私有仓库账号密码没法解决,已经回滚仍使用docker了。

标签:Engine,14,containerd,systemctl,yum,docker,1.20,config,dockershim
来源: https://www.cnblogs.com/sanduzxcvbnm/p/16416444.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有