1. 首页 > Linux教程 > 正文

Linux教程FG476-Kubernetes自动化运维

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

风哥提示:

本文档介绍Kubernetes自动化运维实战案例。

Part01-自动化运维脚本

1.1 集群健康检查脚本

# 创建健康检查脚本
[root@k8s-master ~]# cat > /usr/local/bin/k8s-health-check.sh << 'EOF' #!/bin/bash # k8s-health-check.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn echo "========================================" echo "Kubernetes集群健康检查报告" echo "生成时间: $(date)" echo "========================================" echo "" echo "1. 节点状态检查" echo "----------------------------------------" kubectl get nodes -o wide echo "" echo "2. 系统Pod状态检查" echo "----------------------------------------" kubectl get pods -n kube-system echo "" echo "3. 组件健康状态" echo "----------------------------------------" kubectl get cs echo "" echo "4. 资源使用情况" echo "----------------------------------------" kubectl top nodes 2>/dev/null || echo “Metrics Server未安装”

echo “”
echo “5. 异常Pod检查”
echo “—————————————-”
kubectl get pods -A –field-selector=status.phase!=Running,status.phase!=Succeeded | grep -v NAME || echo “无异常Pod”

echo “”
echo “6. 事件检查(最近10条)”
echo “—————————————-”
kubectl get events -A –sort-by=’.lastTimestamp’ | tail -10

echo “”
echo “7. 存储检查”
echo “—————————————-”
kubectl get pv
kubectl get pvc -A

echo “”
echo “8. 网络策略检查”
echo “—————————————-”
kubectl get networkpolicy -A

echo “”
echo “========================================”
echo “健康检查完成”
echo “========================================”
EOF

[root@k8s-master ~]# chmod +x /usr/local/bin/k8s-health-check.sh

# 执行健康检查
[root@k8s-master ~]# /usr/local/bin/k8s-health-check.sh
========================================
Kubernetes集群健康检查报告
生成时间: Sat Apr 4 23:00:00 CST 2026
========================================

1. 节点状态检查
—————————————-
NAME STATUS ROLES AGE VERSION INTERNAL-IP
k8s-master Ready control-plane 100d v1.28.3 192.168.1.100
k8s-node1 Ready 100d v1.28.3 192.168.1.101
k8s-node2 Ready 100d v1.28.3 192.168.1.102

2. 系统Pod状态检查
—————————————-
NAME READY STATUS RESTARTS AGE
coredns-abc12-xyz789 1/1 Running 0 10d
etcd-k8s-master 1/1 Running 0 10d
kube-apiserver-k8s-master 1/1 Running 0 10d
kube-controller-manager-k8s-master 1/1 Running 0 10d
kube-proxy-abc12 1/1 Running 0 10d
kube-scheduler-k8s-master 1/1 Running 0 10d

3. 组件健康状态
—————————————-
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {“health”:”true”,”reason”:””}

Part02-自动扩缩容

2.1 HPA配置

# 部署示例应用
[root@k8s-master ~]# cat > fgedu-hpa-app.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: fgedu-hpa-app namespace: fgedu-prod spec: replicas: 2 selector: matchLabels: app: fgedu-hpa template: metadata: labels: app: fgedu-hpa spec: containers: - name: app image: nginx:1.25 ports: - containerPort: 80 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 500m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: fgedu-hpa-svc namespace: fgedu-prod spec: ports: - port: 80 selector: app: fgedu-hpa EOF [root@k8s-master ~]# kubectl apply -f fgedu-hpa-app.yaml deployment.apps/fgedu-hpa-app created service/fgedu-hpa-svc created # 创建HPA [root@k8s-master ~]# cat > fgedu-hpa.yaml << 'EOF' apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: fgedu-hpa namespace: fgedu-prod spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: fgedu-hpa-app minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 80 behavior: scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 10 periodSeconds: 60 scaleUp: stabilizationWindowSeconds: 60 policies: - type: Percent value: 100 periodSeconds: 15 - type: Pods value: 4 periodSeconds: 15 selectPolicy: Max EOF [root@k8s-master ~]# kubectl apply -f fgedu-hpa.yaml horizontalpodautoscaler.autoscaling/fgedu-hpa created # 查看HPA状态 [root@k8s-master ~]# kubectl get hpa -n fgedu-prod NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE fgedu-hpa Deployment/fgedu-hpa-app 5%/70%, 10%/80% 2 10 2 1m # 创建VPA [root@k8s-mas更多学习教程公众号风哥教程itpux_comter ~]# cat > fgedu-vpa.yaml << 'EOF' apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: fgedu-vpa namespace: fgedu-prod spec: targetRef: apiVersion: apps/v1 kind: Deployment name: fgedu-hpa-app updatePolicy: updateMode: Auto resourcePolicy: containerPolicies: - containerName: app minAllowed: cpu: 50m memory: 64Mi maxAllowed: cpu: 1000m memory: 1Gi controlledResources: ["cpu", "memory"] EOF [root@k8s-master ~]# kubectl apply -f fgedu-vpa.yaml verticalpodautoscaler.autoscaling.k8s.io/fgedu-vpa created

Part03-定时任务

3.1 CronJob配置

# 创建数据库备份CronJob
[root@k8s-master ~]# cat > fgedu-backup-cronjob.yaml << 'EOF' apiVersion: batch/v1 kind: CronJob metadata: name: fgedu-db-backup namespace: fgedu-prod spec: schedule: "0 2 * * *" concurrencyPolicy: Forbid successfulJobsHistoryLimit: 7 failedJobsHistoryLimit: 3 jobTemplate: spec: template: spec: containers: - name: backup image: mysql:8.0 command: - /bin/sh - -c - | mysqldump -h fgedu-mysql -u root -p${MYSQL_ROOT_PASSWORD} --all-databases > /backup/fgedu-$(date +%Y%m%d).sql
gzip /backup/fgedu-$(date +%Y%m%d).sql
find /backup -name “*.sql.gz” -mtime +7 -delete
env:
– name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: fgedu-mysql-secret
key: root-password
volumeMounts:
– name: backup
mountPath: /backup
volumes:
– name: backup
persistentVolumeClaim:
claimName: fgedu-backup-pvc
restartPolicy: OnFailure
EOF

[root@k8s-master ~]# kubectl apply -f fgedu-backup-cronjob.yaml
cronjob.batch/fgedu-db-backup created

# 创建日志清理CronJob
[root@k8s-master ~]# cat > fgedu-log-clean-cronjob.yaml << 'EOF' apiVersion: batch/v1 kind: CronJob metadata: name: fgedu-log-clean namespace: fgedu-prod spec: schedule: "0 3 * * *" jobTemplate: spec: template: spec: containers: - name: cleaner image: busybox command: - /bin/sh - -c - find /logs -name "*.log" -mtime +30 -delete volumeMounts: - name: logs mountPath: /logs volumes: - name: logs persistentVolumeClaim: claimName: fgedu-logs-pvc restartPolicy: OnFailure EOF [root@k8s-master ~]# kubectl apply -f fgedu-log-clean-cronjob.yaml cronjob.batch/fgedu-log-clean created # 查看CronJob状态 [root@k8s-master ~]# kubectl get cronjob -n fgedu-prod NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE fgedu-db-backup 0 2 * * * False 0 1m
fgedu-log-clean 0 3 * * * False 0 30s

Part04-运维自动化工具

4.1 运维工具集成

# 创建运维工具箱
[root@k8s-master ~]# cat > fgedu-toolbox.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: fgedu-toolbox namespace: fgedu-prod spec: replicas: 1 selector: matchLabels: app: fgedu-toolbox template: metadata: labels: app: fgedu-toolbox spec: containers: - name: toolbox image: alpine:latest command: ["/bin/sh", "-c", "sleep infinity"] resources: requests: cpu: 50m memory: 64Mi limits: cpu: 200m memory: 256Mi EOF [root@k8s-master ~]# kubectl apply -f fgedu-toolbox.yaml deployment.apps/fgedu-toolbox created # 创建运维脚本 [root@k8s-master ~]# cat > /usr/local/bin/k8s-ops.sh << 'EOF' #!/bin/bash # k8s-ops.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn case "$1" in status) kubectl get pods -A -o wide | grep -v Running | grep -v Completed | grep -v NAME ;; logs) kubectl logs -n $2 $3 --tail=100 ;; restart) kubectl rollout restart deployment/$2 -n $3 ;; scale) kubectl scale deployment/$2 --replicas=$3 -n $4 ;; exec) kubectl exec -it $2 -n $3 -- /bin/sh ;; port-forward) kubectl port-forward $2 $3:$4 -n $5 ;; *) echo "Usage: $0 {status|logs|restart|scale|exec|port-forward}" echo " status - 显示异常Pod" echo " logs ns pod - 查看Pod日志" echo " restart deploy ns - 重启Deployment" echo " scale deploy num ns - 扩缩容Deployment" echo " exec pod ns - 进入Pod" echo " port-forward pod local remote ns - 端口转发" ;; esac EOF [root@k8s-master ~]# chmod +x /usr/local/bin/k8s-ops.sh # 使用运维工具 [root@k8s-master ~]# k8s-ops.sh status No resources found. [root@k8s-master ~]# k8s-ops.sh restart fgedu-app fgedu-prod deployment.apps/fgedu-app restarted [root@k8s-master ~]# k8s-ops.sh scale fgedu-app 5 fgedu-prod deployment.apps/fgedu-app scaled
风哥针对自动化运维建议:

  • 编写标准化运维脚本
  • 配置HPA实现自动扩缩容
  • 使用CronJob执行定时任务
  • 建立运维工具箱
  • 定期执行健康检查

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息