热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

K8S从Docker切换到Containnerd操作步骤

K8S从Docker切换到Containnerd的操

前言



Kubernetes宣布在1.20版本弃用docker,选择containerd。然后大量的文章标题是【Kubernetes抛弃了Docker】让很多人产生了疑惑和些许担心。


在开始操作之前,首先我们需要先给docker正名,其实是Kubernetes直接使用containerd创建容器,而不经过docker,但并不能说是抛弃docker,因为containerd的主要贡献者就是docker。containerd是docker贡献给社区的行业标准级的容器运行时项目。




逐个替换Kubernetes Node操作步骤


手工的将一台Kubernetes Node节点,从Docker切换为Containerd需要6个步骤:


1. 将准备操作的节点设置为不可调度。


    [root@linux-node1 ~]# kubectl cordon linux-node3.example.com
    node/linux-node3.example.com cordoned
    [root@linux-node1 ~]# kubectl get node
    NAME STATUS ROLES AGE VERSION
    linux-node1.example.com Ready master 2d3h v1.19.6
    linux-node2.example.com Ready 2d3h v1.19.6
    linux-node3.example.com Ready,SchedulingDisabled 2d3h v1.19.6


    2. 驱逐该节点上面的所有Pod


      [root@linux-node1 ~]# kubectl drain linux-node3.example.com --ignore-daemonsets --delete-local-data


      3.停止Docker和Kubelet,并移除Docker安装。


        [root@linux-node1 ~]# ssh linux-node3
        Last login: Thu Mar 25 06:49:56 2021 from linux-node1
        [root@linux-node3 ~]# systemctl stop kubelet docker
        [root@linux-node3 ~]# yum remove -y docker-ce docker-ce-cli


        4. 创建并修改containerd配置


          [root@linux-node3 ~]# mkdir -p etc/containerd
          [root@linux-node3 ~]# containerd config default > etc/containerd/config.toml


          修改sandbox_image的镜像地址,也就是Pause容器的镜像地址,修改为国内阿里云的地址。

            [root@linux-node3 ~]# vim etc/containerd/config.toml
            sandbox_image = "k8s.gcr.io/pause:3.2"
            修改为:
            sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"


            5. 修改kubelet的启动参数并重启


              [root@linux-node3 ~]# vim etc/sysconfig/kubelet
              KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock"
              [root@linux-node3 ~]# systemctl restart containerd kubelet


              现在你就可以使用crictl替代docker进行一些基本容器管理,首先创建crictl的配置文件。

                [root@linux-node3 ~]# vim etc/crictl.yaml
                runtime-endpoint: unix:///run/containerd/containerd.sock
                image-endpoint: unix:///run/containerd/containerd.sock
                timeout: 10
                debug: false


                使用crictl查看镜像

                  [root@linux-node3 ~]# crictl images
                  IMAGE TAG IMAGE ID SIZE
                  docker.io/library/traefik v1.7.20 96c63a7d3e502 24MB
                  registry.aliyuncs.com/google_containers/kube-proxy v1.19.6 dbcc366449b06 49.3MB
                  registry.aliyuncs.com/google_containers/pause 3.2 80d28bedfe5de 300kB


                  注意:crictl是面向Kubernetes来进行设计的,所以优点是它具备了很多Docker CLI并不具备的功能。


                  例如crictl还可以查看当前节点上的Pod。

                    [root@linux-node3 ~]# crictl pod


                    crictl也可以识别Namespace

                      [root@linux-node3 ~]# crictl pods --namespace default


                      crictl并不具备Docker CLI的丰富的命令集,仅用于在Kubernetes Node上做故障排除,如果你需要进行镜像的构建等操作,依然可以在集群外使用Docker CLI进行。


                      6. 将节点设置为可以调度,并查看验证


                        [root@linux-node1 ~]# kubectl uncordon linux-node3.example.com
                        node/linux-node3.example.com uncordoned
                        [root@linux-node1 ~]# kubectl get node -o wide
                        NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
                        linux-node1.example.com Ready master 2d4h v1.19.6 192.168.56.11 <none> CentOS Linux 7 (Core) 3.10.0-1127.18.2.el7.x86_64 docker://19.3.8
                        linux-node2.example.com Ready <none> 2d3h v1.19.6 192.168.56.12 <none> CentOS Linux 7 (Core) 3.10.0-1127.18.2.el7.x86_64 docker://19.3.8
                        linux-node3.example.com Ready <none> 2d3h v1.19.6 192.168.56.13 <none> CentOS Linux 7 (Core) 3.10.0-1127.18.2.el7.x86_64 containerd://1.4.4


                        创建Deployment进行测试:


                          [root@linux-node1 ~]# kubectl create deploy test-deploy --image nginx:1.14.2 -r 3
                          deployment.apps/test-deploy created


                          查看Pod是否可以创建在更换Containerd的Node上,并进行访问测试。

                            [root@linux-node1 ~]# kubectl get pod -o wide
                            NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
                            test-deploy-587b69c956-hdt4x 1/1 Running 0 41s 10.2.1.38 linux-node2.example.com <none> <none>
                            test-deploy-587b69c956-lpzvn 1/1 Running 0 41s 10.2.1.37 linux-node2.example.com <none> <none>
                            test-deploy-587b69c956-mfkp6 1/1 Running 0 41s 10.2.2.37 linux-node3.example.com <none> <none>


                            在测试环境操作没问题,观察一段时间,接下来就可以在生产环境依次切换各个节点,也可以使用SaltStack、Ansible等工具来完成自动化操作。



                            END -


                            加入新运维社区,开启新征程!    

                               



                            牛人并不可怕,可怕的是牛人比我们还努力!



                            商务合作请邮件:admin@unixhot.com



                            推荐阅读
                            • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
                              本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
                            • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
                              本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
                            • HDFS2.x新特性
                              一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
                            • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
                            • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
                            • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
                            • Java容器中的compareto方法排序原理解析
                              本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
                            • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
                            • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
                            • 海马s5近光灯能否直接更换为H7?
                              本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
                            • React项目中运用React技巧解决实际问题的总结
                              本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
                            • 如何提高PHP编程技能及推荐高级教程
                              本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
                            • SpringBoot整合SpringSecurity+JWT实现单点登录
                              SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
                            • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
                            • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
                            author-avatar
                            多米音乐_34063629
                            这个家伙很懒,什么也没留下!
                            PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
                            Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有