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 端口。

相关推荐
Ribou1 小时前
LDAP安装docker版
运维·docker·容器
一只栖枝2 小时前
K8s 认证级别怎么选?适配不同运维场景
云原生·容器·kubernetes·k8s·cka
gOODiDEA2 小时前
Kubernetes集群的搭建与DevOps实践(上)- 架构设计篇
云原生·kubernetes·devops·架构设计·技术选型
Yeliang Wu2 小时前
k8s上部署open-webUI
云原生·容器·kubernetes·openwebui
NetInside_2 小时前
基于 Gartner 2025 报告:数字体验监测(DEM)核心价值与企业落地指南
运维·云原生
哲Zheᗜe༘2 小时前
K8S-Ingress资源对象
云原生·容器·kubernetes
Yeliang Wu3 小时前
算力自由:用K8s和Ollama打造你的专属AI基础设施
人工智能·容器·kubernetes
天草二十六_简村人5 小时前
jenkins打包制作Python镜像,并推送至docker仓库,部署到k8s
后端·python·docker·容器·kubernetes·jenkins