当前位置: 首页 > news >正文

如何在 Ubuntu24.04 TLS 上安装 Kubernetes 集群 - Antonie

0-先决条件

在开始安装之前,请确保您的环境满足以下先决条件:

  • Ubuntu 24.04 LTS 系统。
  • 至少 4GB RAM 或更多。
  • 至少 2 个 CPU 内核。
  • 有 40 GB 可用磁盘空间。

1- 环境准备

集群规划

  • k8s-node-1(Master):10.15.0.132
  • k8s-node-2(Worker):10.15.0.133
  • k8s-node-3(Worker):10.15.0.134

设置主机名,同步 host 文件:

1、设置主机名:

sudo hostnamectl set-hostname k8s-n1
sudo hostnamectl set-hostname k8s-n2
sudo hostnamectl set-hostname k8s-n3

2、同步 host 文件

在每台机器的 /etc/hosts 文件中添加主机名和 IP 的对应关系:

sudo sh -c 'cat >> /etc/hosts <<EOF
10.15.0.132 k8s-n1
10.15.0.133 k8s-n2
10.15.0.134 k8s-n3
EOF'

查看 /etc/hosts 文件,预期结果如下:
image-20250915235307484

在每台机器上,将 DNS 服务器修改成稳定可靠的公共DNS。

编辑 /etc/resolv.conf 文件:

sudo nano /etc/resolv.conf

将其内容修改或确保包含如下内容(可以使用谷歌或国内公共DNS):

nameserver 8.8.8.8       # 谷歌主DNS
nameserver 114.114.114.114 # 国内114DNS
nameserver 223.5.5.5     # 阿里DNS (可作为备选)

在某些系统(如Ubuntu)上,/etc/resolv.conf 可能被网络服务自动覆盖。你需要修改网络配置文件使其永久生效。

如果你使用 Netplan (常见于Ubuntu 18.04及以后):

找到你的 Netplan 配置文件(通常在 /etc/netplan/目录下),编辑它:

sudo nano /etc/netplan/50-cloud-init.yaml

在配置中添加 nameservers 部分:

network:version: 2ethernets:ens33: # 你的网卡名称,可能不是ens33,请用 `ip a` 命令确认dhcp4: truenameservers:addresses: [8.8.8.8, 114.114.114.114, 255.5.5.5]

应用配置:

sudo netplan apply

/etc/resolv.conf 文件内容结果如下:
image-20250915235724533

2 - 禁用 Swap 分区,加载内核模块

在每个实例上运行以下命令来禁用交换空间,这样 Kubernetes 集群才能顺利工作。

sudo swapoff -a  
sudo sed -i '/swap/ s/^/#/' /etc/fstab

image-20250915235820730

验证禁用 Swap 分区是否成功。如果没任何输出,则说明成功

swapon --show

使用 modprobe 命令加载以下内核模块。

sudo modprobe overlay
sudo modprobe br_netfilter

要永久加载这些模块,请创建包含以下内容的文件。

sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF

接下来,添加像 IP 转发这样的内核参数。创建一个文件,并使用 sysctl 命令加载参数。

sudo tee /etc/sysctl.d/kubernetes.conf <<EOF  
net.bridge.bridge-nf-call-ip6tables = 1  
net.bridge.bridge-nf-call-iptables = 1  
net.ipv4.ip_forward = 1  
EOF

运行以下命令,加载上述内核参数。

sudo sysctl --system

3 - 安装配置 Containerd

Containerd 为 Kubernetes 提供了容器运行时,在所有三个实例上安装 containerd

首先,安装容器依赖项。

sudo apt update
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

添加阿里云 Docker 镜像源

sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

现在,使用以下 apt 命令安装 containerd

sudo apt update
sudo apt install containerd.io -y

验证安装:

containerd --version

image-20250916000622804

可能会出现这个异常:

image-20250916001834995

注意:这个时候解决的方法是重新设置一下 DNS 的配置。

接下来,配置 containerd,使其开始使用 SystemdCgroup 运行下面的命令。

  • 生成默认配置
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
  • 启用 SystemdCgroup
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

image-20250916000712226

为 contained 配置镜像加速源:

  • 编辑 containerd 的主配置文件 /etc/containerd/config.toml,确保其启用了目录模式的配置。
  • 执行下面的指令,明确指定镜像加速器配置目录。
sudo sed -i 's|config_path = ""|config_path = "/etc/containerd/certs.d"|g' /etc/containerd/config.toml
  • 创建配置目录与文件:

1、为 Docker Hub (docker.io) 创建对应的配置目录和文件:

sudo mkdir -p /etc/containerd/certs.d/docker.io
sudo nano /etc/containerd/certs.d/docker.io/hosts.toml

将下面的内容粘贴到 hosts.toml 文件中。

server = "https://docker.io"  # 原始仓库地址# 镜像加速器列表
[host."https://docker.1panel.live"]capabilities = ["pull", "resolve"]
[host."https://dc.j8.work"]capabilities = ["pull", "resolve"]
[host."https://docker.m.daocloud.io"]capabilities = ["pull", "resolve"]
[host."https://dockerproxy.com"]capabilities = ["pull", "resolve"]
[host."https://docker.mirrors.ustc.edu.cn"]capabilities = ["pull", "resolve"]
[host."https://docker.nju.edu.cn"]capabilities = ["pull", "resolve"]
# 可以保留一个到官方仓库的链接作为后备,但通常加速器已包含
# [host."https://registry-1.docker.io"]
#   capabilities = ["pull", "resolve", "push"]

2、为 registry.k8s.io 这个地址也配置加速镜像源。

sudo mkdir -p /etc/containerd/certs.d/registry.k8s.io
sudo nano /etc/containerd/certs.d/registry.k8s.io/hosts.toml

将下面的内容粘贴到 hosts.toml 文件中。

server = "https://registry.k8s.io"[host."https://registry.cn-hangzhou.aliyuncs.com/google_containers"]capabilities = ["pull", "resolve", "push"]

重新启动 containerd 服务,使上述更改生效。

sudo systemctl restart containerd
sudo systemctl enable containerd

image-20250916000854739

查看 /etc/containerd/config.toml 文件,路径已经配置上了。

image-20250916000948902

查看 /etc/containerd/certs.d 目录,也成功生成对应的配置目录。

image-20250916001133603

修改 Containerd 配置,统一 Sandbox 镜像。

sudo sed -i 's|sandbox_image = ".*"|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|g' /etc/containerd/config.toml

重新启动 containerd 服务,使上述更改生效。

sudo systemctl restart containerd

image-20250916001220935

查看 /etc/containerd/config.toml 文件,sandbox_image 已经被修改。

image-20250916001332428

安装 和 配置 crictl(可选)

crictl是 Kubernetes 节点上调试容器运行时(CRI)的标准工具,比 ctr 更贴近 Kubelet 的行为。

安装 K8s 时,默认就会安装 crictl 的,这里选择提前安装是为了测试 Containerd 是否可以成功拉取到镜像。

这里使用离线下载,将 crictl 压缩包下载然后上传到所有节点上。

官网地址:https://github.com/kubernetes-sigs/cri-tools

因为我们要安装的 K8s 的版本为 1.30,所以这里选择的 crictl 的版本为 1.34。

sudo tar zxvf crictl-v1.34.0-linux-amd64.tar.gz -C /usr/local/bin

创建配置文件,指定 containerd 的 socket 路径。

  • 注意:如果现在不安装 crictl,后面完成 k8s 集群初始化,下面的命令还是要执行的。
cat << EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF

image-20250916002558709

测试拉取 Nginx 镜像,看看配置的镜像源能不能使用。

sudo crictl pull nginx
sudo crictl images

image-20250916002800946

4 - 安装 Kubernetes

4.1. 添加 Kubernetes Package Repository

Kubernetes 软件包在 Ubuntu 24.04 的默认包存储库中不可用,所以要先添加它的存储库。在每个实例上运行这些步骤。

使用 curl 命令下载 Kubernetes 包存储库的公共签名密钥。安装的 kubernetes 版本为 1.30。

  • 添加阿里云 Kubernetes 源
sudo curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  • 接下来,通过运行以下命令添加 Kubernetes 存储库。
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list

image-20250916002911417

4.2. 安装 Kubernetes 部件 (Kubeadm, kubelet & kubectl)

安装 Kubernetes 组件,在所有实例上运行以下 apt 命令。

sudo apt update
sudo apt install -y kubelet kubeadm kubectl
# 锁定版本,防止意外升级
sudo apt-mark hold kubelet kubeadm kubectl
# 确保 kubelet 已启用(尽管 init 后才会完全正常)
sudo systemctl enable kubelet

4.3. 安装 Kubernetes

所有的先决条件都满足了,我们可以开始安装 Kubernetes 了。

在 master 节点上执行 Kubeadm 命令,仅用于初始化 Kubernetes 集群。

  1. 预先拉取 Kubernetes 需要的镜像,防止初始化的时候超时错误。
sudo kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
  1. 执行初始化指令
sudo kubeadm init \--apiserver-advertise-address=10.15.0.132 \--control-plane-endpoint=10.15.0.132 \--image-repository=registry.aliyuncs.com/google_containers \--pod-network-cidr=10.244.0.0/16 \--kubernetes-version=v1.30.0
  • apiserver-advertise-address:Master 节点的 IP 地址。
  • control-plane-endpoint:Master 节点的 IP 地址。
  • image-repository:指定镜像的地址。
  • pod-network-cider:强烈建议使用 Kubernetes 社区更常用的网段,如 10.244.0.0/16(Flannel 默认) 或 10.192.0.0/12(Calico 常用),并确保其与你的物理网络、Service CIDR (10.96.0.0/12) 都不重叠。
  • kubernetes-version:明确指定 Kubernetes 版本,避免歧义。
  1. 如果初始化错误,则需要重装。重装前需要删除之前安装的资源,执行下面的命令。
sudo kubeadm reset -f
sudo rm -rf /etc/kubernetes/manifests/*
sudo systemctl restart kubelet

成功执行此命令后,我们将得到如下所示的输出。

image-20250916004146880

在上面的输出中,我们将获得一系列命令。例如:如何与 kubernetes 群集互动,如何添加 worker 节点到此群集。

在 master 节点上运行以下命令。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

接下来,从输出中复制命令以连接 woker 节点,在两个 woker 节点上运行它。比如:

kubeadm join 10.15.0.132:6443 --token 11z2ot.9040p3ygy872219i \--discovery-token-ca-cert-hash sha256:8ea22dfe79f85ddbdcec81a139262142da206ea08e360f78aaa712ddb8afb35f

第一个 worker 节点的输出:

image-20250916004319913

第二个 worker 节点的输出:

image-20250916004346038

回到 master 节点,运行 kubectl get nodes 命令来验证 worker 节点的状态。

kubectl get nodes

image-20250916004404808

  • 输出确认 worker 节点已加入集群,但状态为 NotReady。我们需要在这个集群上安装 Network Add-on Plugin,例如:Flannel CNI
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

注意:让 Flannel 的网络配置 与 kubeadm init 指定的 pod-network-cidr 保持一致。因为 Flannel 默认的网段是 10.244.0.0/16,和我们初始化配置时一样,所以不需要更改。

检查状态:

kubectl -n kube-flannel get pods

image-20250916004721140

  • 目前网络插件的容器都处于初始化状态。

等待几分钟,等到容器都创建并运行后,我们执行下面命令:

kubectl get pod -A

image-20250916005022290

  • 我们可以看到所有的容器都正常运行。K8s 集群就搭建完成了。
http://www.wxhsa.cn/company.asp?id=5180

相关文章:

  • Jmeter的插件开发
  • Educational Codeforces Round 182 (Rated for Div. 2)
  • java第二周课前提问
  • java GC
  • Redis最佳实践——性能优化技巧之监控与告警详解
  • week1
  • EF Core 与 MySQL:迁移和关系配置详解
  • 《原子习惯》-读书笔记2
  • CF1626D 题解
  • Python 集合运算:并集、交集、差集全解析
  • 第一周数据可视化作业
  • 用 C++ + OpenCV + Tesseract 实现英文数字验证码识别
  • java 第一节课课前提问
  • 二进制解码器、选通器和分配器
  • 2025最新版 Photoshop软件免费下载安装完整教程(PS2025)超详细安装教程
  • nac一键卸载软件脚本
  • 交叉编译openharmony版本的openssh
  • 为什么不建议在 Docker 中跑 MySQL
  • CFD
  • [MCP][05]Elicitation示例
  • Warsaw主题关闭导航条
  • Python Socket网络编程(2)
  • PS2025安装包下载及PS2025安装包安装教程详细步骤(包含安装包下载链接)
  • Nature Genetics | 本周最新文献速递
  • 关于go里切片作为函数参数时是引用传递还是值传递
  • DRAN读写循环
  • 数据结构操作相关
  • Neisbitt 不等式的证法
  • 端口转发神器Rinetd:轻量级安装与配置指南
  • C语言中递归思想的应用