Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes docker容器目录被永久卷覆盖(声明)_Kubernetes_Persistent_Volumes - Fatal编程技术网

Kubernetes docker容器目录被永久卷覆盖(声明)

Kubernetes docker容器目录被永久卷覆盖(声明),kubernetes,persistent,volumes,Kubernetes,Persistent,Volumes,我正在本地部署docker for desktop。这样我将来就可以迁移到kubernetes集群 然而,我面临一个问题。当使用持久卷时,docker容器/pod中的目录被重写 我正在调出最新的SonarQube图像。许多插件和质量配置文件都是预先安装的。这正是我想要的。如果我不使用持久卷。一切正常。当我使用pv时,图像中的所有数据都被覆盖。我使用头盔 在my deployment.yaml中,我使用以下命令: {{- if (eq .Values.volumes.usePersistent

我正在本地部署docker for desktop。这样我将来就可以迁移到kubernetes集群

然而,我面临一个问题。当使用持久卷时,docker容器/pod中的目录被重写

我正在调出最新的SonarQube图像。许多插件和质量配置文件都是预先安装的。这正是我想要的。如果我不使用持久卷。一切正常。当我使用pv时,图像中的所有数据都被覆盖。我使用头盔

在my deployment.yaml中,我使用以下命令:

 {{- if (eq .Values.volumes.usePersistent "true") }}
          volumeMounts:
          - mountPath: "/opt/sonarqube/data"
            name: sonarqube-data
          - mountPath: "/opt/sonarqube/extensions"
            name: sonarqube-extensions
      volumes:
      - name: sonarqube-data
        persistentVolumeClaim:
          claimName: sonarqube-data-pv-claim
      - name: sonarqube-extensions
        persistentVolumeClaim:
          claimName: sonarqube-extensions-pv-claim
{{- end }}
在我的storage.yaml中,我使用以下命令:

{{- if (eq .Values.volumes.usePersistent "true") }}
kind: PersistentVolume
apiVersion: v1
metadata:
  name: sonarqube-data-pv-volume
  labels:
    type: local
    app: sonarqube-data
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/tmp/toolbox/sonarqube/data"
---
kind: PersistentVolume
apiVersion: v1
metadata:
  name: sonarqube-extensions-pv-volume
  labels:
    type: local
    app: sonarqube-extensions
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/tmp/toolbox/sonarqube/extensions"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sonarqube-data-pv-claim
  labels:
    app: sonarqube-data
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sonarqube-extensions-pv-claim
  labels:
    app: sonarqube-extensions
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
{{- end }}
pvc是有边界和工作的。 我需要的所有数据都在容器中的de'data'和'extensions'文件夹中,来自图像。 例如,在extensions文件夹中:

sonarqube@sonarqube-deployment-6b8bdfb766-klnwh:/opt/sonarqube/extensions/plugins$ ls
README.txt               sonar-java-plugin-5.11.0.17289.jar      sonar-scala-plugin-1.5.0.315.jar
sonar-csharp-plugin-7.11.0.8083.jar  sonar-javascript-plugin-5.1.1.7506.jar  sonar-scm-git-plugin-1.8.0.1574.jar
sonar-css-plugin-1.0.3.724.jar       sonar-kotlin-plugin-1.5.0.315.jar       sonar-scm-svn-plugin-1.9.0.1295.jar
sonar-flex-plugin-2.4.0.1222.jar     sonar-ldap-plugin-2.2.0.608.jar         sonar-typescript-plugin-1.9.0.3766.jar
sonar-go-plugin-1.1.0.1612.jar       sonar-php-plugin-3.0.0.4537.jar         sonar-vbnet-plugin-7.11.0.8083.jar
sonar-html-plugin-3.1.0.1615.jar     sonar-python-plugin-1.13.0.2922.jar     sonar-xml-plugin-2.0.1.2020.jar
sonar-jacoco-plugin-1.0.1.143.jar    sonar-ruby-plugin-1.5.0.315.jar
我在/tmp文件夹中创建了以下目录:

- data
- extensions
   - downloads
   - jdbc-driver
   - plugins
我知道我必须在pv中指定与容器中相同的文件夹。 我选中了,所有文件夹都在我的/tmp文件夹中。但是它们是空的。 他们的plugins文件夹是空的,所有plugin.jar文件都不见了

顺便说一句,我并没有在最初的帖子中包括这一点,但我使用了一个PostgresDB和pvc。pg-deploy.yaml:


{{-if(eq.Values.volumes.usePersistent“true”)}
体积数量:
-mountPath:/var/lib/postgresql/data
姓名:sonarqubedb
卷数:
-姓名:sonarqubedb
persistentVolumeClaim:
索赔名称:postgres sq pv索赔
{{-end}

storage.yaml:

{{- if (eq .Values.volumes.usePersistent "true") }}
kind: PersistentVolume
apiVersion: v1
metadata:
  name: postgres-sq-pv-volume
  labels:
    type: local
    app: postgres-sonarqube
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/tmp/toolbox/postgres-sonarqube"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-sq-pv-claim
  labels:
    app: postgres-sonarqube
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
{{- end }}

为了避免将数据覆盖到同一目录中的现有文件/内容,您可以使用子路径在现有容器文件系统中装载数据和扩展目录(在下面的示例中)。欲知详情

这很有效。但是,直到我对sonarqube使用的数据库做了相同的操作,它才起作用:

        volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: sonarqubedb
              subPath: data

谢谢你的回复。我试过了。它不起作用。我是否应该删除/data和/extensions文件夹中的所有子文件夹(本地)?您可以尝试一下,看看会发生什么
        volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: sonarqubedb
              subPath: data