天亿互联:Kubernetes容器化部署与弹性伸缩实战教程
一、前言:为什么需要弹性伸缩?
在云原生时代,业务流量波动是常态。天亿互联基于Kubernetes(K8s)的容器编排能力,能实现秒级自动扩展,避免资源浪费或服务过载。本教程将带您从零搭建一个具备弹性伸缩能力的容器化应用。
二、环境准备
确保已安装以下工具:
- Docker 20.10+
- Kubernetes 1.22+(可使用Minikube或云集群)
- kubectl命令行工具
- Metrics Server(用于HPA采集资源指标)
步骤1:安装Metrics Server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml验证:
kubectl get pods -n kube-system | grep metrics-server三、创建示例应用并容器化
我们使用一个基于Node.js的简单Web服务作为示例。
步骤2:编写应用代码
创建 app.js:
const http = require('http');
const os = require('os');
const hostname = os.hostname();
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello from ' + hostname + '\n');
});
server.listen(port, () => {
console.log('Server running at http://localhost:' + port);
});步骤3:编写Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY app.js .
EXPOSE 3000
CMD ["node", "app.js"]步骤4:构建镜像并推送到仓库
docker build -t registry.example.com/myapp:v1 .
docker push registry.example.com/myapp:v1四、部署到Kubernetes
步骤5:创建Deployment
创建 deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: registry.example.com/myapp:v1
ports:
- containerPort: 3000
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"应用配置:
kubectl apply -f deployment.yaml步骤6:暴露服务
创建 service.yaml:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 3000
type: NodePort应用并获取访问端口:
kubectl apply -f service.yaml
kubectl get svc myapp-service五、配置弹性伸缩(HPA)
步骤7:创建HPA策略
创建 hpa.yaml:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50应用HPA:
kubectl apply -f hpa.yaml六、压力测试验证弹性
步骤8:模拟高负载
使用另一个Pod发起请求:
kubectl run -it --rm load-generator --image=busybox /bin/sh
# 在容器内执行:
while true; do wget -q -O- http://myapp-service; done步骤9:观察自动扩展
kubectl get hpa myapp-hpa --watch
kubectl get pods -l app=myapp当CPU使用率超过50%时,Pod数量会自动增加,最高至10个。停止压力后,Pod会逐渐缩减至2个。
七、生产环境优化建议
- 结合自定义指标(如QPS、请求延迟)使用Prometheus Adapter实现更精准扩展。
- 设置PodDisruptionBudget保证高可用。
- 使用Cluster Autoscaler配合节点自动伸缩。
- 天亿互联提供托管Kubernetes服务,内置弹性伸缩与监控,降低运维复杂度。
八、总结
通过本教程,您已掌握Kubernetes容器化部署与HPA弹性伸缩的核心步骤。从应用打包、部署到自动扩展,天亿互联推荐您在生产环境中结合CI/CD流水线,实现全自动化运维。