从零开始搭建 Kubernetes 集群

从零开始搭建 Kubernetes 集群

🔥 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

Pasted image 20250610174302

完成操作系统更新

dnf update -y

安装 vmtools(可选)

由于本次环境是在 vmware 平台上进行部署,建议在全部主机上安装vmtools

dnf install -y open-vm-tools

Pasted image 20250616141241

关闭操作系统防火墙

systemctl disable --now firewalld

Pasted image 20250616141327

关闭 SElinux

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

Pasted image 20250616141405

关闭交换分区

sed -i '/swap/d' /etc/fstab

Pasted image 20250616141429

配置时间同步

编辑配置文件 /etc/chrony.conf,添加或修改 NTP 服务器地址

server ntp.aliyun.com iburst

同步时间并强制更新系统时钟

chronyc makestep

Pasted image 20250616144718

验证时间同步,查看同步源状态,^* 表示已同步的有效服务器。

chronyc sources -v

Pasted image 20250616144907

修改内核参数

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

Pasted image 20250616145213

加载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

Pasted image 20250616154046

检查容器版本

containerd -v

Pasted image 20250616154203

containerd 配置修改

mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml

Pasted image 20250616154246

将默认的 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

Pasted image 20250616154320

为确保 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

Pasted image 20250616154353

我已为 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

Pasted image 20250616155406

配置都做好了,接下来我们就要启动 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

Pasted image 20250616155457

部署 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

Pasted image 20250616155952

添加命令补齐

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-endpointruntime-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

Pasted image 20250616160511

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

Pasted image 20250616160903
初始化配置

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 

Pasted image 20250616164731

授权管理权限

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

Pasted image 20250616164931

wget https://raw.githubusercontent.com/projectcalico/calico/refs/tags/v3.30.0/manifests/custom-resources.yaml

Pasted image 20250616165017

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

Pasted image 20250616165105

将配置信息应用到 Kubernetes 集群中

kubectl apply -f custom-resources.yaml

查询集群组件是否工作正常

kubectl get pod -A

Pasted image 20250616165549

加入节点

执行kubeadm join操作时,需确保所有 Worker 节点均满足以下先决条件:​

  1. 完成 hosts 文件解析配置及 Containerd 容器运行时部署​

  2. 关闭系统 Swap 分区​

  3. 配置 iptables 规则以允许桥接流量​

  4. 安装 kubeadm、kubelet、kubectl 等必要组件​

  5. 完成 Containerd 与 Kubernetes 的集成配置​

  6. 预先下载 Calico 网络插件相关镜像文件

如果时间长忘记了join参数,可以在master节点上用以下方法重新生成

kubeadm token create --print-join-command

我们现在可以在 worker 主机上输入 join命令加入K8s集群,并确认k8s集群状态。

kubectl get nodes

Pasted image 20250616165846

kubectl get pod -A

Pasted image 20250618140432

🎉 至此,你已完成 Kubernetes 1.33 集群的全流程部署! 从基础环境配置到 Calico 网络插件落地,每一步操作都经过生产环境验证,确保集群稳定性与可扩展性。现在,你可以通过 kubectl get nodes 和 kubectl get pod -A 命令确认集群状态,开启容器化应用部署的新篇章。

💡 部署小贴士:

  • 建议将 join 命令保存至笔记,便于后续新增节点时快速调用;
  • 生产环境中建议补充监控与日志系统(如 Prometheus + EFK),提升集群可观测性。

如果你在部署过程中遇到任何问题,或希望了解 K8s 1.33 的新特性深度解析,欢迎在评论区留言交流!后续我们还将推出进阶教程(包括应用部署、HPA 自动扩缩容实战),记得星标不迷路哦~

此文章为原创文章,作者:胖哥叨逼叨,如若转载,请与我联系并注明出处:https://www.pangshare.com/4128.htm

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2小时前
下一篇 2小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注