ubuntu 24 + kubernetes 1.33(containerd 1.7.27)

0 环境信息

操作系统

kernel

CPUs

DISK

IP

虚拟机平台

Ubuntu 24.04.3 LTS

6.12.0-061200-generic

32

188G+2T

10.20.173.9/24

VMware20,1

下面主要说的还是使用kubeadm搭建的步骤。注意这里演示的是单节点操作执行的是完整的1-6;多节点主节点仍然执行[1-7],从节点执行[1-4,5中加入集群,6,7]。

1 配置内核转发及网桥过滤

cat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
cat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

加载模块

modprobe overlay
modprobe br_netfilter

查看模块是否加载完成

lsmod | grep br_netfilter
lsmod | grep overlay

应用配置

sysctl --system

2 关闭swap分区

sed -ri 's/.*swap.*/#&/' /etc/fstab

重启

reboot

3 安装容器运行时

wget https://github.com/containerd/containerd/releases/download/v1.7.27/cri-containerd-1.7.27-linux-amd64.tar.gz
tar xf cri-containerd-1.7.27-linux-amd64.tar.gz -C /

mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml

vi /etc/containerd/config.toml
【sandbox_image = "registry.k8s.io/pause:3.8" --> sandbox_image = "registry.k8s.io/pause:3.10"
【SystemdCgroup = false --> SystemdCgroup = true
# 开机自启并现在启动
systemctl enable --now containerd

# 安装成功验证版本
ctr -v

4 安装k8s组件

# 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包
apt-get update
# apt-transport-https 可能是一个虚拟包(dummy package);如果是的话,你可以跳过安装这个包
apt-get install -y apt-transport-https ca-certificates curl gpg

# 下载用于k8s软件包仓库的公共签名密钥
# 如果 `/etc/apt/keyrings` 目录不存在,则应在 curl 命令之前创建它,请阅读下面的注释。
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# 添加k8s apt仓库
# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 更新apt包索引
apt-get update
apt-get install -y kubelet kubeadm kubectl # --allow-change-held-packages
apt-mark hold kubelet kubeadm kubectl

配置kubelet

vim /etc/default/kubelet
【KUBELET_EXTRA_ARGS="--container-runtime-endpoint=unix:///var/run/containerd/containerd.sock --pod-infra-container-image=registry.k8s.io/pause:3.10 --cgroup-driver=systemd"

systemctl enable kubelet

5 主节点配置

# 查看k8s配置需要的组件
kubeadm config images list
# 拉取镜像
kubeadm config images pull
# 主节点初始化
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.20.173.9

注意:上述apiserver-advertise-address后添加自己的ip地址

初始化失败使用下面命令重置后重试

kubeadm reset -f

初始化成功(这里的命令直接复制初始化完成kubeadm提供的命令)

# 初始化成功
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看集群节点:

kubectl get nodes

如果多节点,在node节点上运行命令加入集群

# 其余node节点执行(此命令是初始化成功输出的信息)
kubeadm join 10.20.173.9:6443 --token 5ikr0b.bqit54ddrdjvee0d \
        --discovery-token-ca-cert-hash sha256:e0c4acfe0c38826891b62ece54ee36d34dab41bbecdf7996760da107a6933d37

6 安装calico

# 安装
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/tigera-operator.yaml
# 下载配置文件
wget https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/custom-resources.yaml
# 编辑配置文件修改pod网段
vim custom-resources.yaml
【修改成自己设置的网段即可10.244.0.0/16
kubectl create -f custom-resources.yaml

检查calico是否运行成功

kubectl get pod -n calico-system

使用watch命令持续监控pod状态(稍微久一点)

watch kubectl get pod -n calico-system

(单节点需要做,多节点不用做)删除控制平面上的污点,以便可以在其上调度容器

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

7 仅针对多节点集群

如果是多节点集群,可以参考下面进行优化配置统一管理(所有主机都做):

1 设置主机名

hostnamectl set-hostname "k8smaster"
hostnamectl set-hostname "k8snode1"
hostnamectl set-hostname "k8snode2"

2 互信

cat >> /etc/hosts << EOF
192.168.31.224 k8smaster
192.168.31.225 k8snode1
192.168.31.226 k8snode2
EOF
ssh-keygen -t rsa
ssh-copy-id ip/hostname
# ip/hostname 填入对方的ip或hostname

3 时间同步

# 设置时区
timedatectl set-timezone Asia/Shanghai
# 安装ntpdate与阿里云同步
sudo apt install -y ntpsec-ntpdate
ntpdate ntp.aliyun.com
# 配置自动同步
crontab -e
0 0 * * * ntpdate ntp.aliyun.com

附录

这里介绍一些常见的kubernetes环境搭建工具。可以根据自己的环境需求进行采用。

1 Kubeadm

这也是我们前面搭建的步骤

🛠 Kubeadm - 生产级积木

标签: #生产基石 #官方标准 #手动挡

点评: 这不是玩具!是搭建真·生产集群的工具!

体验:

步骤多,需手动配节点、网络等。

学习曲线陡,但能深入理解K8s。

适合: 运维、目标K8s大神、搭建生产环境。

警告: 🚨小白慎入! 本地玩别用它,会劝退!

  • 容器运行时: 需要用户手动配置,支持 containerd、CRI-O 等符合 CRI 标准的运行时 Container Runtimes | Kubernetes +2

  • CRI: 用户自选(containerd 推荐)

  • 网络: 需要额外安装 CNI 插件(如 Flannel、Calico)

  • 存储: 需要配置存储类

  • 命令行工具: kubectl、kubeadm、kubelet

  • 特点: 官方集群初始化工具,需要更多手动配置

2 K3s

🚀 k3d / k3s - 速度王者

https://docs.k3s.io/zh/

K3S+Docker常用命令 - 三丝柚 - 博客园

标签: #轻量 #秒启动 #省资源

点评: 快!巨快!开发测试效率之王!

亮点:

基于轻量k3s,用Docker跑,集群秒起!

多节点一条命令丝滑搞定。

适合: 追求极致效率、需频繁创建销毁集群的程序员。

种草: 电脑配置不高?想快速验证想法?选它!

  1. k3s

  • 容器运行时: 在 Docker 容器中运行 k3s Choosing a Local Dev Cluster | Tilt

  • CRI: containerd(k3s 内置)

  • 网络: Flannel(默认)

  • 存储: Local Path Provisioner

  • 命令行工具: kubectl、k3d CLI

  • 负载均衡: Traefik(内置)

3 Minikube

Choosing a Local Dev Cluster

刚入坑云原生,被 Minikube、Kind、Kubeadm 搞晕?别怕!🔥 帮你扒清主流工具,找到你的“本命”!👇 

🥇 Minikube - 全能老大哥

标签: #经典 #功能全 #虚拟机/Docker

点评: 啥都能干,速度中规中矩!新手友好,体验全面。

亮点:

安装简单,minikube start 就行。

集成 Dashboard、Ingress 等插件,方便!(minikube addons enable)

适合: 入门小白,要稳定全功能本地环境。

避坑: 默认虚拟机慢+吃资源,加 --driver=docker!

Minikube

  • 容器运行时: 默认使用虚拟机方式,支持 Docker、containerd Choosing a Local Dev Cluster | Tilt

  • 网络: 内置网络代理

  • 存储: 支持多种存储驱动

  • 命令行工具: kubectl(需单独安装)

  • 特点: 在虚拟机中运行完整的 Kubernetes 集群

4 Kind

🤓 Kind - 官方亲儿子(k8s in docker)

标签: #Google出品 #测试同款 #稳定

点评: K8s官方自用测试工具,兼容稳如狗!

亮点:

Docker跑节点,启动快。

社区生态好,CI/CD常用。

适合: 想紧跟官方技术栈、需高度一致测试环境。

Tip: Kind更“原味”,k3d更“轻”。

  • 容器运行时: 在 Docker 容器中运行 K3d vs k3s vs Kind vs Microk8s vs Minikube,使用 containerd

  • CRI: containerd

  • 网络: kindnet(基于 CNI)

  • 存储: 本地路径存储

  • 命令行工具: kubectl、kind CLI

  • 特点: 专为测试设计的轻量级方案

5 MicroK8s

📦 MicroK8s - Ubuntu懒人包

标签: #Ubuntu亲儿子 #开箱即用 #全家桶

点评: snap install microk8s 一键搞定,懒人福音!

亮点:

Ubuntu用户最简单选择!

自带 Istio, Knative 等插件,microk8s enable 启用。

适合: Ubuntu死忠,想快速搭带流行组件的环境。

避坑: Snap管理,可能遇非标Docker的坑。😉

  • 容器运行时: containerd(默认)

  • CRI: containerd

  • 网络: Calico(可选启用)

  • 存储: hostpath-storage(内置)

  • 命令行工具: microk8s.kubectl(内置)

  • 包管理: Snap 包管理

  • 特点: Canonical 维护的轻量级 Kubernetes

6 在线k8s练习平台

killercoda.com

play-with-k8s.com

labex

参考资料:

[1] https://www.xiaohongshu.com/discovery/item/687e3c140000000011001b74?source=webshare&xhsshare=pc_web&xsec_token=ABlI26lf3PPNgQJqsZJxZDJOn-Y6F8Gr42YPMJEe-wLJg=&xsec_source=pc_share

[2] https://www.cnblogs.com/Chary/p/18830285

[3] https://blog.csdn.net/qq_41638904/article/details/148406337

[4] https://docs.tigera.io/calico/latest/getting-started/kubernetes/k8s-single-node

[5] https://developer.aliyun.com/article/1473063

[6] https://labex.io/zh/tutorials/kubernetes-online-kubernetes-playground-593609

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐