wordpressHPA

简介: 本方案基于Kubernetes部署高可用WordPress:采用NFS PV优化挂载参数(nolock/vers3/缓存策略等)提升IO性能;Secret安全管理数据库凭证;HPA实现CPU驱动的弹性伸缩(1–16副本,40%/70%阈值);Deployment配置资源限制与虚拟节点亲和;UnitedDeployment支持多可用区+ECI混合调度,保障业务稳定与成本优化。

wordpress HPA

  • PV mount 参数
spec:
  mountOptions:
    - 'nolock,tcp,noresvport'
    - vers=3
    - rsize=1048576
    - wsize=1048576
    - acregmin=60        # 文件属性缓存60秒(图片基本只读)
    - acregmax=300       # 最大5分钟
    - acdirmin=30        # 目录属性缓存30秒
    - acdirmax=120       # 最大2分钟
    - actimeo=60         # 统一定时60秒
    - noatime            # 不更新atime
    - timeo=600          # 保持60秒超时
    - retrans=3          # 增加重传
    - hard               # 硬挂载(避免静默失败)
  • Secret
apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: secret-wordpress
data:
  WORDPRESS_DB_HOST: XXX
  WORDPRESS_DB_NAME: wordpress
  WORDPRESS_DB_USER: wordpress
  WORDPRESS_DB_PASSWORD: XXX
  • HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: wordpress
  namespace: wordpress
spec:
  minReplicas: 1
  maxReplicas: 16
  metrics:
    - resource:
        name: cpu
        target:
          averageUtilization: 40
          type: Utilization
      type: Resource
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: wordpress
  behavior:
    scaleDown:
      policies:
        - periodSeconds: 15
          type: Pods
          value: 8
        - periodSeconds: 15
          type: Percent
          value: 100
      selectPolicy: Max
      stabilizationWindowSeconds: 60
    scaleUp:
      policies:
        - periodSeconds: 10
          type: Pods
          value: 8
        - periodSeconds: 10
          type: Percent
          value: 200
      selectPolicy: Max
      stabilizationWindowSeconds: 10
  • Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: wordpress
  name: wordpress
spec:
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: wordpress
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 50%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: type
                    operator: In
                    values:
                      - virtual-kubelet
      tolerations:
        - effect: NoSchedule
          key: virtual-kubelet.io/provider
          operator: Exists
      containers:
        - env:
            - name: WORDPRESS_DB_HOST
              value: rds-web-01.mysql.rds.aliyuncs.com
            - name: WORDPRESS_DB_NAME
              value: wordpress
            - name: WORDPRESS_DB_USER
              value: wordpress
            - name: WORDPRESS_DB_PASSWORD
              value: Via@wp2026
            - name: aliyun_logs_wordpress
              value: stdout
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/wordpress:6.2.2-23
          imagePullPolicy: IfNotPresent
          name: wordpress
          ports:
            - containerPort: 80
              name: app-port-80
              protocol: TCP
          resources:
            limits:
              cpu: '6'
              ephemeral-storage: 10Gi
              memory: 4Gi
            requests:
              cpu: '6'
              ephemeral-storage: 10Gi
              memory: 4Gi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /etc/localtime
            name: volume-localtime
            - mountPath: /var/www/html/wp-content
            name: volume-wordpress
        volumes:
        - hostPath:
            path: /etc/localtime
            type: ""
            name: volume-localtime
        - name: volume-wordpress
            persistentVolumeClaim:
            claimName: pvc-wordpress
  • UnitedDeployment
apiVersion: apps.kruise.io/v1alpha1
kind: UnitedDeployment
metadata:
  name: ud-wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      env: prod
      project: ace
      app: wordpress
  template:
    deploymentTemplate:
      metadata:
        labels:
          app: wordpress
          env: prod
          project: ace
        name: wordpress
      spec:
        selector:
          matchLabels:
            app: wordpress
            env: prod
            project: ace
        strategy:
          rollingUpdate:
            maxSurge: 50%
            maxUnavailable: 50%
          type: RollingUpdate
        template:
          metadata:
            labels:
              app: wordpress
              env: prod
              project: ace
          spec:
            containers:
            - env:
              - name: WORDPRESS_DB_HOST
                valueFrom:
                  secretKeyRef:
                    key: WORDPRESS_DB_HOST
                    name: secret-wordpress
              - name: WORDPRESS_DB_NAME
                valueFrom:
                  secretKeyRef:
                    key: WORDPRESS_DB_NAME
                    name: secret-wordpress
              - name: WORDPRESS_DB_USER
                valueFrom:
                  secretKeyRef:
                    key: WORDPRESS_DB_USER
                    name: secret-wordpress
              - name: WORDPRESS_DB_PASSWORD
                valueFrom:
                  secretKeyRef:
                    key: WORDPRESS_DB_PASSWORD
                    name: secret-wordpress
              - name: aliyun_logs_wordpress
                value: stdout
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/wordpress:6.2.2-23
              imagePullPolicy: IfNotPresent
              name: wordpress
              ports:
              - containerPort: 80
                name: app-tcp-80
                protocol: TCP
              resources:
                limits:
                  cpu: "6"
                  ephemeral-storage: 10Gi
                  memory: 4Gi
                requests:
                  cpu: "6"
                  ephemeral-storage: 10Gi
                  memory: 4Gi
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
              - mountPath: /etc/localtime
                name: volume-localtime
              - mountPath: /var/www/html/wp-content
                name: volume-wordpress
            volumes:
            - hostPath:
                path: /etc/localtime
                type: ""
              name: volume-localtime
            - name: volume-wordpress
              persistentVolumeClaim:
                claimName: pvc-wordpress
  topology:
    subsets:
    - name: subset-a
      nodeSelectorTerm:
        matchExpressions:
        - key: alibabacloud.com/nodepool-id
          operator: In
          values:
          - npxxx  # 需要替换为节点池A的ID。
      maxReplicas: 2
      minReplicas: 1
    - name: subset-b
      nodeSelectorTerm:
        matchExpressions:
        - key: alibabacloud.com/nodepool-id
          operator: In
          values:
          - npxxx # 需要替换为节点池B的ID。
      maxReplicas: 2
      minReplicas: 0
    - name: subset-c
      nodeSelectorTerm:
        matchExpressions:
        - key: type
          operator: In
          values:
          - virtual-kubelet
      - key: topology.kubernetes.io/zone
        operator: In
        values:
        - cn-hangzhou-j   # 替换为可用区J
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Exists
      minReplicas: 0
    - name: subset-d
      nodeSelectorTerm:
        matchExpressions:
        - key: type
          operator: In
          values:
          - virtual-kubelet
      - key: topology.kubernetes.io/zone
        operator: In
        values:
        - cn-hangzhou-k   # 替换为可用区K
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Exists
      minReplicas: 0
  • HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: wordpress
  namespace: wordpress
spec:
  minReplicas: 1
  maxReplicas: 16
  metrics:
    - resource:
        name: cpu
        target:
          averageUtilization: 70
          type: Utilization
      type: Resource
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: wordpress
  behavior:
    scaleDown:
      policies:
        - periodSeconds: 15
          type: Pods
          value: 16
        - periodSeconds: 15
          type: Percent
          value: 300
      selectPolicy: Max
      stabilizationWindowSeconds: 30
    scaleUp:
      policies:
        - periodSeconds: 10
          type: Pods
          value: 16
        - periodSeconds: 15
          type: Percent
          value: 300
      selectPolicy: Max
      stabilizationWindowSeconds: 10
相关文章
人工智能 缓存 前端开发
12432 70
人工智能 自然语言处理 安全
1316 0
Web App开发 人工智能 API
1537 2
人工智能 JavaScript 开发工具
4907 0
人工智能 Java BI
1631 1
人工智能 JavaScript 测试技术
2572 2
开发工具 Swift git
2000 6
人工智能 JavaScript 测试技术
1239 4