1. Kubernetes v1.28.2 + containerd 集群部署手册
最近在VMware环境下搭建了一个三节点的Kubernetes集群,使用的是最新的v1.28.2版本,并采用containerd作为容器运行时。整个过程踩了不少坑,也积累了一些经验,在这里做个完整记录,希望能帮助到有同样需求的同学。
1.1 环境准备
1.1.1 硬件配置
我使用的是三台CentOS 7.9虚拟机,配置如下:
- Master节点:4核CPU,8GB内存,50GB磁盘
- Worker节点:各2核CPU,4GB内存,50GB磁盘
注意:生产环境建议Worker节点配置更高,这里只是测试环境
1.1.2 网络规划
集群节点IP分配:
- Master: 192.168.204.130
- Worker-1: 192.168.204.131
- Worker-2: 192.168.204.132
1.2 基础环境配置
1.2.1 设置静态IP
首先需要为每个节点设置静态IP,避免重启后IP变化导致集群故障:
bash复制# 查看当前网络连接名称
nmcli con show
# 设置静态IP(以Master节点为例)
INTERFACE="System eth0"
sudo nmcli con mod "$INTERFACE" \
ipv4.addresses 192.168.204.130/24 \
ipv4.gateway 192.168.204.2 \
ipv4.dns "8.8.8.8,114.114.114.114" \
ipv4.method manual
# 重启网络
sudo nmcli con down "$INTERFACE" && sudo nmcli con up "$INTERFACE"
1.2.2 关闭防火墙和SELinux
bash复制# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 禁用SELinux
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
生产环境建议保留防火墙,只开放必要端口
1.2.3 关闭Swap
Kubernetes要求必须关闭Swap:
bash复制sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
1.3 安装containerd
1.3.1 下载并安装
bash复制wget https://github.com/containerd/containerd/releases/download/v1.7.2/containerd-1.7.2-linux-amd64.tar.gz
sudo tar Cxzvf /usr/local containerd-1.7.2-linux-amd64.tar.gz
1.3.2 配置containerd
生成默认配置并修改:
bash复制sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
修改关键配置:
- 设置SystemdCgroup = true
- 修改sandbox_image为国内镜像源
1.3.3 启动containerd
bash复制sudo wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -P /usr/local/lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now containerd
1.4 安装Kubernetes组件
1.4.1 配置yum源
bash复制cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
1.4.2 安装kubeadm、kubelet和kubectl
bash复制sudo yum install -y kubeadm kubelet kubectl
sudo systemctl enable kubelet
1.5 初始化Master节点
bash复制sudo kubeadm init \
--apiserver-advertise-address=192.168.204.130 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.28.2 \
--pod-network-cidr=10.244.0.0/16
初始化成功后,记下join命令用于Worker节点加入集群。
1.6 配置kubectl
bash复制mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
1.7 安装网络插件
这里选择Flannel:
bash复制kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
1.8 Worker节点加入集群
在每个Worker节点执行Master初始化时输出的join命令:
bash复制sudo kubeadm join 192.168.204.130:6443 --token xxxx --discovery-token-ca-cert-hash sha256:xxxx
1.9 验证集群状态
bash复制kubectl get nodes
应该能看到所有节点状态为Ready。
2. 部署应用示例
2.1 部署Nginx
创建nginx-deploy.yaml:
yaml复制apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25.5
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30081
selector:
app: nginx
部署并验证:
bash复制kubectl apply -f nginx-deploy.yaml
curl http://192.168.204.130:30081
2.2 部署Spring Boot应用
以review.jar为例:
- 编写Dockerfile构建镜像
- 推送到镜像仓库
- 创建Kubernetes部署文件
- 部署并验证
3. 常见问题解决
3.1 镜像拉取失败
解决方法:
- 使用国内镜像源
- 提前在可联网环境拉取并推送到私有仓库
3.2 节点NotReady
可能原因:
- 网络插件未正确安装
- kubelet服务未正常运行
3.3 Pod一直处于Pending状态
检查:
- 资源是否充足
- 节点是否有污点(Taint)
- 调度器日志
4. 运维技巧
4.1 常用命令
bash复制# 查看Pod详情
kubectl describe pod <pod-name>
# 查看日志
kubectl logs -f <pod-name>
# 进入容器
kubectl exec -it <pod-name> -- /bin/sh
# 扩缩容
kubectl scale deploy nginx --replicas=3
4.2 资源监控
建议安装Metrics Server:
bash复制kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
4.3 可视化工具
推荐使用Lens或Kubernetes Dashboard。
5. 总结
通过这次部署,我总结了几个关键点:
- 网络配置要提前规划好
- 使用国内镜像源可以大大加快部署速度
- 每个组件的版本要匹配
- 日志和监控要尽早配置
希望这份手册能帮助你顺利部署Kubernetes集群。如果遇到问题,欢迎留言讨论。