前言

在云原生时代,Kubernetes 已成为容器编排的事实标准。本文将基于天亿互联的云服务器,手把手教你搭建一个高可用的 Kubernetes 集群,并实现基于 CPU 利用率的自动伸缩(HPA)。本文适合有一定 Linux 基础的运维或开发人员。

一、环境准备

在天亿互联控制台创建三台云服务器,推荐配置:2核4G,操作系统 CentOS 7.9,内网互通。分别作为 Master 和 Worker 节点。

节点角色    主机名       IP 地址(示例)
Master      master01    192.168.1.10
Worker      worker01    192.168.1.11
Worker      worker02    192.168.1.12

所有节点执行以下初始化操作:

  1. 关闭防火墙和 SELinux:systemctl stop firewalld && systemctl disable firewalld && setenforce 0
  2. 禁用 swap:swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
  3. 设置主机名并添加 hosts 解析。
  4. 安装 Docker 和 kubeadm/kubelet/kubectl(版本 1.28.0)。

二、使用 kubeadm 搭建集群

步骤1:初始化 Master 节点

在 master01 上执行:

kubeadm init --apiserver-advertise-address=192.168.1.10 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

初始化成功后,会输出一条 kubeadm join 命令,请保存。然后配置 kubectl:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

步骤2:安装网络插件(Flannel)

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

验证 Pod 状态:kubectl get pods -n kube-flannel

步骤3:加入 Worker 节点

在 worker01 和 worker02 上执行上面保存的 join 命令,例如:

kubeadm join 192.168.1.10:6443 --token xxxxx --discovery-token-ca-cert-hash sha256:xxxxx

在 Master 上验证节点:kubectl get nodes,应看到所有节点 Ready。

三、配置水平自动伸缩(HPA)

步骤1:安装 Metrics Server

HPA 依赖 Metrics Server 收集资源指标。执行:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

修改 deployment 添加 --kubelet-insecure-tls 参数:

kubectl edit deployment metrics-server -n kube-system
# 在 args 中添加:
- --kubelet-insecure-tls

验证:kubectl top nodes 能显示 CPU/内存。

步骤2:部署测试应用

创建一个 Nginx 部署,并设置资源限制:

kubectl create deployment nginx-hpa --image=nginx:latest --replicas=1
kubectl set resources deployment nginx-hpa --requests=cpu=100m,memory=128Mi --limits=cpu=500m,memory=256Mi
kubectl expose deployment nginx-hpa --port=80 --type=NodePort

步骤3:创建 HPA 规则

kubectl autoscale deployment nginx-hpa --cpu-percent=50 --min=1 --max=5

查看 HPA:kubectl get hpa,初始状态应为 ,等待1-2分钟后变为 0%

步骤4:压力测试验证自动伸缩

使用测试工具(如 abhey)模拟高并发:

# 安装 hey
wget -O hey https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
chmod +x ./hey
# 获取 NodePort 端口
kubectl get svc nginx-hpa
# 对 Worker 节点 IP 的 NodePort 发起请求
./hey -n 100000 -c 100 http://192.168.1.11:30356/

另一个终端观察 HPA 变化:

kubectl get hpa -w
# 输出示例:
# nginx-hpa   Deployment   50%/50%   1    5    2
# nginx-hpa   Deployment   85%/50%   1    5    4

当 CPU 超过 50% 后,Pod 数量会自动增加,最大至 5 个。停止压力后,HPA 会逐步缩容至 1 个。

四、总结

通过以上步骤,你已在天亿互联云平台上成功搭建了一个可伸缩的 Kubernetes 集群。生产环境中建议使用高可用 Master 架构,并结合 HPA 与 Cluster Autoscaler 实现节点级别的自动扩缩。如需进一步优化,可配置自定义指标(如 QPS)或使用 Prometheus Adapter 实现更复杂的伸缩策略。