🔥 Kubernetes 1.33 生产级部署全攻略:从环境搭建到集群落地,这篇教程让你少走 90% 的坑!
当容器编排技术已成为云原生架构的核心支柱,Kubernetes 1.33
版本带着性能优化与安全增强的全新特性强势来袭。无论是运维老手追求更高效的集群管理,还是开发者探索容器化部署的最佳实践,一套完整、可靠的部署手册都是不可或缺的 “通关秘籍”。本文将以 Rocky Linux 9.5
为基础环境,手把手教你从主机配置、容器运行时部署到 Kubernetes 集群初始化的全流程操作,特别针对网络插件集成、镜像加速等生产环境痛点提供实战解决方案,让你轻松构建高可用的 K8s 1.33 集群!
环境信息
K8s 版本: 1.33
操作系统: Rocky Linux 9.5
master 主机名称: k8s-master-01,1 台
worker 主机名称: k8s-worker-01、k8s-worker-02、k8s-worker03
containerd 版本: 2.1.1
基础环境配置
除非另有说明,以下命令需在集合内的所有节点中执行。
修改服务器主机名
请对k8s群集中的主机进行重命名。
hostnamectl set-hostname k8s-master-01
hostnamectl set-hostname k8s-worker-01
hostnamectl set-hostname k8s-worker-02
hostnamectl set-hostname k8s-worker-03
完成操作系统更新
dnf update -y
安装 vmtools(可选)
由于本次环境是在 vmware 平台上进行部署,建议在全部主机上安装vmtools
。
dnf install -y open-vm-tools
关闭操作系统防火墙
systemctl disable --now firewalld
关闭 SElinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
关闭交换分区
sed -i '/swap/d' /etc/fstab
配置时间同步
编辑配置文件 /etc/chrony.conf
,添加或修改 NTP 服务器地址
server ntp.aliyun.com iburst
同步时间并强制更新系统时钟
chronyc makestep
验证时间同步,查看同步源状态,^*
表示已同步的有效服务器。
chronyc sources -v
修改内核参数
cat >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
sysctl --system
增加 hosts 记录
cat >> /etc/hosts <<EOF
10.228.22.20 k8s-master-01
10.228.22.21 k8s-worker-01
10.228.22.22 k8s-worker-02
10.228.22.23 k8s-worker-03
EOF
加载br_betfilter模块
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
nf_conntrack
EOF
加载 ipvs 网络转发模块
dnf -y install ipset ipvsadm
cat <<EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
EOF
重启服务器
上述操作完成后,请务必重启集群中的所有主机。
reboot
容器部署
用 wget
命令将nerdctl-full-2.1.2-linux-amd64.tar.gz
文件下载到服务器中。如果无法下载可以在公众号回复nerdctl
获取下载地址。
wget https://github.com/containerd/nerdctl/releases/download/v2.1.2/nerdctl-full-2.1.2-linux-amd64.tar.gz
将名为 nerdctl - full - 2.1.2 - linux - amd64.tar.gz
的经过 gzip 压缩的归档文件解压到 /usr/local
目录下,并在解压过程中显示详细信息。
tar Cxzvvf /usr/local nerdctl-full-2.1.2-linux-amd64.tar.gz
检查容器版本
containerd -v
containerd 配置修改
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
将默认的 pause
镜像地址修改成国内镜像地址
sed -i "s|sandbox = 'registry.k8s.io/pause:3.10'|sandbox = 'registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10'|" /etc/containerd/config.toml
为确保 containerd 能够正常拉取镜像,需对镜像仓库配置路径进行修改,并完成证书信息配置。首先,创建专用目录用于存放证书文件;随后,创建配置文件,将国内镜像代理地址写入其中,以此优化镜像拉取速度,提升容器运行效率。
sed -i '/^s*[plugins.'"'"'io.containerd.cri.v1.images'"'"'.registry]/{n;s|^(s*)config_path = .*$|1config_path = '"'"'/etc/containerd/certs.d'"'"'|}' /etc/containerd/config.toml
我已为 docker.io(也就是大家熟知的 Docker Hub,即 Docker 容器镜像仓库)配置了加速服务
mkdir /etc/containerd/certs.d/docker.io -p
cat > /etc/containerd/certs.d/docker.io/hosts.toml <<-'EOF'
server = "https://docker.1ms.run"
[host."https://docker.1ms.run"]
capabilities = ["pull", "resolve", "push"]
EOF
配置都做好了,接下来我们就要启动 containerd 和 buildkit 服务。
systemctl daemon-reload
systemctl enable --now containerd
systemctl enable --now buildkit
为提升 nerdctl 命令行操作的效率与准确性,建议配置命令自动补全功能。配置完成后,用户在输入命令时可通过按下 Tab 键实现命令的快速补全,显著优化交互体验。
nerdctl completion bash > /etc/bash_completion.d/nerdctl
source /etc/bash_completion.d/nerdctl
部署 Kubernetes
接下来我们开始进行 Kubernetes 集群部署与配置。
安装 kubeadm
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.nju.edu.cn/kubernetes/core%3A/stable%3A/v1.33/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.nju.edu.cn/kubernetes/core%3A/stable%3A/v1.33/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
安装kubectl、kubeadm、kubelet
dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet
添加命令补齐
kubectl completion bash > /etc/bash_completion.d/kubectl
kubeadm completion bash > /etc/bash_completion.d/kubeadm
source /etc/bash_completion.d/kubectl
source /etc/bash_completion.d/kubeadm
集成 containerd
crictl
(Container Runtime Interface CLI)作为一款用于管理容器运行时的命令行工具,在 Kubernetes 与容器运行时(如 containerd)的交互过程中发挥着桥梁作用,实现二者间的通信协调。
- runtime-endpoint
该配置项用于指定容器运行时(containerd)的运行时接口地址。此处采用unix:///run/containerd/containerd.sock
,表示通过 Unix 套接字协议建立连接,将/run/containerd/containerd.sock
作为目标通信端点,从而为 crictl 与 containerd 的交互提供明确路径。
- image-endpoint
image-endpoint
与runtime-endpoint
功能类似,主要用于指定镜像服务的接口地址。当前配置同样为unix:///run/containerd/containerd.sock
,这表明在该系统架构下,镜像服务与运行时服务共享同一地址,均由 containerd 负责统一管理与调度。
cat > /etc/crictl.yaml <<-'EOF'
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
集成是否成功,可以用下面的命令来简单检查一下。
crictl images
crictl命令补齐功能
crictl completion bash > /etc/bash_completion.d/crictl
source /etc/bash_completion.d/crictl
集群部署
在kubeadm.yaml
配置文件中,name字段需满足在网络环境中具备可解析性。可通过在集群各节点的/etc/hosts
文件中添加解析记录的方式实现。
集群初始化部署操作仅限在 Master 节点执行。
在此过程中生成了 Kubernetes 安装所需的配置文件。需将配置文件内 API 服务器地址修改为本机 IP 地址;定义集群名称为k8s-master;选用阿里云作为容器镜像拉取源;并为后续 Pod 网络规划预分配172.16.0.0/16
地址段。
kubeadm config print init-defaults > kubeadm.yaml
sed -i 's/.*advert.*/ advertiseAddress: 10.228.22.20/g' kubeadm.yaml
sed -i 's/.*name.*/ name: k8s-master-01/g' kubeadm.yaml
sed -i 's|imageRepo.*|imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers|g' kubeadm.yaml
sed -i "/^\s*networking:/a\ podSubnet: 172.16.0.0/16" kubeadm.yaml
初始化配置
modprobe br_netfilter
kubeadm init --config kubeadm.yaml
等待出现 join,保存好 join 命令
kubeadm join 10.228.22.20:6443 --token abcdef.0123456789abcdef
--discovery-token-ca-cert-hash sha256:67e810fcfaa7b843f9009859a625bb840cd1d67d8417ca911b87c0317772625e
授权管理权限
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
部署 Calico 网络插件
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/refs/tags/v3.30.0/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/refs/tags/v3.30.0/manifests/custom-resources.yaml
vim custom-resources.yaml
请注意需要修改cidr
处的 IP 地址
apiVersion: operator.tigera.io/v1
kind: Installation
spec:
calicoNetwork:
ipPools:
- name: default-ipv4-ippool
cidr: 192.168.0.0/16 #这里换成我们上面规定好的172.16.0.0/16
将配置信息应用到 Kubernetes 集群中
kubectl apply -f custom-resources.yaml
查询集群组件是否工作正常
kubectl get pod -A
加入节点
执行kubeadm join操作时,需确保所有 Worker 节点均满足以下先决条件:
-
完成 hosts 文件解析配置及 Containerd 容器运行时部署
-
关闭系统 Swap 分区
-
配置 iptables 规则以允许桥接流量
-
安装 kubeadm、kubelet、kubectl 等必要组件
-
完成 Containerd 与 Kubernetes 的集成配置
-
预先下载 Calico 网络插件相关镜像文件
如果时间长忘记了join参数,可以在master节点上用以下方法重新生成
kubeadm token create --print-join-command
我们现在可以在 worker 主机上输入 join
命令加入K8s集群,并确认k8s集群状态。
kubectl get nodes
kubectl get pod -A
🎉 至此,你已完成 Kubernetes 1.33 集群的全流程部署! 从基础环境配置到 Calico 网络插件落地,每一步操作都经过生产环境验证,确保集群稳定性与可扩展性。现在,你可以通过 kubectl get nodes
和 kubectl get pod -A
命令确认集群状态,开启容器化应用部署的新篇章。
💡 部署小贴士:
- 建议将 join 命令保存至笔记,便于后续新增节点时快速调用;
- 生产环境中建议补充监控与日志系统(如 Prometheus + EFK),提升集群可观测性。
如果你在部署过程中遇到任何问题,或希望了解 K8s 1.33 的新特性深度解析,欢迎在评论区留言交流!后续我们还将推出进阶教程(包括应用部署、HPA 自动扩缩容实战),记得星标不迷路哦~
此文章为原创文章,作者:胖哥叨逼叨,如若转载,请与我联系并注明出处:https://www.pangshare.com/4128.htm