Каталог контейнера Docker перезаписывается постоянным томом (утверждение) - PullRequest
0 голосов
/ 25 марта 2019

Я развертываю локально в Docker для рабочего стола. Чтобы я мог в будущем перейти на кластер kubernetes.

Однако я столкнулся с проблемой. При использовании постоянных томов каталоги в Docker-контейнере / модуле перезаписываются.

Я тяну последнюю версию SonarQube. Многие плагины и качественные профили предварительно установлены. Что именно то, что я хочу. Если я не использую постоянные тома. Все работает как положено. Когда я использую PV все данные в изображении перезаписываются. Я использую шлем.

В моем deploy.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 }}

В моем хранилище. Я использую это:

{{- 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 }}

ПВХ ограничены и работают. Все данные, которые мне нужны, находятся в папке de 'data' и '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. Но пусты. У них папка плагинов пуста, все файлы plugin.jar исчезли.

Кстати, я не включил это в первоначальный пост, но я использую PostgresDB также с pvc. пг-deploy.yaml:

{{- if (eq .Values.volumes.usePersistent "true") }} volumeMounts: - mountPath: /var/lib/postgresql/data name: sonarqubedb volumes: - name: sonarqubedb persistentVolumeClaim: claimName: postgres-sq-pv-claim {{- 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 }}

1 Ответ

1 голос
/ 25 марта 2019

, чтобы избежать перезаписи данных в существующие файлы / содержимое в том же каталоге, вы можете использовать subpath , чтобы смонтировать каталог данных и расширений (в приведенном ниже примере) в существующей файловой системе контейнера.для более подробной информации подпуть

      volumeMounts:
      - mountPath: "/opt/sonarqube/data"
        name: sonarqube-data
        subPath: data
      - mountPath: "/opt/sonarqube/extensions"
        name: sonarqube-extensions
        subPath: extensions 

Это работает.Однако это не работало, пока я не сделал то же самое для базы данных, которую использует sonarqube:

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