天亿互联:Kubernetes集群自动化部署与弹性伸缩实战指南

在云原生时代,Kubernetes已成为容器编排的事实标准。天亿互联技术团队基于多年生产环境经验,总结出一套高效、可复用的K8s集群自动化部署与弹性伸缩方案。本文将从零开始,手把手带你完成从集群初始化到HPA(Horizontal Pod Autoscaler)配置的全过程,所有代码均可在Ubuntu 22.04环境下直接运行。

一、环境准备与基础配置

首先准备三台服务器:1台Master节点(2C4G),2台Worker节点(2C4G)。确保所有节点已安装Docker和kubeadm、kubelet、kubectl。以下为Master节点初始化命令:

# 关闭交换分区(必须)
sudo swapoff -a
# 加载内核模块
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置sysctl参数
cat <

二、初始化Kubernetes集群

在Master节点执行初始化命令,指定Pod网络CIDR(这里使用Calico):

sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.1.10
# 输出中会包含加入Worker节点的token,请保存
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 安装Calico网络插件
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26/manifests/calico.yaml

等待所有Master节点Pod变为Running状态后,在Worker节点执行加入命令:

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

三、部署示例应用并配置HPA

创建Deployment和Service,使用一个基于Node.js的简单Web应用,并暴露为ClusterIP服务:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: node-app
        image: k8s.gcr.io/hpa-example:latest
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 200m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 256Mi
---
apiVersion: v1
kind: Service
metadata:
  name: web-app-svc
spec:
  selector:
    app: web-app
  ports:
  - port: 80
    targetPort: 80

应用配置:

kubectl apply -f web-app.yaml

创建HPA,目标CPU使用率设置为50%,Pod数量范围2-10:

kubectl autoscale deployment web-app --cpu-percent=50 --min=2 --max=10
# 或者使用YAML方式
cat <

四、压力测试验证弹性伸缩

使用另一个Pod作为客户端,向Service发送持续请求以模拟高负载:

# 启动临时Pod作为客户端
kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- sh
# 在容器内部执行压力测试
while true; do wget -q -O- http://web-app-svc; done

打开另一个终端窗口,监控Pod数量和HPA状态:

watch -n 2 'kubectl get hpa web-app-hpa && kubectl get pods -l app=web-app'

观察输出,当CPU使用率超过50%时,HPA会自动创建新Pod,直至达到最大副本数10。停止压力测试后,Pod数量会逐步缩减回2个。

五、生产环境最佳实践

天亿互联建议:

  • 资源预留:Master节点至少2C4G,Worker节点根据业务预留10%系统资源。
  • 监控告警:集成Prometheus+Prometheus Operator,实现基于自定义指标的HPA。
  • 安全加固:启用RBAC、Pod安全策略,定期更新kubeadm版本。
  • 持久化存储:使用Rook+Ceph或Longhorn提供分布式存储。

通过本教程,你已经掌握了天亿互联推荐的K8s集群自动化部署与弹性伸缩核心技能。如需更深入的生产级优化方案,欢迎访问天亿互联官网获取更多技术资料。