簡體   English   中英

清除新映像上的 Kubernetes 持久卷

[英]Clear Kubernetes persistent volume on new image

我有一個帶有自定義 docker 鏡像的 wordpress 部署,並將自定義主題復制到鏡像中,該鏡像被部署到具有持久卷的 kubernetes 集群中。

初始部署效果很好,網站按預期顯示。 當我更新主題並部署新的 docker 鏡像時,問題就出現了,因為持久卷主題文件似乎沒有更新到 docker 鏡像中的新版本主題。

部署新映像時是否需要清除/重置 wp-content/themes/my-theme 目錄?

任何幫助表示贊賞,下面的代碼示例。

Dockerfile:

FROM wordpress:latest
COPY ./my-thtme /usr/src/wordpress/wp-content/themes/my-theme

持久卷聲明:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress
spec:
    accessModes:
        - ReadWriteMany
    resources:
        requests:
            storage: 2Gi
    storageClass: "nfs"

部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      imagePullSecrets:
        - name: gitlab-auth
      containers:
        - name: wordpress
          image: registry.gitlab.com/user/wordpress:1234
          imagePullPolicy: IfNotPresent
          env:
            - name: WORDPRESS_DB_HOST
              value: wordpress-mysql
            - name: WORDPRESS_DB_USER
              value: mysql_wordpress
            - name: WORDPRESS_DB_NAME
              value: wordpress
            - name: WORDPRESS_DB_TABLE_PREFIX
              value: _wp
            - name: WORDPRESS_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-pass
                  key: mysql-password
          volumeMounts:
          - name: wordpress-data
            mountPath: /var/www/html/wp-content
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
      volumes:
      - name: wordpress-data
        persistentVolumeClaim:
          claimName: wordpress

有不止一種方法可以做到這一點。 您可以在Deployment規范中添加一個initContainer以在Pod中的應用程序容器啟動之前從Persistent Volume刪除現有文件。 例如:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      imagePullSecrets:
        - name: gitlab-auth
      initContainers:
      - name: init-theme
        image: "alpine:3"
        command: ["sh", "-c", "if [ -d /var/www/html/wp-content/my-theme ]; then rm -rf /var/www/html/wp-content/my-theme; fi"]
        volumeMounts:
          - name: workdpress-data
            mountPath: /var/www/html/wp-content
      containers:
      ...
      volumes:
      - name: wordpress-data
        persistentVolumeClaim:
          claimName: wordpress

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM