Ubuntu 2604 安装 k8s 1.36.1
一、环境介绍
主机名 操作系统/内核版本/k8s 版本 IP 地址 CPU 内存 外网环境
master01 Ubuntu 26.04/7.0/k8s v1.36 192.168.80.160/24 2 4G 是
node01 Ubuntu 26.04/7.0/k8s v1.36 192.168.80.165/24 2 4G 是
node02 Ubuntu 26.04/7.0/k8s v1.36 192.168.80.166/24 2 4G 是
root@master01:~# hostnamectl | grep -E "Operating System|Kernel|Architecture"; echo -n "当前时间: "; date +"%Y-%m-%d"
Operating System: Ubuntu 26.04 LTS
Kernel: Linux 7.0.0-22-generic
Architecture: x86-64
当前时间: 2026-06-11
root@master01:~#
root@master01:~# echo -n "物理CPU个数:" && lscpu | grep "^Socket(s)" | awk '{print $2}'
物理CPU个数:2
root@master01:~# echo -n "总核心数:" && lscpu | grep "^CPU(s)" | awk '{print $2}'
总核心数:2
root@master01:
root@master01:~# free -mh
total used free shared buff/cache available
Mem: 3.3Gi 1.0Gi 1.2Gi 2.7Mi 1.2Gi 2.2Gi
Swap: 0B 0B 0B
root@master01:~#
Ubuntu 26 安装 K8s 1.36 完整版
一、所有节点:系统初始化(规避网络、内核相关报错)
# 修改主机名
root@master01:~# hostnamectl set-hostname master01
root@master01:~# hostnamectl set-hostname node01
root@master01:~# hostnamectl set-hostname node02
# 修改IP地址 - 下面是示例 - Ubuntu26.04
root@master01:~# vi /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
ens33:
addresses:
- 192.168.15.160/24 #根据实际情况调整
dhcp6: true
match:
macaddress: 00:0c:29:52:a4:3b ##这个需要换成本机的MAC地址
nameservers:
addresses:
- 192.168.15.2 #根据实际情况调整
search: []
routes:
- to: default
via: 192.168.15.2 #根据实际情况调整
set-name: ens33 #根据实际情况调整
version: 2
# 允许root用户sshd远程登录
root@master01:~# vi /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
root@master01:~# Systemctl restart ssh && systemctl restart sshd
# 允许右键粘贴
root@master01:~# vi .vimrc
mouse
# 设置时区并配置时间同步
root@master01:~# timedatectl set-timezone Asia/Shanghai
root@master01:~# apt install -y systemd-timesyncd
root@master01:~# vi /etc/systemd/timesyncd.conf
[Time]
NTP=ntp.aliyun.com ntp.tencent.com ntp.ntsc.ac.cn time1.cloud.tencent.com
FallbackNTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org
RootDistanceMaxSec=5
PollIntervalMinSec=32
PollIntervalMaxSec=2048
root@master01:~# systemctl enable --now systemd-timesyncd && systemctl status systemd-timesyncd
# 关闭swap(永久关闭,避免K8s启动失败)
root@master01:~# swapoff -a
root@master01:~# sed -i '/swap/s/^/#/' /etc/fstab
# 加载内核模块(overlay、br_netfilter,K8s网络依赖)
root@master01:~# cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
# 配置网络内核参数(开启IP转发、桥接过滤,避免网络不通)
root@master01:~# cat <<EOF | 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
sysctl --system
# 验证配置(无报错即正常)
root@master01:~# sysctl net.ipv4.ip_forward
root@master01:~# lsmod | grep -E "br_netfilter|overlay"
- 所有节点:安装containerd
# 解除可能的containerd版本锁定
root@master01:~# apt-mark unhold containerd.io
# 卸载旧版本
root@master01:~# apt remove -y containerd.io
root@master01:~# apt autoremove -y
# 添加containerd源
root@master01:~# install -m 0755 -d /etc/apt/keyrings
root@master01:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
root@master01:~# chmod a+r /etc/apt/keyrings/docker.gpg
root@master01:~# 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
# ubuntu26启用新配置
root@master01:~# vi /etc/apt/sources.list.d/ubuntu.sources
Types: deb
URIs: https://mirrors.aliyun.com/ubuntu
Suites: resolute resolute-updates resolute-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: https://mirrors.aliyun.com/ubuntu
Suites: resolute-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 4. 更新源并安装containerd(自动下载适配版本,无需指定版本号)
root@master01:~# apt update
root@master01:~# apt install -y containerd.io
# 5. 配置containerd(启用systemdcgroup,K8s 1.36必须)
root@master01:~# containerd config default | tee /etc/containerd/config.toml
root@master01:~# sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
root@master01:~# sed -i "s|sandbox = 'registry.k8s.io/pause:3.10.1'|sandbox = 'registry.aliyuncs.com/google_containers/pause:3.10.1'|g" /etc/containerd/config.toml
# 6. 重启并设置开机自启
root@master01:~# systemctl enable --now containerd
# 验证(输出版本号即成功)
root@master01:~# containerd --version
containerd containerd.io v2.2.4 193637f7ee8ae5f5aa5248f49e7baa3e6164966e
root@master01:~#
三、所有节点:添加K8s 1.36 源
# 安装依赖
root@master01:~# apt install -y apt-transport-https ca-certificates curl
# 导入K8s 1.36密钥
root@master01:~# curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.36/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# 写入K8s 1.36源
root@master01:~# echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.36/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
# 更新源
root@master01:~# apt update
四、所有节点:安装K8s 1.36 组件(kubeadm、kubelet、kubectl)
# 安装K8s 1.36最新稳定版(自动适配系统,无需指定版本)
root@master01:~# apt install -y kubelet kubeadm kubectl golang zip wget
如报错请尝试运行
root@master01:~# apt install -y kubelet kubeadm kubectl golang zip wget --allow-change-held-packages
# 锁定版本,防止后续自动升级导致兼容问题
root@master01:~# apt-mark hold kubelet kubeadm kubectl
五、仅Master节点:初始化集群
# 初始化集群(替换为自己的Master节点IP:192.168.15.160)
root@master01:~# kubeadm init \
--apiserver-advertise-address=192.168.15.160 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository=registry.aliyuncs.com/google_containers
# 授权root用户使用kubectl
root@master01:~# mkdir -p $HOME/.kube
root@master01:~# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@master01:~# chown $(id -u):$(id -g) $HOME/.kube/config
# 保存初始化成功后输出的kubeadm join命令(用于Node节点加入集群,示例如下,以实际输出为准)
# 节点加入的时候此token可能会过期,如果需要重新打印的话运行 kubeadm token create --print-join-command
root@master01:~# kubeadm join 192.168.15.160:6443 --token hkm5t8.y8u8npwj43an039g --discovery-token-ca-cert-hash sha256:25793e75efd798cb54a8eaf2cf454ac2d6ee95193a53633c45288f4cbf172c57
六、仅Master节点:安装网络插件
核心作用:节点NotReady的唯一原因是缺少网络插件,安装Flannel适配Pod网段10.244.0.0/16
# 安装Flannel网络插件
root@master01:~# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 等待20-30秒,查看网络插件Pod状态(全部Running即正常)
root@master01:~# kubectl get pods -n kube-flannel
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-ff22d 1/1 Running 1 (50m ago) 64m
kube-flannel-ds-g5ncw 1/1 Running 1 (50m ago) 63m
kube-flannel-ds-hbw7v 1/1 Running 1 (50m ago) 63m
root@master01:~#
七、Node节点:加入集群
# 复制Master节点初始化成功后输出的join命令,示例如下
root@node01:~# kubeadm join 192.168.15.160:6443 --token hkm5t8.y8u8npwj43an039g --discovery-token-ca-cert-hash sha256:25793e75efd798cb54a8eaf2cf454ac2d6ee95193a53633c45288f4cbf172c57
- 集群验证
# master节点可直接执行下面命令,node节点需先执行
# master节点打包配置文件
root@master01:~ cd
root@master01:~ tar -zcf kube.tar.gz .kube/
# node节点解压缩
root@node01:~ tar -zxf kube.tar.gz
# 查看节点状态(Master节点状态为Ready即成功)
kubectl get nodes
# 查看所有Pod状态(kube-system、kube-flannel命名空间下所有Pod均为Running)
kubectl get pods -A
# 查看集群组件状态(均为Healthy)
kubectl get cs
# 查看组件版本
echo "kubeadm: $(kubeadm version -o yaml | grep gitVersion | awk '{print $2}')"
echo "kubectl: $(kubectl version --client -o yaml | grep gitVersion | awk '{print $2}')"
echo "kubelet: $(kubelet --version | awk '{print $2}')"
##############################################################
root@master01:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane 52m v1.36.1
node01 Ready <none> 51m v1.36.1
node02 Ready <none> 51m v1.36.1
root@master01:~# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-ff22d 1/1 Running 1 (38m ago) 51m
kube-flannel kube-flannel-ds-g5ncw 1/1 Running 1 (38m ago) 50m
kube-flannel kube-flannel-ds-hbw7v 1/1 Running 1 (38m ago) 51m
kube-system coredns-6b5f954497-7g9s9 1/1 Running 1 (38m ago) 52m
kube-system coredns-6b5f954497-kqjr5 1/1 Running 1 (38m ago) 52m
kube-system etcd-master01 1/1 Running 1 (38m ago) 52m
kube-system kube-apiserver-master01 1/1 Running 1 (38m ago) 52m
kube-system kube-controller-manager-master01 1/1 Running 1 (38m ago) 52m
kube-system kube-proxy-6tp2x 1/1 Running 1 (38m ago) 51m
kube-system kube-proxy-r5799 1/1 Running 1 (38m ago) 50m
kube-system kube-proxy-zvz28 1/1 Running 1 (38m ago) 52m
kube-system kube-scheduler-master01 1/1 Running 1 (38m ago) 52m
root@master01:~# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-6b5f954497-7g9s9 1/1 Running 1 (38m ago) 52m
coredns-6b5f954497-kqjr5 1/1 Running 1 (38m ago) 52m
etcd-master01 1/1 Running 1 (38m ago) 52m
kube-apiserver-master01 1/1 Running 1 (38m ago) 52m
kube-controller-manager-master01 1/1 Running 1 (38m ago) 52m
kube-proxy-6tp2x 1/1 Running 1 (38m ago) 51m
kube-proxy-r5799 1/1 Running 1 (38m ago) 51m
kube-proxy-zvz28 1/1 Running 1 (38m ago) 52m
kube-scheduler-master01 1/1 Running 1 (38m ago) 52m
root@master01:~# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
etcd-0 Healthy ok
scheduler Healthy ok
root@master01:~#
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)