CKA [Installation] – Ubuntu使用Kubeadm安装Master Node
✅ 安装Containerd
1. 执行以下的命令
这里把 overlay
和 br_netfilter
两个 kernel 模块加入开机自动加载。
overlay
是 overlayfs,用于文件系统层面的镜像层合并等操作。br_netfilter
让 Linux 可桥接(bridge)网络流量时也能被 netfilter(iptables / iptables‑mangle / iptables‑nat)拦截或处理
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
2. 调整Linux Kernel
写入 sysctl 配置以启用下面这些设置:
bridge-nf-call-iptables = 1
:使桥接网络的流量也能通过 iptables 规则ip_forward = 1
:启用 IPv4 的转发(必要于 cluster 跨主机通信等)bridge-nf-call-ip6tables = 1
:IPv6 桥接时也参与 ip6tables
sysctl --system
让这些配置生效
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl --system
3. 安装 containerd 包 , 创建配置目录, 然后再生成默认配置文件到 /etc/containerd/config.toml
apt-get install -y containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
4. 更改config.toml , 把当中的SystemdCgroup从false改成true
nano /etc/containerd/config.toml
【把这个改成true】
SystemdCgroup = true
5. 重启containerd
systemctl restart containerd
6. 检查containerd状态
systemctl status containerd

✅ 更改Linux Kernel
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
- 虽然上一步里也设置了一些类似参数,但这里再确保这些桥接相关的 sysctl 生效
- 相当是一个补充/冗余的配置以确保网络包处理能正确工作
✅ 配置仓库 & 安装 Kubernetes 组件
1. 更新 apt 包缓存 , 安装 https 支持、证书、curl、gpg 等基础工具
sudo apt-get update
apt-get install -y apt-transport-https ca-certificates curl gpg
2. 导入 Kubernetes 仓库的 GPG key,并添加 apt 源
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/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:/v1.34/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
3. 查看该版本支持哪些版本(用于确认可安装版本)
apt-cache madison kubeadm

4. 安装Kubernetes组件
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
5. 启用并启动 kubelet
服务(kubelet 是节点上运行的核心组件)
sudo systemctl enable --now kubelet
6. 使用Kubeadm初始化集群, 需要等一个几十秒才能完成
kubeadm init --pod-network-cidr=192.168.0.0/16
【初始化完整之后就会得到这东西, 需要保存好以便让worker node加进来使用】
kubeadm join 14.1.31.225:6443 --token 5ksnfi.wlt9dvc58z8p4kn0 \
--discovery-token-ca-cert-hash sha256:cb5ca075c58468f55e7a4479b056431ba3c12f26de6407f7afe001c9e900b1f8
7. 把已经设置好的Kubeconfig copy 到master node本机内,以便master node 宿主机能够访问到k8s cluster
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
✅ 移除 Taint(使 master 也能调度 Pod,可选)
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
- 默认情况下,control-plane(master)节点会被打上一个 taint,禁止普通 Pod 调度到其上
- 这条命令是移除这个 taint,让控制面节点也能承载普通工作负载(适合单节点 / 小规模集群)
- 在生产环境中,通常你不会这么做,而是保持 master 只做控制面职责,不跑普通 Pod
✅ 安装CNI网络插件(Calico)
1. 下载并 kubectl create
Calico 的 operator 和自定义资源清单,以部署 Calico 网络插件
Calico 负责 Pod 之间的网络互连、网络策略、安全控制等
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/custom-resources.yaml
2. 必须安装CNI 之后node status 才能变成Ready , 如果是刚安装的话必须等2-3分钟来反映状态
kubectl get nodes
