使用 kubeadm 部署 Kubernetes 集群指南
本文档提供一份使用 kubeadm 工具部署 Kubernetes 集群的详细步骤,旨在为部署过程提供清晰的指引。
一、 环境初始化
在部署前,需完成所有节点的基础环境配置,包括但不限于:时间同步、内核转发、主机名设置、关闭 Swap 等。
二、 安装容器运行时 (Containerd)
Kubernetes 依赖容器运行时来管理容器的生命周期。
安装 containerd
参考官方文档:containerd Getting Started
wget https://github.com/containerd/containerd/releases/download/v2.2.1/containerd-2.2.1-linux-amd64.tar.gz tar -xf containerd-2.2.1-linux-amd64.tar.gz -C /usr/local/配置
systemd服务并启动。wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -O /etc/systemd/system/containerd.service systemctl daemon-reload systemctl enable --now containerd安装 runc
wget https://github.com/opencontainers/runc/releases/download/v1.4.0/runc.amd64 install -m 755 runc.amd64 /usr/local/sbin/runc安装 CNI 插件
CNI (Container Network Interface) 插件为 Pod 提供网络能力。
wget https://github.com/containernetworking/plugins/releases/download/v1.9.0/cni-plugins-linux-amd64-v1.9.0.tgz mkdir -p /opt/cni/bin tar -xf cni-plugins-linux-amd64-v1.9.0.tgz -C /opt/cni/bin/配置 cgroup 驱动
为确保
containerd和kubelet使用一致的 cgroup 驱动(systemd),需要修改containerd的配置。mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml # 将 SystemdCgroup 的值从 false 修改为 true sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml systemctl restart containerd.service
三、 安装 Kubernetes 组件
安装 kubeadm、kubelet 和 kubectl。
参考官方文档:安装 kubeadm
配置 Kubernetes APT 仓库
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.35/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list安装并锁定版本
apt-get update apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl配置 kubectl 命令补全 (推荐)
mkdir -p /etc/bash_completion.d/ kubectl completion bash | tee /etc/bash_completion.d/kubectl > /dev/null chmod a+r /etc/bash_completion.d/kubectl配置 Kubelet
# 在 /etc/default/kubelet 文件中指定 cgroup 驱动 echo 'KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"' > /etc/default/kubelet systemctl enable --now kubelet
四、 部署 Kubernetes 集群
生成
kubeadm配置文件kubeadm config print init-defaults > kubeadm-config.yml修改配置文件
编辑
kubeadm-config.yml文件:advertiseAddress: 填写控制平面节点的IP;若为高可用集群,则填写虚拟IP (VIP)。imageRepository: 国内环境建议更换为境内镜像源,如registry.cn-hangzhou.aliyuncs.com/google_containers。podSubnet: Pod 网络地址段,需与后续网络插件的配置保持一致。
拉取镜像并初始化集群
# 根据配置文件拉取镜像 kubeadm config images pull --config=kubeadm-config.yml # 执行集群初始化 kubeadm init --config kubeadm-config.yml --upload-certs配置 kubectl 凭证
初始化成功后,根据输出提示配置
kubectl客户端。# 为普通用户配置 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 或为 root 用户配置 export KUBECONFIG=/etc/kubernetes/admin.conf加入节点
在其他节点上执行
kubeadm init成功后输出的kubeadm join命令,以加入集群。- 加入工作节点:直接使用生成的
join命令。 - 加入控制平面节点:使用带有
--control-plane和--certificate-key参数的join命令。
提示:如果加入集群的
token或证书密钥已过期,可在主节点上运行以下命令重新生成:# 重新生成 join 命令 (包含新 token) kubeadm token create --print-join-command # 重新上传证书并输出新的 certificate-key kubeadm init phase upload-certs --upload-certs- 加入工作节点:直接使用生成的
五、 安装网络插件 (Calico)
参考 Calico 官方文档:
下载并配置 Calico
wget https://raw.githubusercontent.com/projectcalico/calico/refs/heads/master/manifests/calico.yaml修改
calico.yaml文件,确保CALICO_IPV4POOL_CIDR的值与kubeadm初始化时设置的podSubnet一致。# ... - name: CALICO_IPV4POOL_CIDR value: "10.244.0.0/16" # 确保此值与 podSubnet 匹配 # ...国内环境可按需修改
image字段,将其指向国内镜像地址。应用 Calico 清单
kubectl apply -f calico.yaml等待所有
calicoPod 正常运行后,kubectl get nodes应显示所有节点状态为Ready。
六、 安装常用组件
Metrics Server
参考官方文档:kubernetes-sigs/metrics-server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yamlHelm
参考官方文档:Helm 安装指南
wget https://get.helm.sh/helm-v4.0.4-linux-amd64.tar.gz tar -xf helm-v4.0.4-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/sbin/Kubernetes Dashboard
使用 Helm 安装 Dashboard。
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/ helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard暴露 Dashboard (NodePort)
创建
Service以通过节点端口从外部访问 Dashboard。apiVersion: v1 kind: Service metadata: name: kubernetes-dashboard-kong-proxy namespace: kubernetes-dashboard spec: type: NodePort selector: app.kubernetes.io/name: kong app.kubernetes.io/component: app ports: - port: 443 targetPort: 8443 nodePort: 32443生成 Dashboard 访问令牌
创建具有管理员权限的服务账号 (
ServiceAccount) 并为其生成登录令牌。kubectl -n kubernetes-dashboard create serviceaccount admin-user kubectl create clusterrolebinding admin-user \ --clusterrole=cluster-admin \ --serviceaccount=kubernetes-dashboard:admin-user kubectl -n kubernetes-dashboard create token admin-user --duration=24h使用生成的令牌登录 Dashboard。