Kubernetes kubeadm 集群部署与 CKA 实战指南

Kubernetes kubeadm 集群部署与 CKA 实战指南

本项目提供了一套完整的、可操作的 Kubernetes 集群部署方案,聚焦于使用 kubeadm 工具在不同环境中(包括 Apple Silicon、AWS EC2、VirtualBox)从零开始搭建生产级别的集群。同时,项目包含了丰富的 Certified Kubernetes Administrator (CKA) 认证课程笔记和实战练习脚本,帮助用户深入理解 Kubernetes 核心概念。

功能特性

  • 多环境兼容:支持在 Apple Silicon (M1/M2) 使用 Multipass、在 AWS EC2 使用 Terraform、在本地使用 VirtualBox/Vagrant 部署集群。
  • 高可用部署:提供在 AWS 上部署 5 节点高可用 (HA) 集群的详细方案,包含外部负载均衡器 (HAProxy) 配置。
  • CNI 网络集成:无缝集成 Calico 和 Weave 网络插件,支持网络策略,解决 Pod 跨节点通信。
  • CKA 备考笔记:涵盖集群架构、ETCD、Pods、ReplicaSets、Deployments、Services 等 CKA 考试核心概念的结构化笔记。
  • 自动化脚本:包含节点初始化、系统参数调优、容器运行时 (containerd) 安装、集群初始化及节点加入的全套 Bash 脚本。

安装指南

系统要求

  • 操作系统: Ubuntu 22.04 (推荐) 或其他兼容 Linux 发行版
  • 硬件资源: 至少 2GB RAM (每个节点),建议 4GB+;CPU 2核+
  • 网络: 节点间网络互通,能够访问外部容器镜像仓库

依赖项

  • kubeadm, kubelet, kubectl
  • 容器运行时: containerd (本项目统一使用)
  • 工具: curl, apt-transport-https, jq, Multipass (Mac 环境)

通用安装步骤

以下步骤适用于所有环境(在每台节点上执行):

  1. 配置内核模块

    bash 复制代码
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    overlay
    br_netfilter
    EOF
    sudo modprobe overlay
    sudo modprobe br_netfilter
  2. 设置网络参数

    bash 复制代码
    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-iptables  = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.ipv4.ip_forward                 = 1
    EOF
    sudo sysctl --system
  3. 安装 containerd 并配置 systemd cgroup

    bash 复制代码
    sudo apt-get install -y containerd
    sudo mkdir -p /etc/containerd
    containerd config default | sed 's/SystemdCgroup = false/SystemdCgroup = true/' | sudo tee /etc/containerd/config.toml
    sudo systemctl restart containerd
  4. 安装 Kubernetes 组件

    bash 复制代码
    KUBE_LATEST=$(curl -L -s https://dl.k8s.io/release/stable.txt | awk 'BEGIN { FS="." } { printf "%s.%s", $1, $2 }')
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://pkgs.k8s.io/core:/stable:/${KUBE_LATEST}/deb/Release.key | sudo 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:/${KUBE_LATEST}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo apt-get update
    sudo apt-get install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl

使用说明

部署标准三节点集群

  1. 初始化控制平面 (在 controlplane 节点)

    bash 复制代码
    POD_CIDR=10.244.0.0/16
    SERVICE_CIDR=10.96.0.0/16
    sudo kubeadm init --pod-network-cidr $POD_CIDR --service-cidr $SERVICE_CIDR --apiserver-advertise-address $PRIMARY_IP
  2. 配置 kubectl

    bash 复制代码
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
  3. 安装 Pod 网络插件 (Calico)

    bash 复制代码
    kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.1/manifests/tigera-operator.yaml
    curl -LO https://raw.githubusercontent.com/projectcalico/calico/v3.30.1/manifests/custom-resources.yaml
    sed -i "s#192.168.0.0/16#$POD_CIDR#" custom-resources.yaml
    kubectl apply -f custom-resources.yaml
  4. 加入工作节点 (在 node01, node02 上执行)

    bash 复制代码
    # 使用控制平面初始化后生成的 token 命令
    sudo kubeadm join <controlplane-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

测试集群

部署一个 Nginx 应用并暴露为 NodePort 服务:

bash 复制代码
kubectl create deployment nginx --image nginx:alpine
kubectl expose deploy nginx --type=NodePort --port 80
PORT_NUMBER=$(kubectl get service nginx -o jsonpath="{.spec.ports[0].nodePort}")
curl http://node01:$PORT_NUMBER

高可用集群部署关键步骤

在 AWS 等云环境中构建 HA 集群需要配置外部负载均衡器:

  1. 安装 HAProxy

    bash 复制代码
    apt-get update && apt-get install -y haproxy
  2. 配置 HAProxy 前端和后端

    bash 复制代码
    cat <<EOF > /etc/haproxy/haproxy.cfg
    frontend kubernetes
        bind $(dig +short loadbalancer):6443
        mode tcp
        default_backend kubernetes-control-nodes
    
    backend kubernetes-control-nodes
        mode tcp
        balance roundrobin
        server controlplane01 $(dig +short controlplane01):6443 check fall 3 rise 2
        server controlplane02 $(dig +short controlplane02):6443 check fall 3 rise 2
        server controlplane03 $(dig +short controlplane03):6443 check fall 3 rise 2
    EOF
    systemctl restart haproxy
  3. 初始化 HA 控制平面

    bash 复制代码
    sudo kubeadm init --control-plane-endpoint loadbalancer:6443 --upload-certs --pod-network-cidr=192.168.0.0/16

核心代码

节点系统预配置脚本

此脚本用于设置必要的内核参数并安装基础工具,是所有节点的前置操作。

bash 复制代码
#!/usr/bin/env bash
# 设置所需内核模块
sudo modprobe overlay
sudo modprobe br_netfilter

# 持久化模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

# 设置网络参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sudo sysctl --system

容器运行时及 Kubernetes 组件安装脚本

该脚本自动化安装 containerd 及 kubeadm/kubelet/kubectl,并配置 cgroup 驱动。

bash 复制代码
#!/usr/bin/env bash
# 安装 containerd
sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sed 's/SystemdCgroup = false/SystemdCgroup = true/' | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd

# 安装 Kubernetes 组件
KUBE_LATEST=$(curl -L -s https://dl.k8s.io/release/stable.txt | awk 'BEGIN { FS="." } { printf "%s.%s", $1, $2 }')
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/${KUBE_LATEST}/deb/Release.key | sudo 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:/${KUBE_LATEST}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# 配置 crictl
sudo crictl config \
    --set runtime-endpoint=unix:///run/containerd/containerd.sock \
    --set image-endpoint=unix:///run/containerd/containerd.sock

集群资源监控脚本示例

此脚本用于跨多个集群查找 CPU 使用率最高的节点。

bash 复制代码
#!/bin/bash
# 从多个集群上下文中获取 CPU 使用率最高的节点
echo cluster1 $(kubectl --context cluster1 top node --no-headers | sort -nr -k2 | head -1) > /tmp/high_cpu_node
echo cluster2 $(kubectl --context cluster2 top node --no-headers | sort -nr -k2 | head -1) >> /tmp/high_cpu_node
echo cluster3 $(kubectl --context cluster3 top node --no-headers | sort -nr -k2 | head -1) >> /tmp/high_cpu_node
echo cluster4 $(kubectl --context cluster4 top node --no-headers | sort -nr -k2 | head -1) >> /tmp/high_cpu_node
echo cluster5 $(kubectl --context cluster5 top node --no-headers | sort -nr -k2 | head -1) >> /tmp/high_cpu_node

# 找出全局 CPU 最高的节点
final_value=$(cat /tmp/high_cpu_node | sort -nr -k 3 | awk '{print $1,$2}' | head -1 | tr " " ,)
if [[ $(cat /opt/high_cpu_node | grep $final_value) ]]
then 
        echo SUCCESS
else
        echo FAIL
fi

1yqIRiTh1E+W8Z+vXAF4uT4cttG41aDz5FfsbsxfvWSggpt+CtBZAUHHDYh48LW59LClT5ayllkB5JBltB0i+Q==

相关推荐
幻风_huanfeng2 小时前
人工智能之数学基础:坐标下降法
人工智能·深度学习·计算机视觉·梯度下降法·坐标下降法
弋痕2 小时前
Graphiti 实时知识图谱实战笔记
人工智能
沪漂阿龙2 小时前
从“对话机器人”到“全能数字员工”:一文彻底搞懂 AI Agent(附大量代码实战)
人工智能·chatgpt
Rnan-prince2 小时前
ReAct:让AI边思考边行动的突破性技术
人工智能
卖酸奶的不错2 小时前
M-RCGV Memory System Design记忆系统设计文档
人工智能·长短时记忆网络
92year2 小时前
browser-use 怎么让 LLM 看懂网页——86k⭐ 浏览器 Agent 的 DOM 处理管线拆解
aigc
GGBond今天继续上班2 小时前
只需要一条命令,让所有 AI 应用工具共享 skills
前端·人工智能·开源
测试员周周2 小时前
【CrewAI系列2】CrewAI 环境搭不好?纯小白从零部署指南,10 分钟搞定(命令可复制)
人工智能·python
Joshkhh2 小时前
2026年多模型AI使用指南:Gemini/Claude/GPT如何轻松上手?
人工智能·gpt