一、环境介绍

主机名 操作系统/内核版本/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:~#

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐