单Master集群部署
信息
- 最低节点要求:1 或 2 台节点。
- Master 节点一旦宕机,kubectl 等操作工具将无法管理集群,但运行中的容器不会受到影响。
- 精简版集群,两台微服务节点时采用单 Master 集群部署。
本文档基于操作系统 CentOS 7.9 / Debian 12 进行部署 Kubernetes 集群
| 服务器IP | 主机角色 |
|---|---|
| 192.168.10.20 | Kubernetes 01(Master、Node ) |
| 192.168.10.21 | Kubernetes 02(Node) |
服务器要求
- 集群服务器之间网络策略无限制
- 集群服务器之间主机名不能重复
- 主网卡 MAC 地址不能重复【 ip link 查看 】
- product_id 不能重复【 cat /sys/class/dmi/id/product_uuid 】
- kubelet 的6443端口未被占用【 nc -vz 127.0.0.1 6443 】
- 禁用 swap 内存【 执行 swapoff -a 命令进行禁用,并且 /etc/fstab 中禁用 swap 分区挂载 】
安装CRI容器运行环境
Kubernetes 集群各节点均需要操作
-
下载 docker 安装包
- 服务器支持访问互联网
- 服务器不支持访问互联网
wget https://pdpublic.mingdao.com/private-deployment/offline/common/docker-28.5.2.tgz# docker 安装包文件下载链接,下载完成上传至目标服务器https://pdpublic.mingdao.com/private-deployment/offline/common/docker-28.5.2.tgz -
安装 docker
tar -zxvf docker-28.5.2.tgzmv -f docker/* /usr/local/bin/ -
创建 docker 与 containerd 配置文件目录
mkdir /etc/dockermkdir /etc/containerd -
创建 docker 的 daemon.json 文件
cat > /etc/docker/daemon.json <<\EOF{"registry-mirrors": ["https://uvlkeb6d.mirror.aliyuncs.com"],"data-root": "/data/docker","max-concurrent-downloads": 10,"exec-opts": ["native.cgroupdriver=cgroupfs"],"storage-driver": "overlay2","default-address-pools":[{"base":"172.80.0.0/16","size":24}],"insecure-registries": ["127.0.0.1:5000"]}EOF -
创建 containerd 的 config.toml 文件,并修改配置
containerd config default > /etc/containerd/config.tomlsed -i 's/SystemdCgroup =.*/SystemdCgroup = true/g' /etc/containerd/config.tomlsed -i 's#bin_dir =.*#bin_dir = "/usr/local/kubernetes/cni/bin"#' /etc/containerd/config.tomlsed -i 's#sandbox_image =.*#sandbox_image = "127.0.0.1:5000/pause:3.8"#' /etc/containerd/config.tomlsed -i 's#^root =.*#root = "/data/containerd"#' /etc/containerd/config.toml
-
检查 containerd 配置文件
grep "SystemdCgroup\|bin_dir\|sandbox_image\|^root =" /etc/containerd/config.toml输出结果示例
root = "/data/containerd"sandbox_image = "127.0.0.1:5000/pause:3.8"bin_dir = "/usr/local/kubernetes/cni/bin"SystemdCgroup = true
-
配置 docker 的 systemd 文件
cat > /etc/systemd/system/docker.service <<EOF[Unit]Description=DockerAfter=network-online.targetWants=network-online.targetRequires=containerd.service[Service]Type=notifyExecStart=/usr/local/bin/dockerd --containerd /var/run/containerd/containerd.sockExecReload=/bin/kill -s HUP \$MAINPIDLimitNOFILE=1024000LimitNPROC=infinityLimitCORE=0TimeoutStartSec=0Delegate=yesKillMode=processRestart=on-failureStartLimitBurst=3StartLimitInterval=60s[Install]WantedBy=multi-user.targetEOF -
配置 containerd 的 systemd 文件
cat > /etc/systemd/system/containerd.service <<EOF[Unit]Description=containerdAfter=network-online.targetWants=network-online.target[Service]Type=notifyExecStart=/usr/local/bin/containerd --config /etc/containerd/config.tomlLimitNOFILE=1024000LimitNPROC=infinityLimitCORE=0TimeoutStartSec=0Delegate=yesKillMode=processRestart=on-failureStartLimitBurst=3StartLimitInterval=60s[Install]WantedBy=multi-user.targetEOF -
启动 containerd 与 docker 并加入开机自启动
systemctl daemon-reload && systemctl restart containerd && systemctl enable containerdsystemctl daemon-reload && systemctl restart docker && systemctl enable docker
安装CNI插件
Kubernetes 集群各节点均需要操作
-
下载 cni 插件文件
- 服务器支持访问互联网
- 服务器不支持访问互联网
wget https://pdpublic.mingdao.com/private-deployment/offline/common/kubernetes-1.25.4/cni-plugins-linux-amd64-v1.1.1.tgz# cni 插件包文件下载链接,下载完成上传至目标服务器https://pdpublic.mingdao.com/private-deployment/offline/common/kubernetes-1.25.4/cni-plugins-linux-amd64-v1.1.1.tgz -
创建 cni 文件安装目录
mkdir -p /usr/local/kubernetes/cni/bin -
解压 cni 插件到安装目录
tar -zxvf cni-plugins-linux-amd64-v1.1.1.tgz -C /usr/local/kubernetes/cni/bin
安装 K8S 集群所需命令
安装 crictl/kubeadm/kubelet/kubectl 命令,Kubernetes 集群各节点均需要操作
-
创建命令安装目录
mkdir -p /usr/local/kubernetes/bin -
下载命令文件至安装目录
- 服务器支持访问互联网
- 服务器不支持访问互联网
wget https://pdpublic.mingdao.com/private-deployment/offline/common/kubernetes-1.25.4/crictl-v1.25.0-linux-amd64.tar.gztar -zxvf crictl-v1.25.0-linux-amd64.tar.gz -C /usr/local/kubernetes/bincurl -o /usr/local/kubernetes/bin/kubeadm https://pdpublic.mingdao.com/private-deployment/offline/common/kubernetes-1.25.4/kubeadmcurl -o /usr/local/kubernetes/bin/kubelet https://pdpublic.mingdao.com/private-deployment/offline/common/kubernetes-1.25.4/kubeletcurl -o /usr/local/kubernetes/bin/kubectl https://pdpublic.mingdao.com/private-deployment/offline/common/kubernetes-1.25.4/kubectl# crictl 文件下载链接,下载完成后上传至目标服务器,然后解压到 /usr/local/kubernetes/bin 目录https://pdpublic.mingdao.com/private-deployment/offline/common/kubernetes-1.25.4/crictl-v1.25.0-linux-amd64.tar.gztar -zxvf crictl-v1.25.0-linux-amd64.tar.gz -C /usr/local/kubernetes/bin# kubeadm 文件下载链接,下载完成后上传至目标服务器 /usr/local/kubernetes/bin/ 目录https://pdpublic.mingdao.com/private-deployment/offline/common/kubernetes-1.25.4/kubeadm# kubelet 文件下载链接,下载完成后上传至目标服务器 /usr/local/kubernetes/bin/ 目录https://pdpublic.mingdao.com/private-deployment/offline/common/kubernetes-1.25.4/kubelet# kubectl 文件下载链接,下载完成后上传至目标服务器 /usr/local/kubernetes/bin/ 目录https://pdpublic.mingdao.com/private-deployment/offline/common/kubernetes-1.25.4/kubectl -
赋予命令文件可执行权限
chmod +x /usr/local/kubernetes/bin/*chown $(whoami):$(groups) /usr/local/kubernetes/bin/* -
配置 systemd 管理 kubelet
cat > /etc/systemd/system/kubelet.service <<\EOF[Unit]Description=kubelet: The Kubernetes Node AgentDocumentation=https://kubernetes.io/docs/home/Wants=network-online.targetAfter=network-online.target[Service]ExecStart=/usr/local/kubernetes/bin/kubeletRestart=alwaysStartLimitInterval=0RestartSec=10[Install]WantedBy=multi-user.targetEOF -
配置 systemd 管理 kubeadm
mkdir -p /etc/systemd/system/kubelet.service.dcat > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf <<\EOF# Note: This dropin only works with kubeadm and kubelet v1.11+[Service]Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamicallyEnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.EnvironmentFile=-/etc/default/kubeletExecStart=ExecStart=/usr/local/kubernetes/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGSEOF -
启动 kubelet 并加入开机自启动
systemctl daemon-reload && systemctl restart kubelet && systemctl enable kubelet- 这里 restart 之后无需查看服务状态,后续步骤 kubeadm init 和 kubeadm join 之后该服务会自动拉起
-
配置 K8S 命令所在目录并加入环境变量
- CentOS
- Debian
export PATH=/usr/local/kubernetes/bin/:$PATHecho 'export PATH=/usr/local/kubernetes/bin/:$PATH' >> /etc/bashrcexport PATH=/usr/local/kubernetes/bin/:$PATHecho 'export PATH=/usr/local/kubernetes/bin/:$PATH' >> /etc/bash.bashrc -
配置防止后续 crictl 拉取镜像出错
crictl config runtime-endpoint unix:///run/containerd/containerd.sock
安装nerdctl工具
-
下载nerdctl工具
wget https://pdpublic.mingdao.com/private-deployment/offline/common/kubernetes-1.25.4/nerdctl-1.7.0-linux-amd64.tar.gztar -zxvf nerdctl-1.7.0-linux-amd64.tar.gzrm -f containerd-rootless*.shmv nerdctl /usr/local/kubernetes/bin/ -
加入环境变量
echo 'alias nerdctl="nerdctl -n k8s.io"' >> ~/.bashrcsource ~/.bashrcnerdctl -v输出 nerdctl version 1.7.0 代表正常