小白搭建K8S集群0基础教程实战

小白搭建K8S集群0基础教程


📌 第一步:准备工作(所有节点都要做)

在开始之前,你需要准备至少两台 Linux 服务器(可以是云服务器、虚拟机或物理机)。本教程以目前企业最主流的 Ubuntu 22.04 为例。

机器规划示例:

  • Master 节点:控制集群的大脑(建议 2核4G 及以上)。
  • Worker 节点:干活的小兵,运行容器的地方(建议 2核4G 及以上)。
1. 设置主机名(方便区分)
bash 复制代码
# 在主节点上执行
sudo hostnamectl set-hostname k8s-master

# 在工作节点上执行
sudo hostnamectl set-hostname k8s-node1
2. 关闭防火墙和 Swap 分区

K8S 为了性能考虑,强制要求关闭 Swap(虚拟内存)。

bash 复制代码
# 关闭防火墙
sudo ufw disable
sudo ufw status

# 临时关闭 Swap
sudo swapoff -a

# 永久关闭 Swap(注释掉带有 swap 的那一行)
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
3. 设置内核参数

让 iptables 看到桥接流量,这是 K8S 网络通信的必备条件。

bash 复制代码
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

cat <<EOF | sudo 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

# 应用配置
sudo sysctl --system

📌 第二步:安装容器运行时(所有节点都要做)

K8S 需要一个"干活"的底层工具来运行容器,这里我们选择最主流的 containerd

bash 复制代码
# 1. 安装基础工具
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release

# 2. 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 3. 设置仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. 安装 containerd
sudo apt-get update
sudo apt-get install -y containerd.io

# 5. 生成默认配置文件并修改
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# 6. 关键一步:修改 SystemdCgroup 为 true
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

# 7. 重启服务
sudo systemctl restart containerd
sudo systemctl enable containerd

📌 第三步:安装 K8S 核心组件(所有节点都要做)

现在我们来安装 kubeadm(搭建工具)、kubelet(节点代理)和 kubectl(命令行工具)。

bash 复制代码
# 1. 下载阿里云镜像源的 GPG 密钥(国内网络环境强烈推荐)
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg

# 2. 添加阿里云 K8S 镜像源
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 3. 安装指定版本的 K8S 组件(以 1.28.0 为例,版本太新可能会有兼容性问题)
sudo apt-get update
sudo apt-get install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00
sudo apt-mark hold kubelet kubeadm kubectl

# 4. 启动 kubelet 并设置开机自启
sudo systemctl enable kubelet

📌 第四步:初始化 Master 主节点(仅在 Master 上操作)

万事俱备,现在我们来拉起集群的"大脑"。

bash 复制代码
# 1. 初始化集群
# --apiserver-advertise-address 填你的 Master 节点内网 IP
# --pod-network-cidr 是 Pod 的网络范围,后面装网络插件要用到
sudo kubeadm init \
  --apiserver-advertise-address=192.168.1.100 \ # ⚠️记得替换成你的 Master IP
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.0 \
  --pod-network-cidr=10.244.0.0/16

💡 初始化成功后,终端会输出一大段内容,一定要仔细看!

你需要执行它提示的三条命令来配置 kubectl 权限,并且务必把最后那句 kubeadm join ... 复制保存下来,这是后续 Worker 节点加入集群的"通行证"。

bash 复制代码
# 2. 配置 kubectl 命令补全(不然敲命令很累)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 3. 让 kubectl 命令支持 Tab 键补全
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

📌 第五步:安装网络插件(仅在 Master 上操作)

刚搭好的集群此时还是个"裸机",Pod 之间无法互相通信。我们需要安装一个 CNI(容器网络接口)插件。这里推荐使用轻量级的 Flannel

bash 复制代码
# 下载 Flannel 的 YAML 配置文件
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# 稍微修改一下,让它和上面设置的 pod-network-cidr 对应
# 确认 kube-flannel.yml 中的 net-conf.json 里的 Network 字段是 10.244.0.0/16

# 应用配置,安装 Flannel
kubectl apply -f kube-flannel.yml

等待几十秒后,检查所有 Pod 是否处于 Running 状态:

bash 复制代码
kubectl get pods -n kube-system

📌 第六步:加入 Worker 工作节点(仅在 Worker 上操作)

还记得在 Master 初始化完成时保存的那句 kubeadm join ... 吗?把它粘贴到你的 Worker 节点终端执行即可!

bash 复制代码
# 示例(你的 token 和 hash 会和这个不一样,用你自己保存的那个)
sudo kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \
	--discovery-token-ca-cert-hash sha256:1234567890abcdef...

⚠️ 如果忘记保存怎么办?

别慌,回到 Master 节点,执行以下命令重新生成一条:

bash 复制代码
kubeadm token create --print-join-command

🎉 第七步:大功告成,验证集群!

回到 Master 节点,敲下这行魔法指令:

bash 复制代码
kubectl get nodes

如果看到类似下面的输出,恭喜你,一个崭新的 K8S 集群已经完美运行在你的机器上了!

text 复制代码
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   10m   v1.28.0
k8s-node1    Ready    <none>          2m    v1.28.0

💡 常见报错

  1. kubeadm init 一直卡住或报错 :90% 是因为网络不通或者 /etc/containerd/config.toml 里的 SystemdCgroup 没有设为 true。改完后记得 sudo systemctl restart containerd
  2. Node 节点状态为 NotReady :通常是网络插件(Flannel/Calico)没装好,或者它的 Pod 还在拉取镜像中,耐心等待几分钟,或者用 kubectl describe node 查看具体报错。
  3. 想重置集群重来? :在任何节点执行 sudo kubeadm reset 即可清空状态,然后重新初始化。

相关推荐
xingfujie2 小时前
Ubuntu K8s 1.28 kubeadm 高可用集群部署实战
linux·运维·服务器·docker·kubernetes
AI视觉网奇2 小时前
docker vllm 开机启动
docker·容器·vllm
9命怪猫2 小时前
[K8S小白问题集] - K8S为什么选择etcd而不是别的key-value DB?比如Redis
云原生·容器·kubernetes
px不是xp2 小时前
Docker部署Qdrant向量数据库,初始化向量数据库,重构RAG逻辑
数据库·docker·微信小程序·重构·qdrant
小夏子_riotous3 小时前
Kubernetes学习路径——3. Kubernetes 1.25 高可用集群部署实战:从 Docker 到 Calico 全链路详解
linux·运维·学习·docker·容器·kubernetes·centos
bukeyiwanshui3 小时前
20260512 docker笔记
linux·运维·笔记·docker·容器
东北甜妹3 小时前
k8s特殊容器 和 调度管理
云原生·容器·kubernetes
AOwhisky4 小时前
Docker 学习笔记:网络篇
linux·运维·网络·笔记·学习·docker·容器
眷蓝天4 小时前
Kubernetes 特殊容器技术详解
云原生·容器·kubernetes