千家信息网

containerd与kubernetes集成部署

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,部署环境# 操作系统: CentOS Linux release 7.6.1810 (Core)# kubelet 版本: v1.14.6# containerd版本:1.3.0# crictl 版本
千家信息网最后更新 2025年12月01日containerd与kubernetes集成部署

部署环境

# 操作系统: CentOS Linux release 7.6.1810 (Core)# kubelet 版本: v1.14.6# containerd版本:1.3.0# crictl 版本:v1.16.1# cni版本:v0.8.2#工作目录: /apps/k8s# 二进制文件目录: /usr/local/bin/# cni 目录:/apps/cni

准备所需二进制文件

wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.16.1/crictl-v1.16.1-linux-amd64.tar.gzwget https://github.com/containerd/containerd/releases/download/v1.3.0/containerd-1.3.0.linux-amd64.tar.gzwget https://github.com/containernetworking/plugins/releases/download/v0.8.2/cni-plugins-linux-amd64-v0.8.2.tgz

解压下载文件到相应的目录

tar -xvf containerd-1.3.0.linux-amd64.tar.gzmv bin/* /usr/local/bin/tar -xvf crictl-v1.16.1-linux-amd64.tar.gzmv crictl /usr/local/bin/# cni 解压mkdir -p /apps/cni/bin/tar -xvf cni-plugins-linux-amd64-v0.8.2.tgz -C /apps/cni/bin/

准备配置文件

# containerd 配置文件准备mkdir -p /apps/k8s/etc/containerdvi /apps/k8s/etc/containerd/config.toml----------------------------------------------------------------------[plugins.opt]path = "/apps/k8s/containerd"[plugins.cri]stream_server_address = "127.0.0.1"stream_server_port = "10010"sandbox_image = "docker.io/juestnow/pause-amd64:3.1"max_concurrent_downloads = 20  [plugins.cri.containerd]    snapshotter = "overlayfs"    [plugins.cri.containerd.default_runtime]      runtime_type = "io.containerd.runtime.v1.linux"      runtime_engine = ""      runtime_root = ""    [plugins.cri.containerd.untrusted_workload_runtime]      runtime_type = ""      runtime_engine = ""      runtime_root = ""  [plugins.cri.cni]    bin_dir = "/apps/cni/bin"    conf_dir = "/etc/cni/net.d"[plugins."io.containerd.runtime.v1.linux"]  shim = "containerd-shim"  runtime = "runc"  runtime_root = ""  no_shim = false  shim_debug = false[plugins."io.containerd.runtime.v2.task"]  platforms = ["linux/amd64"]-------------------------------------------------------------------# crictl 配置文件准备vim /etc/crictl.yaml------------------------------------------------------------------  runtime-endpoint: unix:///run/k8s/containerd/containerd.sock  image-endpoint: unix:///run/k8s/containerd/containerd.sock  timeout: 10  debug: false

准备containerd 启动文件

由于先前已经安装了docker containerd.service 文件已经存在,为了保证docker 正常运行 新安装的修改为containerdk8svim /usr/lib/systemd/system/containerdk8s.service-----------------------------------------------------------------------------[Unit]Description=Lightweight KubernetesDocumentation=https://containerd.ioAfter=network-online.target[Service]ExecStartPre=-/sbin/modprobe br_netfilterExecStartPre=-/sbin/modprobe overlayExecStartPre=-/bin/mkdir -p /run/k8s/containerdExecStart=/usr/local/bin/containerd \         -c /apps/k8s/etc/containerd/config.toml \         -a /run/k8s/containerd/containerd.sock \         --state /apps/k8s/run/containerd \         --root /apps/k8s/containerd KillMode=processDelegate=yesOOMScoreAdjust=-999LimitNOFILE=1024000   # 决定容器里面文件打开数可以在这里设置LimitNPROC=1024000LimitCORE=infinityTasksMax=infinityTimeoutStartSec=0Restart=alwaysRestartSec=5s[Install]WantedBy=multi-user.target

启动containerd

systemctl start containerdk8s.service设置开机启动systemctl enable containerdk8s.service

验证containerd 部署是否正常

crictl ps -acrictl  imagescrictl pull  busybox:1.25.0[root@ingress-01 tmp]# crictl pull  busybox:1.25.0crictl pull  busybox:1.25.0Image is up to date for busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6# 成功拉取容器

kubelet 配置文件以支持containerd

vim /apps/kubernetes/conf/kubelet----------------------------------------------------------------------------------------------------------------------------KUBELET_OPTS="--bootstrap-kubeconfig=/apps/kubernetes/conf/bootstrap.kubeconfig \              --fail-swap-on=false \              --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/apps/cni/bin \              --kubeconfig=/apps/kubernetes/conf/kubelet.kubeconfig \              --address=192.168.30.36 \              --node-ip=192.168.30.36 \              --hostname-override=ingress-01 \              --cluster-dns=10.64.0.2 \              --cluster-domain=cluster.local \              --authorization-mode=Webhook \              --authentication-token-webhook=true \              --client-ca-file=/apps/kubernetes/ssl/k8s/k8s-ca.pem \              --rotate-certificates=true \              --cgroup-driver=cgroupfs \              --allow-privileged=true \              --healthz-port=10248 \              --healthz-bind-address=192.168.30.36 \              --cert-dir=/apps/kubernetes/ssl \              --feature-gates=RotateKubeletClientCertificate=true,RotateKubeletServerCertificate=true \              --node-labels=node-role.kubernetes.io/k8s-ingress=true \              --serialize-image-pulls=false \              --enforce-node-allocatable=pods,kube-reserved,system-reserved \              --pod-manifest-path=/apps/work/kubernetes/manifests \              --runtime-cgroups=/systemd/system.slice/kubelet.service \              --kube-reserved-cgroup=/systemd/system.slice/kubelet.service \              --system-reserved-cgroup=/systemd/system.slice \              --root-dir=/apps/work/kubernetes/kubelet \              --log-dir=/apps/kubernetes/log \              --alsologtostderr=true \              --logtostderr=false \              --anonymous-auth=true \              --container-log-max-files=10 \              --container-log-max-size=100Mi \              --container-runtime=remote \              --container-runtime-endpoint=unix:///run/k8s/containerd/containerd.sock \              --containerd=unix:///run/k8s/containerd/containerd.sock \              --runtime-request-timeout=15m \              --image-gc-high-threshold=70 \              --image-gc-low-threshold=50 \              --kube-reserved=cpu=500m,memory=512Mi,ephemeral-storage=1Gi \              --system-reserved=cpu=1000m,memory=1024Mi,ephemeral-storage=1Gi \              --eviction-hard=memory.available<500Mi,nodefs.available<10% \              --serialize-image-pulls=false \              --sync-frequency=30s \              --resolv-conf=/etc/resolv.conf \              --pod-infra-container-image=docker.io/juestnow/pause-amd64:3.1 \              --image-pull-progress-deadline=30s \              --v=2 \              --event-burst=30 \              --event-qps=15 \              --kube-api-burst=30 \              --kube-api-qps=15 \              --max-pods=100 \              --pods-per-core=10 \              --read-only-port=0 \              --allowed-unsafe-sysctls 'kernel.msg*,kernel.shm*,kernel.sem,fs.mqueue.*,net.*' \              --volume-plugin-dir=/apps/kubernetes/kubelet-plugins/volume"---------------------------------------------------------------------------------------------------------------------------------------------# 修改启动文件kubelet.servicevim /usr/lib/systemd/system/kubelet.service--------------------------------------------------------------------------------------------------------------------------------------------[Unit]Description=Kubernetes KubeletAfter=containerdk8s.serviceRequires=containerdk8s.service[Service]ExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/hugetlb/systemd/system.slice/kubelet.serviceExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/blkio/systemd/system.slice/kubelet.serviceExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/cpuset/systemd/system.slice/kubelet.serviceExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/devices/systemd/system.slice/kubelet.serviceExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/net_cls,net_prio/systemd/system.slice/kubelet.serviceExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/perf_event/systemd/system.slice/kubelet.serviceExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/cpu,cpuacct/systemd/system.slice/kubelet.serviceExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/freezer/systemd/system.slice/kubelet.serviceExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/memory/systemd/system.slice/kubelet.serviceExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/pids/systemd/system.slice/kubelet.serviceExecStartPre=-/bin/mkdir -p /sys/fs/cgroup/systemd/systemd/system.slice/kubelet.serviceEnvironmentFile=-/apps/kubernetes/conf/kubeletExecStart=/apps/kubernetes/bin/kubelet $KUBELET_OPTSRestart=on-failureKillMode=processLimitNOFILE=1024000LimitNPROC=1024000LimitCORE=infinityLimitMEMLOCK=infinity[Install]WantedBy=multi-user.target# 说明在使用docker 时可以不需要创建kubelet.service 目录# 使用containerd 必须手动创建目录

重启kubelet

# 配置生效systemctl daemon-reload# 重启 kubeletsystemctl restart kubelet# 查看 kubelet 是否启动成功systemctl status kubelet

验证kubelet 是否使用containerd

[root@ingress-01 ~]# crictl psCONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID35df1da048da6       8f04a7056ad34       9 days ago          Running             kube-router         0                   85c23c6b85ebc48f0dc7df9639       cda2583339c95       9 days ago          Running             consul              4                   9cebd1643a3df76e5edca510c1       70a40025bbab5       9 days ago          Running             traefik             3                   3f1f2a000a8fa12f2ccf4702ce       e5a616e4b9cf6       9 days ago          Running             node-exporter       2                   13f2894af33a53b8881a826bed       8f81e24b54353       9 days ago          Running             process-exporter    5                   935bfe1a9b028[root@ingress-01 ~]# crictl imagesIMAGE                                                             TAG                 IMAGE ID            SIZEdocker.io/cloudnativelabs/kube-router                             latest              8f04a7056ad34       31.6MBdocker.io/istio/install-cni                                       1.3.0               0f31f2c08c2f3       58.4MBdocker.io/juestnow/pause-amd64                                    3.1                 da86e6ba6ca19       326kBdocker.io/juestnow/process-exporter                               v0.5.0              8f81e24b54353       5.86MBdocker.io/library/alpine                                          latest              961769676411f       2.79MBdocker.io/library/busybox                                         latest              19485c79a9bbd       765kBdocker.io/library/consul                                          1.5.0               cda2583339c95       43.1MBdocker.io/library/nginx                                           latest              f949e7d76d63b       50.7MBdocker.io/library/traefik                                         v1.7.17             70a40025bbab5       24MBdocker.io/prom/node-exporter                                      v0.18.1             e5a616e4b9cf6       11.1MB# 一切正常# kubelet 使用containerd 不能监控容器 网络流量是很遗憾的一件事# 关闭docker service docker stop# 取消docker 开机启动chkconfig docker off

containerd 单独运行容器

# 创建cni配置vi /etc/cni/net.d/10-mynet.conf------------------------------------------------------------------------{    "cniVersion": "0.2.0",    "name": "mynet",    "type": "bridge",    "bridge": "cni0",    "isGateway": true,    "ipMasq": true,    "ipam": {        "type": "host-local",        "subnet": "10.22.0.0/16",        "routes": [            { "dst": "0.0.0.0/0" }        ]    }}-----------------------------------------------------------------------------

创建启动容器的配置

vi pod-config.json--------------------------------  {      "metadata": {          "name": "sandbox",          "namespace": "default",          "attempt": 1,          "uid": "hdishd83djaidwnduwk28bcsb"      },      "log_directory": "/tmp",      "linux": {      }  }-------------------------------------vi container-config.json-------------------------------------  {    "metadata": {        "name": "busybox"    },    "image":{        "image": "busybox"    },    "command": [        "top"    ],    "log_path":"busybox/0.log",    "linux": {    }  }------------------------# 创建runpcrictl runp pod-config.json# 输出一段字符串crictl create b89dcd8cefcad50d8ae7153e01b7205a1f8497e8de40aa3337e52c116a626c1e container-config.json pod-config.json# 查看创建容器crictl ps -a# 启动容器crictl start 768ffe572c595# 进入容器crictl  exec -ti 768ffe572c595 /bin/sh# 如果能正常进入容器的话证明一起正常咯

文件 容器 配置 目录 准备 版本 成功 二进制 运行 验证 遗憾 操作系统 字符 字符串 手动 流量 环境 系统 网络 新安 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 铜陵物业管理软件开发费用 服务器认证考试 华为存储服务器登陆方式 rpg是用什么软件开发的 朔州市中考成绩查询管理服务器 魔兽卓越服务器查询 服务器无法被外网访问 网络安全工程师都干什么 正式服有哪些部落服务器 威海市委网络安全办 软件开发转入无形资产 河北网络技术开发厂家批发价 防沉迷网络安全教育讲稿 广州黄埔区举行网络安全攻防演练 慧诚利德网络技术有限公司 长宁区网络软件开发定制大概费用 厦门加固服务器价格多少 武汉烽火软件开发 魔兽从服务器断开什么原因 软件开发交接协议书 网络技术及应用 翻译 辽宁信息化软件开发服务五星服务 莱山区管理系统软件开发哪家好 cdn服务器哪里买 软件开发湖南公立学校排名 海珠高性能服务器戴尔 青少年的网络安全公益活动 ea服务器ip 工业视觉软件开发步骤 江都电力系统软件开发
0