聊聊kubernetes1.20用containerd替换docker(shim)的问题

目录
  • A.在work节点上替换
  • B.在master节点上替换

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

首先查看集群

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

ssh连接到 k8s-worker-01

A. 在work节点上替换

  • 从服务中删除一个节点

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

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

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

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

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

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

sudo modprobe overlay
sudo modprobe br_netfilter

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

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

应用一下设置

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"
  • 安装containerd
sudo apt-get update &amp;&amp; sudo apt-get install -y containerd.io
  • 配置containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
  • 使用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
  • 启动服务
sudo systemctl enable containerd
sudo systemctl start containerd
sudo systemctl status containerd
  • 配置Kubelet以使用containerd

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

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

验证

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

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

  • 启用调度
kubectl Uncordon k8s-worker-01

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

B. 在master节点上替换

  • 停止master节点

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

sudo systemctl stop kubelet

执行前面的 3-10 步骤

  • 修改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

到此这篇关于kubernetes1.20用containerd替换docker(shim)的文章就介绍到这了,更多相关kubernetes替换docker内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用 kind 和 Docker 启动本地的 Kubernetes环境

    介绍 你曾经花过一整天时间尝试入门Kubernetes吗?多亏最近新出现的一些工具,你可以不用再为此大费周章了. 这篇文章中,我将向你展示使用 kind 在单个 Docker 容器中启动一个集群的步骤. 什么是 kind 因为 kind 是 go 语言实现的,请确保安装了最新版本的 golang.根据开发者文档,推荐使用 go1.11.5 及以上版本.为了安装 kind,请运行这些命令(可能需要运行一段时间) kind(Kubernetes IN Docker) 是一个基于 docker 构建

  • centos7搭建docker私人仓库的方法(kubernetes)

    我们平时镜像都是习惯于放在公共仓库的,比如Dockerhub, Daocloud.但在企业里,我们经常会需要搭建公司自己的镜像仓库. 这篇文章讲解如何用docker提供的registry镜像来搭建自己的镜像仓库. 不添加ssl认证的仓库 下面用registry:2.6.2镜像创建docker仓库. 将宿主机的5000端口映射到容器的5000端口. 将宿主机/mnt/registry挂在到容器的/var/lib/registry目录,容器里的这个目录就是存放镜像的地方.这样可以将数据持久化,当容器

  • docker kubernetes dashboard安装部署详细介绍

    docker之kubernetes dashboard部署 1. 环境说明: 1). 架构: 注: 本次实验服务器环境均采用centos 7. 服务安装均采用yum install. 192.168.3.7 master 192.168.3.16 node 2).使用的软件包: master: docker kubernetes-master etcd flannel nodes: docker kubernetes-node flannel 3). 软件版本: docker: 1.10.3 k

  • Docker实践—CentOS7上部署Kubernetes详解

    Kubernetes架构 Kubernetes的整体架构如下: Master为主控节点,上面运行apiserver,scheduler,controller-manager等组件.Minion相当于工作节点,上面运行kubelet,proxy,cAdvisor以及最重要的docker等组件.下面来实际部署一下这套集群管理工具. 环境 yy1  10.193.6.35 yy2  10.193.6.36 yy1作为master,yy2作为minion. # cat /etc/centos-relea

  • 聊聊kubernetes1.20用containerd替换docker(shim)的问题

    目录 A.在work节点上替换 B.在master节点上替换 kubernetes 1.20 要去掉对 Docker的支持,具体看这里,本篇文章介绍用 containerd 替换 docker,从work节点开始,然后才到master节点. 首先查看集群 [root@node1 ~]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane,master 101d v1.20.1 k8s-work

  • docker下mysql 8.0.20 安装配置方法图文教程

    docker安装mysql版本8.0.20,供大家参考,具体内容如下 第一步 下拉镜像 docker pull mysql:8.0.20 第二步 启动镜像 docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20 查看是否启动成功 docker ps -a 第三步 启动成功后,进入容器内部拷贝配置文件,到宿主主机. docker cp mysql:/etc/mysql /mnt/sda1/

  • 解决docker的tls(ssl)证书过期问题

    问题现象: [root@localhost ~]# docker image pull xxx.com.cn/centos7 Using default tag: latest Error response from daemon: Get https://xxx.com.cn/v1/_ping: x509: certificate has expired or is not yet valid 可能的原因分析: linux使用查看date查看当前时间,与证书的有效时间作比对,得出具体的原因,可

  • 详解docker强制批量删除none的image镜像

    说正题,今天遇到的问题是自己在开发机做坏了几个image镜像,删不了   我想大家也遇到过这样类似的问题  -. 他的名字和tag都是为none,空- 以前看过一个帖子说,给他标记一个tag,就可以干掉,瞎扯- [ruifengyun@bj-buzz-dev01 extractor_docker]$ [ruifengyun@bj-buzz-dev01 extractor_docker]$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL

  • Docker使用Swarm组建集群的方法

    Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具.它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络. Docker 使用 Swarm 可以很方便的在多个主机上创建容器集群,并且容器之间可以跨主机网络通信. Swar

  • Python爬虫通过替换http request header来欺骗浏览器实现登录功能

    以豆瓣为例,访问https://www.douban.com/contacts/list 来查看自己关注的人,要登录才能查看. 如果用requests.get()方法获取这个http,没登录只能抓取回一个登录界面,所以我们要用Python登录网站才能抓取想要的网页. 一个简便的方法就是自己在浏览器上登录好,然后通过下图方法(Chrome为例),找到自己的Cookie和User-Agent,然后发送request时用这复制来的header替换掉待发送的request以达到登录的目的,server端

  • Docker 配置网络使用bridge网络的方法

    就网络而言,桥接网络(bridge network,也叫网桥)是一种链路层设备,用于转发网段之间的流量. bridge 可以是硬件设备或在主机内核中运行的软件设备. 对 Docker 而言,桥接网络使用允许容器连接到同一个桥接网络来通信的软件网桥,同时提供与未连接到该桥接网络的容器的隔离.Docker bridge 驱动程序自动在主机中安装规则使不同桥接网络上的容器不能直接相互通信. 桥接网络用于在同一个 Docker 守护进程上运行的容器通信.对于不同 Docker 守护进程的容器,可以在操作

  • CoreOS配置Docker镜像加速器的方法

    CoreOS下的Docker配置是通过flannel unit来实现的 通过命令可以看出配置文件的默认位置 systemctl cat docker # /run/systemd/system/docker.service [Unit] Requires=torcx.target After=torcx.target Description=Docker Application Container Engine Documentation=http://docs.docker.com After

  • Docker一行命令完成FTP服务搭建的实现

    一行命令 docker run -d \ -v /share:/home/vsftpd \ -p 20:20 \ -p 21:21 \ -p 21100-21110:21100-21110 \ -e FTP_USER=zhaoolee \ -e FTP_PASS=eelooahz \ -e PASV_ADDRESS=47.106.108.135 \ -e PASV_MIN_PORT=21100 \ -e PASV_MAX_PORT=21100 \ --name zhaoolee_vsftpd \

  • 详解Docker 容器跨主机多网段通信解决方案

    一.MacVlan 实现Docker的跨主机网络通信的方案有很多,如之前博文中写到的通过部署 Consul服务实现Docker容器跨主机通信 Macvlan工作原理: Macvlan是Linux内核支持的网络接口.要求的Linux内部版本是v3.9–3.19和4.0+: 通过为物理网卡创建Macvlan子接口,允许一块物理网卡拥有多个独立的MAC地址和IP地址.虚拟出来的子接口将直接暴露在相邻物理网络中.从外部看来,就像是把网线隔开多股,分别接受了不同的主机上一样: 物理网卡收到包后,会根据收到

随机推荐