K8S部署

这里写自定义目录标题

1、硬件及系统(2台,一主一从)

OS:Alibaba Cloud Linux 3.2104 LTS 64位

CPU & 内存:2 核(vCPU)8 GiB

ESSD Entry 云盘:40 GiB

搭建过程:

主内网地址:192.168.0.87

从内网地址:192.168.0.86

bash 复制代码
sudo hostnamectl set-hostname <your-hostname> # 例如 k8s-master, k8s-node-01
# 修改后重新连接SSH使终端提示符生效

第一阶段:系统准备与基础配置 (所有节点执行)

关闭 Swap 和防火墙

复制代码
```bash
# 临时关闭 swap
sudo swapoff -a
# 永久关闭:编辑 /etc/fstab,注释掉包含 swap 的行
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 关闭防火墙(仅用于测试环境)
sudo systemctl stop firewalld && sudo systemctl disable firewalld
# 关闭 SELinux(临时)
sudo setenforce 0
# 永久关闭:修改 /etc/selinux/config 中 SELINUX=disabled


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

配置 hosts 文件 (/etc/hosts)

IP 地址换成自己实际的,内容必须一致:

192.168.0.87 master01
192.168.0.86 slave01

验证:ping master01 和 ping slave01 应解析到正确的内网IP。
配置完成之后 可以在从节点ping  master01,是通的
主节点 Ping slave01 也是互通的


安装容器运行时 (containerd)

关键陷阱:CentOS  默认源无此包。

解决方案:添加阿里云 Docker 仓库安装。

```bash
# 添加阿里云仓库
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 containerd.io
sudo yum install -y containerd.io
# 生成配置并启用systemd cgroup驱动(必须)
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 启动并设置开机自启
sudo systemctl enable --now containerd

第二阶段:在主节点初始化控制平面

此阶段将 master01 初始化为集群的控制平面。

配置 containerd

核心步骤:修改配置文件 /etc/containerd/config.toml。

bash 复制代码
# 生成默认配置
sudo containerd config default | sudo tee /etc/containerd/config.toml
# 启用 systemd cgroup 驱动
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 修改 pause 镜像源为阿里云
sudo sed -i 's|sandbox_image = ".*"|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|' /etc/containerd/config.toml
# 重启使配置生效
sudo systemctl restart containerd

关键陷阱:pause 镜像拉取失败会导致后续所有Pod无法创建。

初始化 Kubernetes 集群

使用 kubeadm 初始化,并指定阿里云镜像仓库。

bash 复制代码
sudo kubeadm init \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.34.0 \
  --pod-network-cidr=10.244.0.0/16 \
  --control-plane-endpoint=master01

关键陷阱:如果失败,需用 sudo kubeadm reset -f 重置,并清理 /etc/kubernetes/ 和 /var/lib/etcd 等目录。

配置

执行 kubeadm init 成功输出末尾提示的命令。

bash 复制代码
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 应看到 master01 状态为 NotReady (因网络插件未装)。

第三阶段:部署网络插件并加入从节点

此阶段让集群具备网络能力,并将 slave01 纳管。

安装 Pod 网络插件 (Flannel)

仅在主节点执行一次,集群会自动在所有节点部署。

bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

等待 kubectl get pods -n kube-system 中 kube-flannel-ds-* Pod 全部 Running。

配置从节点的 containerd

关键陷阱:必须与主节点配置保持一致,否则无法拉取镜像。

关键步骤:登录 slave01,重复执行 [第二阶段第1步] 的全部操作,特别是 sandbox_image 和 SystemdCgroup。

额外步骤(必须):配置镜像加速器。

bash 复制代码
# 在 /etc/containerd/config.toml 的 [plugins."io.containerd.grpc.v1.cri".registry.mirrors] 下添加
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
  endpoint = ["https://<你的阿里云加速器地址>"]

重启 containerd。

从节点加入集群

在主节点获取加入命令:kubeadm token create --print-join-command

在从节点执行上一步获取到的 kubeadm join ... 命令。

关键陷阱:如从节点有旧数据,需先执行 sudo kubeadm reset -f 和 sudo rm -rf /etc/kubernetes/ 清理。

第四阶段:验证集群与部署测试服务

此阶段确认集群完全健康,并验证其功能。

验证集群状态

复制代码
在主节点执行:
bash 复制代码
# 查看节点,应均为 Ready
kubectl get nodes
# 查看所有系统Pod,应全部 Running,且分布在不同节点
kubectl get pods -n kube-system -o wide

部署测试服务并外网访问

复制代码
创建测试 Deployment 和 Service。
bash 复制代码
kubectl create deployment nginx-test --image=nginx:alpine
kubectl expose deployment nginx-test --name=nginx-service --type=NodePort --port=80

获取访问端口和地址。

bash 复制代码
kubectl get service nginx-service
# 输出中 PORT(S) 列如 80:32567/TCP,则端口为 32567

外网访问:在浏览器访问 http://<主节点公网IP>:。

关键陷阱:必须确保云服务器安全组放行了该 NodePort 端口。

相关推荐
雪可问春风16 小时前
docker环境部署
运维·docker·容器
AI攻城狮17 小时前
用 Obsidian CLI + LLM 构建本地 RAG:让你的笔记真正「活」起来
人工智能·云原生·aigc
科技小花18 小时前
AI重塑数据治理:2026年核心方案评估与场景适配
大数据·人工智能·云原生·ai原生
kobe_OKOK_18 小时前
S7 adapter Docker run
运维·docker·容器
阿里云云原生18 小时前
基于 HiClaw 的运维场景多智能体协同实践
云原生
阿里云云原生20 小时前
从 OpenSearch 到阿里云 SLS:极致弹性、更低成本、生态兼容
云原生
yuanlaile20 小时前
从入门到部署|2026年Koa全栈开发实战:覆盖Node.js、数据库、部署与云架构全链路
微服务·云原生·kubernetes·node.js·serverless·nodejs全栈开发
Learn-Python21 小时前
修改docker容器内文件后让其生效
运维·docker·容器
http阿拉丁神猫1 天前
kubernetes知识点汇总37-42
云原生·容器·kubernetes
L1624761 天前
Containerd 完整部署安装与使用指南
容器