Kubernetes(k8s)集群搭建笔记1(控制平面)
此笔记先搭建单节点集群(pod运行在控制平面),后续会扩展成控制平面+工作节点(pod运行在工作节点)
硬件版本:ubuntu24.04(内核版本:6.14.0-29-generic)
软件版本:containerd:v2.2.1、k8s及其三件套:v1.35.0、cilium:v1.18.5
前期准备工作:
1、配置静态IP(非常重要,防止断网重联ip变化导致集群挂掉):
在网络设置中进行配置:从自动改为手动,填写ip、掩码、网关、DNS。

重新连接wifi或者有线网,使配置生效,使用ifconfig进行检查:
ifconfig

2、进入root模式:
sudo -i
3、关闭swap(非常重要,k8s强制要求):
注:电脑重启后,swap可能会重新挂载,因此每次重启电脑都需要关闭swap,否则集群不会正常启动
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
验证:
free -h
交换必须是0B

4、开启内核模块(containerd和CNI必须):
cat <
modprobe overlay
modprobe br_netfilter
5、添加内核参数:
cat <
验证检查:
sysctl --system
正式开始安装(安装顺序:容器运行时-k8s组件-CNI):
一、安装容器运行时(这里选择containerd):
1、安装依赖:
apt update
apt install -y ca-certificates curl gnupg lsb-release
2、添加docker官方源(containerd在dorcker仓库里):
注:高版本ubuntu一般自带keyrings文件夹,若不存在就自己建:
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg
| gpg --dearmor -o /etc/apt/keyrings/docker.gpg
确保/etc/apt/keyrings目录下出现docker.gpg:
ls /etc/apt/keyrings
没有就多运行几次。
echo
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg]
https://download.docker.com/linux/ubuntu
$(lsb_release -cs) stable"
| tee /etc/apt/sources.list.d/docker.list > /dev/null
3、安装containerd:
apt update
apt install -y containerd.io
验证版本:
containerd --version
注:此时/etc/containerd/config.toml该路径文件缺少必要参数,需要对其进行初始化。
4、初始化生成默认配置:
注:一般安装完该文件夹会自动生成,如果没有就自己建:
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
5、修改cgroup驱动(k8s v1.35官方文档要求):
vi /etc/containerd/config.toml
找到[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]下的SystemdCgroup
将SystemdCgroup = false 改为 SystemdCgroup = true

6、重载沙箱(pause)镜像:
找到[plugins.'io.containerd.cri.v1.images'.pinned_images]修改sandbox
sandbox = 'registry.aliyuncs.com/google_containers/pause:3.10.1'(使用国内源)

保存并退出编辑:esc + :wq + 回车
7、启动验证containerd:
systemctl daemon-reload
systemctl restart containerd
systemctl enable containerd
检查状态:
systemctl status containerd
看是否active(running)
按q退出
8、开启内核能力(可选,这里选择开启):
apt install -y linux-tools-common linux-tools-$(uname -r)
9、添加kubernetes官方源(这里是v1.35版本,可以根据实际进行更改):
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key
| sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg
确保/etc/apt/keyrings目录下出现kubernetes.gpg:
ls /etc/apt/keyrings
echo "deb [signed-by=/etc/apt/keyrings/kubernetes.gpg]
https://pkgs.k8s.io/core:/stable:/v1.35/deb/ /"
| sudo tee /etc/apt/sources.list.d/kubernetes.list
10、安装cri-tools:
apt update
apt install -y cri-tools
验证:
crictl version
如果能看到 RuntimeName: containerd,说明 CRI 链路完全正常。
11、配置 crictl 默认 socket(指明containerd.sock,避免每次加参数):
cat <
二、安装kuberbetes:
1、安装三大组件:
apt update
apt install -y kubelet kubeadm kubectl
验证版本:
kubeadm version
kubectl version --client
kubelet --version
2、锁版本(防止自动升级出现版本问题):
apt-mark hold kubelet kubeadm kubectl
3、输入exit退出root模式
三、初始化集群(控制平面):
1、在当前文件夹生成 kubeadm 初始化配置:
kubeadm config print init-defaults > kubeadm-init.yaml
2、确认和修改生成的默认参数文件:
vi kubeadm-init.yaml
找到并确认或修改:
advertiseAddress: 1.2.3.4(改成本机ip,如192.168.105.53)

nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock(检查是否指向containerd.sock)

imageRepository: registry.aliyuncs.com/google_containers(改为国内源)

kubernetesVersion: v1.35.0(检查版本是否正确)

name: 24-04gnb(修改为自己主机名称,可通过hostname查询)

networking:
podSubnet: "10.244.0.0/16"(增加podcidr统一分配段,保障后面cilium检测pod环境无误)

3、初始化集群:
sudo kubeadm init --config kubeadm-init.yaml
成功会看到:
Your Kubernetes control-plane has initialized successfully!
注:如果初始化失败,需清理环境,检查问题后重新初始化:
sudo kubeadm reset -f
sudo rm -rf
/etc/kubernetes
/var/lib/etcd
/etc/cni/net.d
/var/lib/cni
/var/lib/kubelet
/run/flannel
/run/calico
sudo systemctl restart containerd
sudo systemctl start kubelet
重置环境再重新init
4、配置 kubectl(使非root用户可以运行kubectl):
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5、单节点允许调度(因为目前是单节点集群,后面扩展为多节点集群后可以取消):
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
检查:
kubectl get pods -A
此时coredns都是pending状态,说明pod间无法通信,需进一步安装CNI。
四、部署CNI(选择通过helm部署cilium eBPF,需要内核版本大于等于5.10):
1、安装Helm:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
验证版本:
helm version
2、添加Cilium官方仓库:
helm repo add cilium https://helm.cilium.io
helm repo update
3、部署Cilium v1.18.5:
显式部署:
注:k8sServiceHost改为自己的主机ip、最后一个参数多节点时需改为2。
helm install cilium cilium/cilium
--namespace kube-system
--version 1.18.5
--set kubeProxyReplacement=false
--set k8sServiceHost=192.168.105.53
--set k8sServicePort=6443
--set ipam.mode=kubernetes
--set routingMode=tunnel
--set encryption.enabled=false
--set operator.replicas=1
删除集群自带的kube-proxy:
kubectl -n kube-system delete ds kube-proxy
检查是否删除:
kubectl -n kube-system get ds | grep kube-proxy
更新参数,使用cilium的proxy:
helm upgrade cilium cilium/cilium
-n kube-system
--version 1.18.5
--reuse-values
--set kubeProxyReplacement=true
--set kubeProxyReplacementMode=strict
kubectl -n kube-system rollout restart ds/cilium
查看cilium状态(需全部running且1/1):
kubectl get pods -n kube-system | grep cilium
查看节点状态(NotReady → Ready):
kubectl get nodes
查看pod状态(需全部running):
kubectl get pods -A
4、简单验证:
创建临时测试 Pod,验证网络连通性和 DNS 解析:
注:此镜像网站可能会失效,若失效可跳过简单验证。
kubectl run test --image=swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/registry.cn-beijing.aliyuncs.com/acs/busybox:v1.29.2 --rm -it -- /bin/sh
测试外网访问(验证网络转发):
ping www.baidu.com
输入exit退出
5、使用sonobuoy进行验证:
进入https://github.com/vmware-tanzu/sonobuoy/releases下载sonobuoy_0.57.3_linux_amd64.tar.gz
tar -xzf sonobuoy_0.57.3_linux_amd64.tar.gz
sudo mv sonobuoy /usr/local/bin/
sonobuoy version
如果没有配置梯子代理,那么需要先手动拉取国内镜像:
拉取conformance:
sudo crictl pull k8s.m.daocloud.io/conformance:v1.35.0
修改标签:
sudo ctr -n k8s.io images tag k8s.m.daocloud.io/conformance:v1.35.0 registry.k8s.io/conformance:v1.35.0
拉取systemd-logs:
sudo crictl pull docker.m.daocloud.io/sonobuoy/systemd-logs:v0.4
修改标签:
sudo ctr -n k8s.io images tag docker.m.daocloud.io/sonobuoy/systemd-logs:v0.4 docker.io/sonobuoy/systemd-logs:v0.4
运行:
sonobuoy run --wait
过程很长,需等待
查看结果:
results=$(sonobuoy retrieve)
sonobuoy results $results
结果应该会有两个测试失败,是正常的,不用管
Plugin: e2e
Status: failed
Total: 7353
Passed: 442
Failed: 2
Skipped: 6909
Failed tests:
[sig-apps] Daemon set [Serial] should rollback without unnecessary restarts [Conformance]
[sig-architecture] Conformance Tests should have at least two untainted nodes [Conformance]
至此,单控制平面节点集群就搭建好了
下一步,为集群添加工作节点:Kuberbetes(k8s)集群搭建笔记2(加入工作节点)
注:可以配置好代理,方便从官方源拉取镜像:Kubernetes(k8s)集群搭建笔记3(为节点配置代理)








