ubuntu2026.04部署k8s1.36版本,运行时docker,网络插件calico
-
- 环境
-
- 操作步骤
-
-
- 修改主机名
-
- 三台主机同时操作
-
-
- 配置阿里云yum源
- 配置host域名解析
- 关闭swap
- 加载内核模块并开启网络转发
- 安装docker
- 安装docker-cri
- 安装k8s组件
-
- master01(192.168.10.12)操作
-
-
- k8s群集初始化
-
- node节点(192.168.10.13/14)操作
-
-
- node节点加入k8s群集
-
- master01(192.168.10.12)操作
-
-
- 安装calico网络插件
-
- 常见报错
-
-
-
- 镜像地址拒接连接
- 镜像路径冲突
- kube-proxy起不来
-
-
- 总结
环境
| Ip | 主机名 | cpu | 内存 |
|---|---|---|---|
| 192.168.10.12 | master01 | 2c | 6G |
| 192.168.10.13 | node1 | 2c | 6G |
| 192.168.10.14 | node2 | 2c | 6G |
| 组件 | 版本 |
|---|---|
| Ubuntu | Ubuntu 26.04 server |
| Docker | 29.1.3 |
| Kubernetes | v1.36.1 |
本文采用
Docker作为容器运行时
cri-dockerd适配Kubernetes CRI接口
Calico作为CNI网络插件
kubeadm方式部署
注:本文绝大部分都不需要科学上网,只有部分需要从github上面拉文件。
99%的操作直接复制就行,命令都是测试过的。除了k8s初始化的token需要看自己的
操作步骤
修改主机名
master01(192.168.10.12)操作
powershell
hostnamectl set-hostname master01
node01(192.168.10.13)操作
powershell
hostnamectl set-hostname node01
node02(192.168.10.14)操作
powershell
hostnamectl set-hostname nde02
三台主机同时操作
配置阿里云yum源
powershell
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
tee /etc/apt/sources.list << 'EOF'
deb https://mirrors.aliyun.com/ubuntu/ resolute main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ resolute-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ resolute-backports main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ resolute-security main restricted universe multiverse
EOF
apt update
配置host域名解析
powershell
cat >> /etc/hosts << EOF
10.54.149.12 master01
10.54.149.13 node01
10.54.149.14 node02
EOF
powershell
cat /etc/hosts

关闭swap
powershell
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
free -h

加载内核模块并开启网络转发
powershell
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
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
安装docker
powershell
sudo apt install docker.io util-linux-extra -y
sudo systemctl start docker
sudo systemctl enable docker
docker --version

powershell
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
安装docker-cri
powershell
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.4.3/cri-dockerd_0.4.3.3-0.debian-bookworm_amd64.deb
apt install ./cri-dockerd_0.4.3.3-0.debian-bookworm_amd64.deb -y
systemctl enable --now cri-docker.service
sudo sed -i 's|^ExecStart=.*|ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.10.2|' /usr/lib/systemd/system/cri-docker.service
sudo systemctl daemon-reload
sudo systemctl restart cri-docker
install的时候会有一个告警,不用管

安装k8s组件
powershell
mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.36/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.36/deb/ /" |\
tee /etc/apt/sources.list.d/kubernetes.list
apt update
apt install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
kubeadm version
kubectl version --client
kubelet --version

master01(192.168.10.12)操作
k8s群集初始化
powershell
kubeadm init \
--apiserver-advertise-address=192.168.10.12 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.36.1 \
--pod-network-cidr=172.16.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock

powershell
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
node节点(192.168.10.13/14)操作
node节点加入k8s群集
token要跟k8s群集初始化的输出结果一样,不要复制我这个

powershell
kubeadm join 192.168.10.12:6443 --token 16vftw.lnioqd010c3n7tjn \
--discovery-token-ca-cert-hash sha256:ded58b64444094269951ce0f1cadc917b8e808accb1b16e3c0b1d6126419b3bf \
--cri-socket=unix:///run/cri-dockerd.sock
验证
powershell
kubectl get nodes
NotReady是因为还没安装网络插件

powershell
kubectl get pod -A
coredns需要安装calico后才会running

master01(192.168.10.12)操作
安装calico网络插件
下载yaml文件并替换成国内镜像地址
powershell
wget https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/calico.yaml
sed-i 's#docker.io/#docker.m.daocloud.io/#g' calico.yaml
grep "image:" calico.yaml

powershell
kubectl apply -f calico.yaml
kubectl get pod -A
等待5分钟左右

到这里k8s群集就搭建完了
常见报错
镜像地址拒接连接
这个报错是因为连不到docker官方镜像,需要转到阿里云镜像

镜像路径冲突
这个报错是因为地址冲突,需要改cri-dockerd 的系统服务配置文件的路径

kube-proxy起不来
kube-proxy没起来是因为pod所在node节点没有改cri-dockerd 的系统服务配置文件的路径

报错后重置配置命令
powershell
sudo kubeadm reset --cri-socket=unix:///run/cri-dockerd.sock --force
sudo rm -rf /etc/kubernetes/ /var/lib/kubelet /var/lib/etcd /etc/cni/net.d
总结
现在是北京时间2026/5/23 4:01,博主有点嘎了
如果对你有帮助,就点个关注吧,你的每一个关注都是博主在面试中吹牛的底气
本来没想继续写博客的,感觉ai已经够发达了,博客也没啥存在的必要了,最近也快离职了,想着复习下基础,部署一个最新版的k8s,查了查网上还没有文档,就寻思用ai辅助着部署,结果快给我气笑了,deepseek说ubuntu26.04还没发布,gpt5胡言乱语,最后历经千辛万苦部署完了之后想了想还是写篇博客出来吧。
博客中很多命令原来都有注释方便理解,后面就全删了,一是一个部署也不需要太注意每条命令的作用,二是看博客的估计也不在意注释,都是直接复制粘贴(本人就是),三是这玩意直接问ai就行。写在博客里就有些冗余了。
如果部署中还有其他问题评论即可。