前言:

        containerd 是一个轻量级的容器运行时,专注于运行容器。相比较于其他容器运行时,如 Docker,containerd 更加精简,去除了一些不必要的功能和组件,从而提供了更高的性能和更低的资源消耗。这使得在大规模 Kubernetes 集群中使用 containerd 可以提升整体的性能和效率。并且Kubernetes 社区积极支持 containerd,并提供了与 containerd 的深度集成

一、基础环境


            三台虚拟机(centos7.6):

master192.168.0.100
node01        192.168.0.101
node02192.168.0.102

             三台服务器关闭防火墙,iptables清空,禁用selinux,时钟同步,全部禁用swap ,配置桥         接功能,配置hosts解析。

          1.1:关闭防火墙

                   systemctl stop firewalld.service && systemctl disable firewalld.service

           1.2:清空iptables

                        iptables -F && iptables-save

           1.3:禁用selinux   /etc/selinux/config 如图:

           1.4:时钟同步

                         因为虚拟机都在本地安装后时间一致。在生产环境中时钟要同步,因为在部                             署服务后程序会在服务器获取时间,如果时间不一致在多节点的集群中程序获取时间判                   断时会出错。                           

          1.5:禁用swap  /etc/fstab

                   执行 sed -i '/ swap / s/^\(.*\)$/#\1/g'  /etc/fstab命令或者vim /etc/fstab注释掉如图条目。

                       

         1.6:配置桥接功能

                   开启桥接功能:modprobe br_netfilter

                   在/etc/sysctl.conf添加   net.ipv4.ip_forward = 1
                                                         net.bridge.bridge-nf-call-iptables = 1
                                                         net.bridge.bridge-nf-call-ip6tables = 1  配置

                   使用sysctl -p 生效

        1.7: 配置hosts解析三台服务器均添加

                         

二、部署container(三台服务器均安装)

           使用阿里docker源安装。安装docker源后执行:

           yum list containerd.io  --showduplicates | sort -r

           可以看到多个container版本安装默认版本即可

            yum install containerd

           安装完成后会自带ctr命令

           启动containerd 

            systemctl enable containerd.service  && systemctl start containerd.service 

           生成配置文件:containerd  config default > /etc/containerd/config.tooml

            (containerd启动后会自动创建配置文件目录目录中有config.tooml文件需要先删除或者修改               名称)

           修改配置文件  SystemdCgroup = true 重启containerd 服务

           修改配置文件sandbox_image = "k8s.gcr.io/pause:3.6" 改为sandbox_image="registry.aliyuncs.com/google_containers/pause:3.9"

三、安装cli工具 

         官方文档 https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md

          在Releases · kubernetes-sigs/cri-tools · GitHub选择你要下载的版本。

         wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.28.0/crictl-v1.28.0-linux-amd64.tar.gz

         tar zxf crictl-v1.28.0-linux-amd64.tar.gz -C /usr/ocal  

         mkdir /usr/local/cri && mv crictl /usr/local/cri

         ln -s /usr/local/cri/* /usr/bin/

         执行crictl config 生存配置文件, 文件路径 : /etc/crictl.yaml 修改配置文件如

          下图:

           

         测试命令crictl images 看有无报错。

三、部署k8s

        使用阿里k8s源,在master节点安装kubelet kubeadm kubectl ,node节点可以不安装kubectl。

        3.1:生成k8s配置文件

                   kubeadm config print init-defaults > /home/kubeadm.yaml

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.0.100
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: master
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
#imageRepository: registry.k8s.io
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.28.7
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd

       修改localAPIEndpoint:advertiseAddress:地址为master地址192.168.0.100

       修改nodeRegistration:name:节点名称master

       修改imageRepository:参数为阿里源 registry.aliyuncs.com/google_containers

       在networking添加容器子网:podSubnet: 10.244.0.0/16

           添加容器驱动:           

---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd

      3.2:初始化K8s。

              运行  kubeadm init --config /home/kubeadm.yaml

              运行初始化后根据提示配置master,添加node节点。

              使用kubectl get pods -A  查看组件运行状态

                     kubectl get nodes     查看节点状态

              k8s初始化成功后三台服务器执行systemctl enable  kubelet.service

四、安装fannel插件

         插件地址:GitHub - flannel-io/flannel: flannel is a network fabric for containers, designed for Kubernetes

         下载插件:

          wget   https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

          打开kube-flannel.yml 查找image找到需要的镜像docker.io/flannel/flannel:v0.24.3和docker.io/flannel/flannel-cni-plugin:v1.4.0-flannel1

           由于部分镜像不能下载先进行测试,使用crictl pull 命令下载镜像,经过测试docker.io/flannel/flannel:v0.24.3和docker.io/flannel/flannel-cni-plugin:v1.4.0-flannel1可以正常拉取

         执行kubectl apply -f kube-fannle.yml 初始化k8s网络。

         执行kubectl get nodes 查看集群状态           

                

五、补充部分ctr和crictl命令

             在ctr查询镜像和容器时候需要指定命名空间

                       例如查询镜像:ctr -n k8s.io image list

ctr -n k8s.io i tag镜像标记tag(i代指image)
ctr -n k8s.io i tag --force强制替换
ctr -n k8s.io i rm 删除镜像
ctr -n k8s.io i pull拉取镜像
ctr -n k8s.io i push -k推送镜像 (-k跳过ssl验证)
ctr -n k8s.io i export xxx.tar xxx导出镜像
ctr -n k8s.io i import xxx.tar导入镜像
crictl images查看镜像
crictl ps -a查看所有容器
crictl pull 拉取镜像
crictl push推送镜像
crictl exec -it  xxxx ls容器xxxx上执行ls命令
crictl logs  xxx获取容器的日志
crictl logs --tail= "N"获取最近的 N 行日志

                   

  

        

  

                     

                       

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐