kubernetes1.20用containerd替换docker(shim)

kubernetes 1.20 要去掉对 Docker的支持,具体看这里,本篇文章介绍用 containerd 替换 docker,从work节点开始,然后才到master节点。

首先查看集群

[root@node1 ~]# kubectl get nodeNAME     STATUS   ROLES    AGE     VERSIONk8s-master   Ready    control-plane,master  101d    v1.20.1k8s-worker-01   Ready    <none>  101d    v1.20.1k8s-worker-02   Ready    <none>  2d22h   v1.20.1

ssh连接到 k8s-worker-01

A. 在work节点上替换

  1. 从服务中删除一个节点

使用 kubectl drain 从节点安全地逐出所有 Pods。 安全的驱逐过程允许 Pod 的容器 体面地终止, 并确保满足指定的 PodDisruptionBudgets。

kubectl drain k8s-worker-01 --ignore-daemonsets --delete-emptydir-data
  1. 停止 kubelet
sudo systemctl stop kubelet
  1. 卸载docker
sudo apt remove docker-ce docker-ce-clisudo apt autoremove
  1. 启用containerd的前置条件

为了containerd能和kubernetes正常运行,需加载overlay和br_netfilter两个模块。

下面创建containerd.conf,在启动时加载这些模块

cat <<EOF | sudo tee /etc/modules-load.d/containerd.confoverlaybr_netfilterEOF

下一条命令将加载所需的模块

sudo modprobe overlaysudo modprobe br_netfilter

创建一个文件,用于系统启动时设置其他参数

cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.confnet.bridge.bridge-nf-call-iptables  = 1net.ipv4.ip_forward                 = 1net.bridge.bridge-nf-call-ip6tables = 1EOF

应用一下设置

sudo sysctl --system

安装以下软件包以允许apt通过HTTPS使用仓库。

sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加Docker官方GPG key,为啥要这样呢?因为containerd 也需要使用Docker镜像仓库去搜索镜像。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key --keyring /etc/apt/trusted.gpg.d/docker.gpg add -

添加docker源

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
  1. 安装containerd
sudo apt-get update && sudo apt-get install -y containerd.io
  1. 配置containerd
sudo mkdir -p /etc/containerdsudo containerd config default | sudo tee /etc/containerd/config.toml
  1. 使用systemd cgroup driver
sudo vim /etc/containerd/config.toml

找到下面这行,添加SystemdCgroup = true,例子如下:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]  ...  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]    SystemdCgroup = true
  1. 启动服务
sudo systemctl enable containerdsudo systemctl start containerdsudo systemctl status containerd
  1. 配置Kubelet以使用containerd

修改 /var/lib/kubelet/kubeadm-flags.env 文件,改为如下

KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/run/containerd/containerd.sock"
  1. 启动kubernetes
sudo systemctl daemon-reloadsudo systemctl start kubelet

验证

[root@node1 ~]# kubectl get nodeNAME     STATUS   ROLES    AGE     VERSIONk8s-master   Ready    control-plane,master  101d    v1.20.1k8s-worker-01   Ready,SchedulingDisabled    <none>  101d    v1.20.1k8s-worker-02   Ready    <none>  3d      v1.20.1

如果一切正常,你刚刚操作的机器就会显示Ready,SchedulingDisabled,如果显示Not ready,你就要检查是否严格按照我的步骤来操作的。

  1. 启用调度
kubectl Uncordon k8s-worker-01

重新查看集群状态,会发现k8s-worker-01的 STATUS 已经变成了 Ready,你可以对其他节点进行操作了。

B. 在master节点上替换

  1. 停止master节点

由于master节点不能drain ,所以只能停止kubelet,work节点和pods会继续运行,但无法进行管理。

sudo systemctl stop kubelet

执行前面的 3-10 步骤

  1. 修改kubernetes配置文件

最后一步是从kubernetes修改配置文件。尽管此阶段的主节点和工作节点已经在使用containerd,但是还需要调整配置设置,否则在运行kubeadm命令时会出错(例如,将kubernetes升级到新版本)

在master节点执行

kubectl edit node k8s-master

kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock 

修改为

kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock

您可以运行以下命令检查kubeadm是否正常运行。通过运行以下命令,该命令将检查集群是否可以升级。

sudo kubeadm upgrade plan

来源:https://www.icode9.com/content-4-798251.html

(0)

相关推荐

  • (48条消息) 在ubuntu18.04上安装和使用k8s集群

    一.配置虚拟机 1.官网下载VMware16 2.下载Ubuntu18.04桌面版,配置虚拟机.2核 3G 20G 3.配置root登录 https://blog.csdn.net/m0_461288 ...

  • (52条消息) 【四二学堂】k8s/kubernetes v1.20.1 安装,ubantu 20系统

    docker安装包下载地址:花几个积分,还是值得的吧,哈哈哈 https://download.csdn.net/download/qq_38187437/13755761 中文文档地址 http:/ ...

  • k8s环境搭建

    文章目录 1. 工作流程 2. 虚拟机环境准备 3. 部署集群 3.1 准备工作 3.2 安装docker 3.3 安装kubeadm, kubelet, kubectl 3.4 部署集群 3.5 验 ...

  • ubuntu18安装Kubernetes 1.20.5

    在以前的文章   Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装 和  Centos 使用kubeadm安装Kubernetes 1.15.3,由于某些原因需要更新版本, ...

  • Kubernetes CRI

    文章目录 1 什么是 CRI,为什么 Kubernetes 需要它? 2 CRI 概述 3 Pod 和容器生命周期管理 4 为什么必须要有一个以容器为中心的接口? 5 Exec/attach/port ...

  • 不讲武德!Kubernetes要弃用Docker

    什么?Kubernetes 决定弃用 Docker? 这是真的.Kubernetes 现已弃用 Docker. https://github.com/kubernetes/kubernetes/blo ...

  • Kubernetes 前世今生( 附学习导图 )

    虽然 Docker 已经很强大了,但是在实际使用上还是有诸多不便,比如集群管理.资源调度.文件管理等等.那么在这样一个百花齐放的容器时代涌现出了很多解决方案,比如 Mesos.Swarm.Kubern ...

  • Ubuntu18.04 安装k8s

    一.前期准备 准备两台 Ubuntu18.04 至少双核双线程 主机名 IP 说明 master 192.168.20.5 k8s管理节点 node 192.168.20.6 k8s工作节点 二.修改 ...

  • (52条消息) Ubuntu20.04安装Kubernetes v1.22.1版本

    Ubuntu20.04安装k8s Kubernetes v1.22.1版本 安装步骤 准备 环境要求 1.关闭swap分区 2.更改net.bridge.bridge-nf-call-iptables ...

  • Docker 兴衰记:关于开源的一些思考

    Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet ...

  • Jenkins + k8s 实现企业 CI/CD 落地

    一.概述 1.1.环境介绍 我们使用的是 AWS 的 EC2 来搭建我们的集群,安装方式使用 kubeadm 来进行安装,如果使用二进制安装,可以参考我相关文档. 系统版本:ubuntu 16.04 ...

  • kubernetes CRI 前世今生

    在学习kubernetes的过程中,我们会遇到CRI.CNI.CSI.OCI 等术语,本文试图先通过分析k8s目前默认的一种容器运行时架构,来帮助我们更好理解k8s 运行时背后设计逻辑.进而引出CRI ...

  • 我到底应该使用哪个 CRI 替换 kubernetes 集群的 Docker?

    前一段时间 kubernetes 对 docker 的弃用引起了不小的讨论,但其实 docker 并不是 kubernetes 中的 CRI 唯一实现.那么除了 docker 之外,我们还可以使用其他 ...