EKS 使用PVC, StatefulSet 安装WordPress

1. 需要确保在EKS的add on当中安装了EBS CSI的插件,否则无法使用PVC

2. 需要安装好storage class, eks 默认是安装好了GP2的StorageClass, 但是由于GP3比较便宜,所以需要另外自行创建,GP3 最低可接受的容量是1GB, reclaimPolicy: Delete 表示当PVC被删除的时候EBS也是一并被删除

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gp3
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

3. 以下是StatefulSet,Service 和Ingress。 我使用的是AWS Load Balancer Controller, 不是Nginx Ingress Controller

想使用AWS Load Balancer Controller可以参考这文章:https://www.pangzai.win/eks%E5%AE%89%E8%A3%85aws-load-balancer-controller%E4%BB%A5%E4%BE%BFingress%E8%83%BD%E5%A4%9F%E4%BD%BF%E7%94%A8alb/

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: wordpress
  namespace: wordpress
spec:
  serviceName: "wordpress"
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
        - name: wordpress
          image: public.ecr.aws/docker/library/wordpress:php8.4-apache
          ports:
            - containerPort: 80
          env:
            - name: WORDPRESS_DB_HOST
              value: "yourDbHost:3306"
            - name: WORDPRESS_DB_USER
              value: "yourUser"
            - name: WORDPRESS_DB_PASSWORD
              value: "yourPassword"
            - name: WORDPRESS_DB_NAME
              value: "wordpress"
            - name: WORDPRESS_CONFIG_EXTRA
              value: |
                // 强制文件系统直接写入,避免 FTP 弹窗
                define( 'FS_METHOD', 'direct' );
          volumeMounts:
            - name: wordpress-storage
              mountPath: /var/www/html
  volumeClaimTemplates:
    - metadata:
        name: wordpress-storage
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: "gp3"
        resources:
          requests:
            storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress-service
  namespace: wordpress
spec:
  selector:
    app: wordpress
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wordpress-alb-ingress
  namespace: wordpress
  annotations:
    alb.ingress.kubernetes.io/healthcheck-path: /
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/ssl-redirect: '443'
spec:
  ingressClassName: default-alb
  rules:
    - host: w.pangzai.win
      http:
        paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: wordpress-service
                port:
                  number: 80

Loading

Facebook评论