kubernetes 使用cri-o 替换docker
发表于:2025-12-13 作者:千家信息网编辑
千家信息网最后更新 2025年12月13日,部署环境# 操作系统:CentOS Linux release 8.0.1905 (Core)# kubelet 版本: v1.14.0# runc版本:v1.0.0-rc9# crictl 版本:v
千家信息网最后更新 2025年12月13日kubernetes 使用cri-o 替换docker
部署环境
# 操作系统:CentOS Linux release 8.0.1905 (Core)# kubelet 版本: v1.14.0# runc版本:v1.0.0-rc9# crictl 版本:v1.16.1#crio版本:v1.15.2#conmon版本:v2.0.1# cni版本:v0.8.2# 网络插件: kube-router#工作目录: /apps# 二进制文件目录: /usr/bin# cni 目录:/apps/cni# 工作节点:win10 on Ubuntu 19.10# 工作目录:/mnt/g/work/crio# 节点IP:192.168.2.196# 节点名:node05准备所需二进制文件
mkdir -p /mnt/g/work/criocd /mnt/g/work/criowget https://github.com/opencontainers/runc/releases/download/v1.0.0-rc9/runc.amd64wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.16.1/crictl-v1.16.1-linux-amd64.tar.gzwget https://github.com/cri-o/cri-o/releases/download/v1.15.2/crio-v1.15.2.tar.gzwget https://github.com/containernetworking/plugins/releases/download/v0.8.2/cni-plugins-linux-amd64-v0.8.2.tgzwget https://github.com/containers/conmon/archive/v2.0.1.zip解压下载文件及编译源码
# conmon 官方不提供二进制下载所以要编译# 工作节点编译然后分发sudo apt-get install \ gcc \ git \ libc6-dev \ libglib2.0-dev \ pkg-config \ make \ unzip \ runc# 编译conmon# 解压conmon unzip v2.0.1.zipcd conmon-2.0.1make# 二进制文件目录 ./bin/conmoncp -pdr ./bin/conmon ../rm -rf conmon-2.0.1 v2.0.1.zip # 解压cnimkdir ./cni/bincd ./cni/binmv ../../cni-plugins-linux-amd64-v0.8.2.tgz ./tar -xvf cni-plugins-linux-amd64-v0.8.2.tgzrm -rf cni-plugins-linux-amd64-v0.8.2.tgz# 回到最上级目录cd ../../# 解压crictltar -xvf crictl-v1.16.1-linux-amd64.tar.gz rm -f crictl-v1.16.1-linux-amd64.tar.gz # 解压crio tar -xvf crio-v1.15.2.tar.gz cd crio-v1.15.2/bin/ mv crio-x86_64-static-glibc ../../crio rm -rf crio-v1.15.2 crio-v1.15.2.tar.gz # 重命名runc.amd64 mv runc.amd64 runc chmod +x runc创建配置文件
cd /mnt/g/work/crio# 配置cni 测试配置文件 接入kubernetes 集群需要删除此cni 配置文件 mkdir -p ./etc/cni/net.d cat > ./etc/cni/net.d/87-bridge.conflist < ./etc/containers/policy.json < ./etc/containers/registries.conf < ./etc/crio/crio.conf# 修改生成配置vim ./etc/crio/crio.conf# 取消注释修改存储目录root = "/apps/lib/containers/storage"# 取消注释修改容器运行存储目录runroot = "/apps/run/containers/storage"# 取消注释修改容器运行时文件打开数default_ulimits = [ "nofile=1024000:1024000", "nproc=1024000:1024000", "core=-1:-1",]#修改conmon 路径 默认conmon = "/usr/local/libexec/crio/conmon"conmon = "/usr/bin/conmon"# 修改pids_limit 默认1024pids_limit = 102400# pause_image 默认pause_image = "k8s.gcr.io/pause:3.1" 由于网络不通所有要修改pause_image = "docker.io/juestnow/pause-amd64:3.1"#修改cni 二进制路径plugin_dirs = [ "/apps/cni/bin/",# 创建crictl 配置cat >./etc/crictl.yaml <./crio.service < 分发文件
scp -r crio crictl 192.168.2.196:/usr/local/bin/scp conmon runc 192.168.2.196:/usr/bin/# 分发cniscp -r cni 192.168.2.196:/apps/# 分发配置文件scp -r etc 192.168.2.196:/# 分发启动文件scp crio.service 192.168.2.196:/usr/lib/systemd/system/crio.service启动crio 安装对应依赖
dnf -y install epel-releasednf install dnf-utils ipvsadm telnet wget net-tools conntrack ipset jq iptables curl sysstat libseccomp socat nfs-utils fuse fuse-devel device-mapper# 启动 criosystemctl daemon-reloadsystemctl enable criosystemctl start crio[root@node05 ~]# systemctl status crio● crio.service - OCI-based implementation of Kubernetes Container Runtime Interface Loaded: loaded (/usr/lib/systemd/system/crio.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2019-10-28 10:22:14 CST; 10h ago Docs: https://github.com/github.com/cri-o/cri-o Process: 714 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS) Process: 659 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS) Main PID: 726 (crio) Tasks: 17 (limit: 49836) Memory: 89.3M CGroup: /system.slice/crio.service └─726 /usr/local/bin/crio --log-level info# 创建测试应用cat > sandbox_config.json <配置 kubelet以支持cri-o
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.2.196 \ --node-ip=192.168.2.196 \ --hostname-override=node05 \ --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.2.196 \ --cert-dir=/apps/kubernetes/ssl \ --feature-gates=RotateKubeletClientCertificate=true,RotateKubeletServerCertificate=true \ --node-labels=node-role.kubernetes.io/k8s-node=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:///var/run/crio/crio.sock \ --containerd=unix:///var/run/crio/crio.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 \ --volume-plugin-dir=/apps/kubernetes/kubelet-plugins/volume"---------------------------------------------------------------------------------------------------------------------------------------------# 修改启动文件kubelet.servicevim /usr/lib/systemd/system/kubelet.service--------------------------------------------------------------------------------------------------------------------------------------------[Unit]Description=Kubernetes KubeletAfter=crio.serviceRequires=crio.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 目录# 使用crio 必须手动创建目录# 配置生效systemctl daemon-reload# 启动 crio.service systemctl start crio.service# 启动 kubelet systemctl restart kubelet.service# 创建cni 配置文件10-kuberouter.conflistcat > /etc/cni/net.d/10-kuberouter.conflist < CentOS Linux 7 (Core) 3.10.0-1062.1.2.el7.x86_64 docker://19.3.3nginx-2 Ready k8s-node 47d v1.14.0 192.168.2.189 CentOS Linux 7 (Core) 5.1.0-1.el7.elrepo.x86_64 docker://18.9.6node01 Ready k8s-master 194d v1.14.0 192.168.2.253 CentOS Linux 7 (Core) 5.0.7-1.el7.elrepo.x86_64 docker://18.9.4node02 Ready k8s-master 194d v1.14.0 192.168.3.4 CentOS Linux 7 (Core) 5.0.7-1.el7.elrepo.x86_64 docker://18.9.4node03 Ready k8s-node 47d v1.14.0 192.168.2.165 CentOS Linux 7 (Core) 5.1.0-1.el7.elrepo.x86_64 docker://18.9.6node04 Ready k8s-node 47d v1.14.0 192.168.2.167 CentOS Linux 7 (Core) 5.1.14-1.el7.elrepo.x86_64 docker://18.9.6node05 Ready k8s-node 5h34m v1.14.0 192.168.2.196 CentOS Linux 8 (Core) 4.18.0-80.11.2.el8_0.x86_64 cri-o://1.15.2[root@node05 conf]# crictl psCONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID5942e8c161029 docker.io/library/traefik@sha256:9a77d02ad23622cd85e38eec127a85110ad73ba8258d8b457cf17bd3ad1eeef0 3 hours ago Running traefik 0 b03a2afb9dd919b23f9bc1d51a docker.io/juestnow/process-exporter@sha256:8ef99f0488d8ea30770e048b4e4255a0ace7732422f243ab57fede0a003945bf 3 hours ago Running process-exporter 1 7d133f4fba6c21e5a5a07676f1 docker.io/prom/node-exporter@sha256:b630fb29d99b3483c73a2a7db5fc01a967392a3d7ad754c8eccf9f4a67e7ee31 3 hours ago Running node-exporter 1 cfa2a3d2b851c[root@node05 conf]# crictl podsPOD ID CREATED STATE NAME NAMESPACE ATTEMPTb03a2afb9dd91 3 hours ago Ready traefik-f94cf4494-2n4x5 kube-system 0cfa2a3d2b851c 3 hours ago Ready node-exporter-rmv24 monitoring 17d133f4fba6c2 3 hours ago Ready process-exporter-hrbcv monitoring 1# 容器能正常运行cri-o 替换docker 成功# kube-router 下载地址 https://github.com/cloudnativelabs/kube-router/releases/download/v0.3.2/kube-router_0.3.2_linux_amd64.tar.gz
文件
配置
目录
版本
二进制
节点
工作
编译
容器
注释
网络
测试
运行
路径
存储
成功
操作系统
上级
地址
官方
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
潮州数字软件开发价格
网络安全必须学php吗
linux服务器管理网口
新乡网络技术推荐厂家
上海智能软件开发价钱
网络安全隐患例子
忍者必须死3的服务器是什么时候解锁
一个服务器大概有多少容量
数据库平均值操作
曙光服务器设置管理口
计算机没服务器管理器
软件开发支撑方案
耐心等待服务器
网络安全新文章
海门正规网络技术质量推荐
宝安网络安全存储服务器机箱
无触点稳压器软件开发
腾讯软件开发在线笔试题目
北京群推网络技术有限公司
客户服务器方式有什么特点
sql数据库受限制用户
怎样使用navicat数据库表
网络安全企业西北市场分析
vb如何控制数据库
球球大作战连不上服务器
软件开发工程师考试方式
群晖服务器接投影仪
早教app软件开发
杭州恩牛网络技术有限公司工资
关系数据库可以导出为文本文件吗