Centos 7 部署Kubernetes集群 (基于cri-dockerd)
前言
基础描述
从 k8s 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作为k8s的容器运行时了,即从k8s v1.24开始不再使用docker了
但是如果想继续使用docker的话,可以在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim(垫片)。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,调用链更长,效率更低。
本文采用了cri-docker的使用,但是更推荐使用containerd作为k8s的容器运行时
温馨提示:
- 请注意各节点所需执行命令
一、准备环境
k8s集群版本:kubernetes v1.25.0
服务器系统 | 节点IP | 节点类型 | CUP/内存 | Hostname |
Centos 7.4.1708 | 192.168.1.89 | 主节点 | 2核/4G | master |
Centos 7.4.1708 | 192.168.1.90 | 工作节点1 | 2核/4G | node1 |
Centos 7.4.1708 | 192.168.1.91 | 工作节点2 | 2核/4G | node2 |
二、安装检查
注:在三台机器上执行------------------------开始----------------------------
1 2 3 | hostnamectl set -hostname master hostnamectl set -hostname node1 hostnamectl set -hostname node2 |
2.2 三台机器网络连通(修改所有节点)
1 2 3 4 | [root@master ~]# cat /etc/hosts 192.168.1.89 master 192.168.1.90 node1 192.168.1.91 node2 |
2.3 关闭防火墙
1 | systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld && firewall-cmd --state |
2.4 关闭selinux
1 2 | setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config && sestatus |
2.5 关闭swap
1 2 | swapoff -a sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab |
2.6 配置iptables的ACCEPT规则
1 | iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT |
2.7 设置系统参数
1 2 3 4 5 6 7 8 | cat <<EOF > /etc/sysctl.d/k8s.conf vm.swappiness = 0 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system |
三、yum 更新
3.1 更新系统及安装依赖
1 2 | yum install update yum install -y lrzsz conntrack ipvsadm ipset jq sysstat curl iptables libseccomp |
四、安装docker
4.1 设置repo
1 | sudo yum-config-manager --add-repo http: //mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
注:如果提示命令未找到,执行安装软件:yum -y install yum-utils
4.2 设置国内镜像并重启 daemon
1 2 3 4 5 6 7 | sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<- 'EOF' { "registry-mirrors" : [ "https://tsvqojsz.mirror.aliyuncs.com" ] } EOF sudo systemctl daemon-reload |
4.3 下载repo源
1 | wget https: //mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo |
4.4 安装并启动
1 2 3 | yum install -y docker-ce systemctl start docker systemctl enable docker |
4.5 验证安装结果
1 | docker info |
五、安装 cri-dockerd
官方信息
1 2 3 | tar xf cri-dockerd-0.2.6.amd64.tgz cp cri-dockerd/cri-dockerd /usr/bin/ chmod +x /usr/bin/cri-dockerd |
5.2 配置启动⽂件,执行如下命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | cat << "EOF" > /usr/lib/systemd/system/cri-docker.service [Unit] Description=CRI Interface for Docker Application Container Engine Documentation=https: //docs.mirantis.com After=network-online.target firewalld.service docker.service Wants=network-online.target Requires=cri-docker.socket [Service] Type=notify ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7 ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always StartLimitBurst=3 StartLimitInterval=60s LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target EOF |
5.3 ⽣成 socket ⽂件,执行如下命令
1 2 3 4 5 6 7 8 9 10 11 12 | cat << "EOF" > /usr/lib/systemd/system/cri-docker.socket [Unit] Description=CRI Docker Socket for the API PartOf=cri-docker.service [Socket] ListenStream=%t/cri-dockerd.sock SocketMode=0660 SocketUser=root SocketGroup=docker [Install] WantedBy=sockets.target EOF |
5.4 启动 cri-docker 并设置开机⾃动启动
1 2 3 | systemctl daemon-reload systemctl enable cri-docker --now systemctl is -active cri-docker |
六 、安装k8s
部署 kubeadm kubelet kubectl
6.1 添加阿⾥云 yum源
1 2 3 4 5 6 7 8 9 | cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https: //mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https: //mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF |
6.2 安装三大件
1 2 3 | yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0 kubeadm version systemctl enable kubelet |
6.3 修改初始化系统管理器
说明:
ubuntu 系统,debian 系统,centos7 系统,都是使用 systemd 初始化系统。systemd 这边已经有一套 cgroup 管理器了,如果容器运行时和 kubelet 使用 cgroupfs,此时就会存在 cgroups 和 systemd 两种 cgroup 管理器。也就意味着操作系统里面存在两种资源分配的视图,当操作系统上存在 CPU,内存等等资源不足的时候,操作系统上的进程会变得不稳定。
1 2 3 | cat <<EOF > /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS= "--cgroup-driver=systemd" EOF |
注:在三台机器上执行------------------------结束----------------------------
6.4 初始化master节点
- 此命令只在master节点执行,192.168.1.89 替换为你的master节点IP
- 【若要重新初始化集群状态:kubeadm reset,然后再进行以下初始化操作】
1 2 3 4 5 6 7 8 | kubeadm init \ --apiserver-advertise-address=192.168.1.89 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.25.0 \ --service-cidr=10.10.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --cri-socket / var /run/cri-dockerd.sock \ --ignore-preflight-errors=all |
迁移配置
1 2 3 4 5 | mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config |
6.5 将work节点加入集群
1 2 3 | kubeadm join 192.168.1.89:6443 --token dy9bff.3lksz1ppp208zapx \ --discovery-token-ca-cert-hash sha256:534b3bd0ad6e0faa20da83979987aaa852550fbc4a1db7d331d50bb29d04ac84 \ --cri-socket / var /run/cri-dockerd.sock |
七、安装网络插件flannel
7.1 安装flannel
1 | kubectl apply -f https: //raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml |
7.2 查看pod状态
- 查看所有pod信息:kubectl get pods -A -o wide
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [root@master ~]# kubectl get pod --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-flannel kube-flannel-ds-kt72s 1/1 Running 0 3h43m kube-flannel kube-flannel-ds-ppl2v 1/1 Running 0 3h43m kube-flannel kube-flannel-ds-tqj52 1/1 Running 0 3h43m kube-system coredns-c676cc86f-hg4bx 1/1 Running 0 2d23h kube-system coredns-c676cc86f-pp6gs 1/1 Running 0 2d23h kube-system etcd-master 1/1 Running 3 (6h13m ago) 2d23h kube-system kube-apiserver-master 1/1 Running 3 (6h13m ago) 2d23h kube-system kube-controller-manager-master 1/1 Running 2 (6h13m ago) 2d23h kube-system kube-flannel-ds-g4j29 1/1 Running 0 3h49m kube-system kube-flannel-ds-sngvm 1/1 Running 0 3h49m kube-system kube-flannel-ds-w8g45 1/1 Running 0 3h49m kube-system kube-proxy-6pbqd 1/1 Running 1 (6h12m ago) 2d23h kube-system kube-proxy-jzc4n 1/1 Running 3 (6h13m ago) 2d23h kube-system kube-proxy-mvtwg 1/1 Running 1 (6h12m ago) 2d23h kube-system kube-scheduler-master 1/1 Running 2 (6h13m ago) 2d23h |
7.3 查看集群状态
1 2 3 4 5 | [root@master ~]# kubectl get node NAME STATUS ROLES AGE VERSION master Ready control-plane 2d23h v1.25.0 node1 Ready <none> 2d23h v1.25.0 node2 Ready <none> 2d23h v1.25.0 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?