1. 首页 > Linux教程 > 正文

Linux教程FG480-Kubernetes综合实战案例

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

风哥提示:

本文档介绍Kubernetes综合实战案例部署。

Part01-项目背景

1.1 项目需求

# 项目需求分析
[root@k8s-master ~]# cat > /root/fgedu-project-requirements.txt << 'EOF' FGEDU电商平台项目需求 ==================== 1. 业务需求 - 用户管理服务 - 商品管理服务 - 订单管理服务 - 支付管理服务 2. 技术架构 - 前端: Nginx - API网关: Kong/Nginx - 后端: Java Spring Boot - 数据库: MySQL主从 - 缓存: Redis Cluster - 消息队列: RabbitMQ 3. 非功能需求 - 高可用: 99.9% - 性能: 1000 QPS - 安全: mTLS加密 - 监控: 全链路追踪 4. 部署要求 - 生产环境: 3节点集群 - 灾备环境: 2节点集群 - CI/CD: GitOps EOF

Part02-架构设计

2.1 系统架构

# 创建命名空间
[root@k8s-master ~]# kubectl create namespace fgedu-ecommerce
namespace/fgedu-ecommerce created

# 部署MySQL主从
[root@k8s-master ~]# cat > fgedu-mysql-cluster.yaml << 'EOF' apiVersion: v1 kind: ConfigMap metadata: name: fgedu-mysql-config namespace: fgedu-ecommerce data: master.cnf: | [mysqld] log-bin=mysql-bin server-id=1 binlog-format=ROW gtid-mode=ON enforce-gtid-consistency=ON slave.cnf: | [mysqld] server-id=2 relay-log=relay-bin read-only=ON gtid-mode=ON --- apiVersion: apps/v1 kind: StatefulSet metadata: name: fgedu-mysql namespace: fgedu-ecommerce spec: serviceName: fgedu-mysql replicas: 3 selector: matchLabels: app: fgedu-mysql template: metadata: labels: app: fgedu-mysql spec: containers: - name: mysql image: mysql:8.0 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: fgedu-mysql-secret key: root-password volumeMounts: - name: data mountPath: /var/lib/mysql resources: requests: cpu: 500m memory: 1Gi limits: cpu: 2000m memory: 4Gi volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 50Gi --- apiVersion: v1 kind: Service metadata: name: fgedu-mysql namespace: fgedu-ecommerce spec: ports: - port: 3306 clusterIP: None selector: app: fgedu-mysql EOF [root@k8s-master ~]# kubectl apply -f fgedu-mysql-cluster.yaml configmap/fgedu-mysql-config created statefulset.apps/fgedu-mysql created service/fgedu-mysql created # 部署Redis Cluster [root@k8s-master ~]# cat > fgedu-redis-cluster.yaml << 'EOF' apiVersion: apps/v1 kind: StatefulSet metadata: name: fgedu-redis namespace: fgedu-ecommerce spec: serviceName: fgedu-redis replicas: 6 selector: matchLabels: app: fgedu-redis template: metadata: labels: app: fgedu-redis spec: containers: - name: redis image: redis:7 ports: - containerPort: 6379 - containerPort: 16379 command: - redis-server - --cluster-enabled - "yes" - --cluster-config-file - /data/nodes.conf - --requirepass - "redis123" resources: requests: cpu: 200m memory: 256Mi limits: cpu: 500m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: fgedu-redis namespace: fgedu-ecommerce spec: ports: - port: 6379 name: client - port: 16379 name: gossip clusterIP: None selector: app: fgedu-redis EOF [root@k8s-master ~]# kubectl apply -f fgedu-redis-cluster.yaml statefulset.apps/fgedu-redis created service/fgedu-redis created

Part03-应用部署

3.1 微服务部署

# 部署用户服务
[root@k8s-master ~]# cat > fgedu-user-service.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: fgedu-user-service namespace: fgedu-ecommerce spec: replicas: 3 selector: matchLabels: app: fgedu-user-service template: metadata: labels: app: fgedu-user-service spec: containers: - name: user-service image: 192.168.1.100:30002/fgedu/user-service:1.0.0 ports: - containerPort: 8080 env: - name: SPRING_DATASOURCE_URL value: "jdbc:mysql://fgedu-mysql-0.fgedu-mysql:3306/fgedu_user" - name: SPRING_REDIS_HOST value: "fgedu-redis" resources: requests: cpu: 200m memory: 256Mi limits: cpu: 500m memory: 512Mi livenessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 60 periodSeconds: 10 readinessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 30 periodSeconds: 5 --- apiVersion: v1 kind: Service metadata: name: fgedu-user-service namespace: fgedu-ecommerce spec: ports: - port: 8080 selector: app: fgedu-user-service EOF [root@k8s-master ~]# kubectl apply -f fgedu-user-service.yaml deployment.apps/fgedu-user-service created service/fgedu-user-service created # 部署API网关 [root@k8s-master ~]# cat > fgedu-api-gateway.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: fgedu-api-gateway namespace: fgedu-ecommerce spec: replicas: 2 selector: matchLabels: app: fgedu-api-gateway template: metadata: labels: app: fgedu-api-gateway spec: containers: - name: gateway image: 192.168.1.100:30002/fgedu/api-gateway:1.0.0 ports: - containerPort: 8080 resources: requests: cpu: 200m memory: 256Mi limits: cpu: 500m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: fgedu-api-gateway namespace: fgedu-ecommerce spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: fgedu-api-gateway EOF [root@k8s-master ~]# kubectl apply -f fgedu-api-gateway.yaml deployment.apps/fgedu-api-gateway created service/fgedu-api-gateway created # 配置Ingress [root@k8s-master ~]# cat > fgedu-ingres学习交流加群风哥QQ113257174s.yaml << 'EOF' apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: fgedu-ecommerce-ingress namespace: fgedu-ecommerce annotations: nginx.ingress.kubernetes.io/rewrite-target: / cert-manager.io/cluster-issuer: letsencrypt-prod spec: ingressClassName: nginx tls: - hosts: - api.fgedu.net.cn secretName: fgedu-tls rules: - host: api.fgedu.net.cn http: paths: - path: / pathType: Prefix backend: service: name: fgedu-api-gateway port: number: 80 EOF [root@k8s-mastfrom PG视频:www.itpux.comer ~]# kubectl apply -f fgedu-ingress.yaml ingress.networking.k8s.io/fgedu-ecommerce-ingress created

Part04-监控运维

4.1 监控配置

# 查看部署状态
[root@k8s-master ~]# kubectl get all -n fgedu-ecommerce
NAME READY STATUS RESTARTS AGE
pod/fgedu-api-gateway-abc12-xyz789 1/1 Running 0 5m
pod/fgedu-api-gateway-def34-xyz789 1/1 Running 0 5m
pod/fgedu-mysql-0 1/1 Running 0 10m
pod/fgedu-mysql-1 1/1 Running 0 9m
pod/fgedu-mysql-2 1/1 Running 0 8m
pod/fgedu-redis-0 1/1 Running 0 8m
pod/fgedu-redis-1 1/1 Running 0 7m
pod/fgedu-redis-2 1/1 Running 0 7m
pod/fgedu-redis-3 1/1 Running 0 7m
pod/fgedu-redis-4 1/1 Running 0 7m
pod/fgedu-redis-5 1/1 Running 0 7m
pod/fgedu-user-service-abc12-xyz789 1/1 Running 0 6m
pod/fgedu-user-service-def34-xyz789 1/1 Running 0 6m
pod/fgedu-user-service-ghi56-xyz789 1/1 Running 0 6m

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/fgedu-api-gateway LoadBalancer 10.96.100.100 192.168.1.200 80:30080/TCP 5m
service/fgedu-mysql ClusterIP None 3306/TCP 10m
service/fgedu-redis ClusterIP None 6379/TCP 8m
service/fgedu-user-service ClusterIP 10.96.100.101 8080/TCP 6m

# 配置HPA自动扩缩容
[root@k8s-master ~]# kubectl autoscale deployment fgedu-user-service –cpu-percent=70 –min=3 –max=10 -n fgedu-ecommerce
horizontalpodautoscaler.autoscaling/fgedu-user-service autoscaled

# 查看HPA状态
[root@k8s-master ~]# kubectl get hpa -n fgedu-ecommerce
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
fgedu-user-service Deployment/fgedu-user-service 10%/70% 3 10 3 1m

# 创建运维脚本
[root@k8s-master ~]# cat > /usr/local/bin/fgedu-ops.sh 更多学习教程公众号风哥教程itpux_com<< 'EOF' #!/bin/bash # fgedu-ops.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn case "$1" in status) kubectl get all -n fgedu-ecommerce ;; logs) kubectl logs -f deployment/$2 -n fgedu-ecommerce --tail=100 ;; restart) kubectl rollout restart deployment/$2 -n fgedu-ecommerce ;; scale) kubectl scale deployment/$2 --replicas=$3 -n fgedu-ecommerce ;; backup) kubectl exec -n fgedu-ecommerce fgedu-mysql-0 -- mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /backup/fgedu-$(date +%Y%m%d).sql
;;
*)
echo “Usage: $0 {status|logs|restart|scale|backup}”
;;
esac
EOF

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

# 执行运维操作
[root@k8s-master ~]# fgedu-ops.sh status
NAME READY STATUS RESTARTS AGE
pod/fgedu-api-gateway-abc12-xyz789 1/1 Running 0 10m
pod/fgedu-user-service-abc12-xyz789 1/1 Running 0 10m

风哥针对综合实战建议:

  • 合理规划系统架构
  • 使用StatefulSet部署有状态应用
  • 配置健康检查确保服务可用
  • 实施自动扩缩容应对流量变化
  • 建立完善的监控运维体系

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

联系我们

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

微信号:itpux-com

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