繁体   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