什么是Kubernetes?
Kubernetes(常称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。
简单理解:如果你用 Docker 把应用打包成容器,那么 Kubernetes 就是负责把这些容器安排在服务器集群上运行,并保证它们一直正常工作。
为什么需要 Kubernetes?
部署复杂:容器该放在哪台机器?资源够不够?——K8s 自动调度,实现负载均衡。
故障恢复:容器挂了谁能自动重启?——K8s 的自我修复能力。
流量分发:如何让外部用户访问容器?——K8s 提供 Service 和 Ingress。
弹性伸缩:晚上访问量大,能否自动增加容器?——K8s 的 Horizontal Pod Autoscaler。
滚动更新:升级应用时如何不停机?——K8s 的滚动更新和回滚。
核心概念:
| 概念 | 解释 |
| pod | K8s 里最小的部署单元,一个 Pod 里可以放一个或多个容器(通常一个)。它们共享网络和存储,像“同一个屋檐下的室友”。 |
| Deployment | 管理 Pod 的控制器。你告诉它“我要运行 3 个 Nginx 副本”,它会保证始终有 3 个在跑,并支持滚动更新、回滚。 |
| Service | 给一组 Pod 提供一个固定 IP 和 DNS 名称,做负载均衡。因为 Pod 的 IP 是动态变化的,Service 解决了“怎么找到 Pod”的问题。 |
| Namespace | 虚拟集群,用来隔离不同环境(如 dev、test、prod)或不同团队的资源。 |
| ConfigMap / Secret | 用来存储配置信息(非敏感)和敏感信息(密码、Token),把它们和容器镜像解耦。 |
Node(节点,即一台服务器)、kubelet(节点上的代理)、etcd(存储集群状态的数据库)。
Kubernetes 的优势:
高可用:应用不会因为单点故障而整体不可用。
弹性资源利用率:用多少资源开多少容器,节省成本。
云中立:可以跑在任何公有云、私有云、甚至裸机上,避免被特定云厂商绑定。
生态强大:几乎所有的云原生工具(Prometheus、Istio、Helm、ArgoCD 等)都围绕 K8s 构建。
准备工作:
1. 环境规划:三台服务器信息如下(因为是香港VPS服务器,公网和内网IP一致,是因为服务器没有独立的私有网络(VPC),直接分配的是公网IP。):
| 角色 | 主机名 | 内网IP(示例) | 公网IP(示例) |
|---|---|---|---|
| master | k8s-master | 162.211.180.112 | 162.211.180.112 |
| worker1 | k8s-node1 | 103.117.122.76 | 103.117.122.76 |
| worker2 | k8s-node2 | 103.117.122.88 | 103.117.122.88 |
要求:
操作系统:Ubuntu 24.04.1-x64(推荐,其他版本也可)
CPU:至少2核
内存:至少2GB(实际master需要2GB+,worker可2GB,我操作环境都是4核4G)
内网互通(同一VPC或内网IP可达)
建议使用内网IP。
注意:没有特殊说明的就是要在三台服务器都执行
2. 更新系统并安装基础软件(需要在三台服务器都执行)
apt update && apt upgrade -y
apt install -y apt-transport-https ca-certificates curl gnupg lsb-release software-properties-common
3. 配置 /etc/hosts(如果网络环境不支持内部DNS)云网络环境没有设置内部DNS,需要在每台机器上明确指明各个节点的对应关系,将内网IP与主机名绑定。比如三台内网IP是 162.211.180.112,103.117.122.76,103.117.122.88。在每台服务器上都要执行:
# 编辑hosts文件
vi /etc/hosts
# 在文件末尾添加以下三行,确保IP地址和主机名与你的实际设置一致
162.211.180.112 k8s-master
103.117.122.76 k8s-node1
103.117.122.88 k8s-node2
4. 禁用 swap(kubelet 强制要求)
Kubernetes 要求禁用交换分区,以保证内存管理的稳定性。
swapoff -a
# 永久关闭,注释掉 /etc/fstab 中与 swap 相关的行
sed -i '/ swap / s/^/#/' /etc/fstab
加载所需内核模块
Kubernetes 的网络和存储功能依赖几个特定的内核模块,确保它们被加载
# 加载 overlay 和 br_netfilter 模块
modprobe overlay
modprobe br_netfilter
# 创建配置文件以确保每次开机都自动加载
cat <<EOF | tee /etc/modules-load.d/k8s.confoverlay
br_netfilter
EOF
配置内核参数(允许IP转发、桥接流量)
# 创建一个新的 sysctl 配置文件
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
# 立即应用配置文件中的参数
sysctl --system
安装容器运行时 (Containerd)
Kubernetes 需要容器运行时来运行 Pod。
添加 Docker 的官方 GPG 密钥和仓库
containerd.io 包在 Docker 的仓库里,所以要添加它
# 更新软件包列表并安装必要的依赖
apt update && apt install -y curl ca-certificates
# 创建存放密钥的目录
install -m 0755 -d /etc/apt/keyrings
# 下载并添加 Docker 的 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
# 添加 Docker 官方仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 再次更新软件包列表,使新仓库生效
apt update

安装 containerd 并配置
containerd 需要一些特殊配置才能更好地与 Kubernetes 协同工作,其中最重要的是启用 SystemdCgroup# 安装 containerd.io
apt install -y containerd.io
# 生成 containerd 的默认配置文件
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
# 修改配置:启用 SystemdCgroup(用 sed 命令直接替换)
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 重启 containerd 使配置生效
systemctl restart containerd
systemctl enable containerd
国内服务器特别配置:镜像加速器
如果使用的是国内服务器,直接拉取 k8s.gcr.io 等仓库的镜像会非常慢甚至失败。可以在 containerd 的配置中添加国内的镜像加速器来解决这个问题
# 在 /etc/containerd/config.toml 中找到 [plugins."io.containerd.grpc.v1.cri".registry.mirrors] 这一部分,添加镜像站配置
# 你可以使用阿里云、腾讯云等提供的镜像加速地址。以下是一个示例:
# 请注意:你需要将 https://mirror.ccs.tencentyun.com 替换成你自己的加速器地址
# 如果你是阿里云用户,可以在容器镜像服务控制台获取专属加速地址
# 编辑 containerd 配置文件
vi /etc/containerd/config.toml
# 找到 [plugins."io.containerd.grpc.v1.cri".registry.mirrors] 部分,在下面添加以下内容:
# [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
# endpoint = ["https://mirror.ccs.tencentyun.com"]
# [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
# endpoint = ["https://mirror.ccs.tencentyun.com"]
# [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
# endpoint = ["https://mirror.ccs.tencentyun.com"]
# 修改保存后,需要重启 containerd
systemctl restart containerd
装 kubeadm, kubelet 和 kubectl
现在安装 Kubernetes 的核心管理工具和节点代理
添加 Kubernetes 官方 GPG 密钥和仓库
# 下载并添加 Kubernetes 的 GPG 密钥
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# 添加 Kubernetes 1.34 版本的软件源
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
# 更新软件包列表
apt update
安装指定版本的 kubelet, kubeadm, kubectl
指定版本号 1.34.2-1.1 进行安装,这是目前最新的稳定版。使用 apt-mark hold 可以防止它们被意外更新

# 安装指定版本
apt install -y kubelet=1.34.2-1.1 kubeadm=1.34.2-1.1 kubectl=1.34.2-1.1
# 锁定版本,防止自动更新
apt-mark hold kubelet kubeadm kubectl
启动并检查 kubelet(可选)
现在 kubelet 可能无法运行,因为它还没有加入集群,不过可以先启用它,让它开机自启。
systemctl enable kubelet
至此,每台服务器的“地基”都已打好,它们都拥有了成为 K8s 节点的能力
已经完成了
基础系统配置:设置主机名、配置 hosts 解析、禁用 SWAP。
加载内核模块与参数:确保 overlay 和 br_netfilter 模块加载,并配置了网络转发相关的内核参数。
安装容器运行时(containerd):安装并配置了 containerd,包括启用 SystemdCgroup。
安装 Kubernetes 核心组件:通过官方源安装了最新版(v1.34.2)的 kubeadm、kubelet 和 kubectl。
所有服务器的基础环境都已准备就绪。在下一篇文章(中篇)里,将正式开始搭建集群,执行 kubeadm init 初始化控制平面,并将工作节点加入集群。
以使用以下命令检查各服务的状态
systemctl status containerd
systemctl status kubelet

如果它们显示为 active (running) 或类似状态,那么恭喜你,已经成功迈出了第一步。
kubelet 是 Kubernetes 的节点代理,它需要被 kubeadm 告知加入哪个集群才会真正启动并工作。在还没有执行 kubeadm init 或 kubeadm join 之前,它处于待命状态是预期行为。当初始化成功后,kubelet 会自动被启动并注册到集群中。之后再用 systemctl status kubelet 就能看到它变成 active (running) 了
本文最后更新时间 2026-06-01
文章链接地址:https://yrajsh.cn/index.php/archives/84/
本站文章除注明[转载|引用|原文]出处外,均为本站原生内容,转载前请注明出处