Создание постоянных томов в Kubernetes на облачной платформе Google

Я пытаюсь развернуть службу postgres в облачных кубернетах Google с постоянным объемом и заявкой на постоянный том, чтобы предоставить хранилище для моего приложения.

Когда я развертываю, модуль застревает в CrashLoopBackOff.

Одно из событий модуля завершается ошибкой с сообщением:

Error: failed to start container "postgres": Error response from daemon: error while creating mount source path '/data/postgres-pv': mkdir /data: read-only file system

Это yaml, который я пытаюсь развернуть с помощью kubectl:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: postgres-pv
  labels:
    type: local
    app: postgres
spec:
  capacity:
    storage: 5Gi
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/postgres-pv
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-pvc
  labels:
    type: local
    app: postgres
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  volumeName: postgres-pv
---
apiVersion: v1
kind: Secret
metadata:
  name: postgres-credentials
type: Opaque
data: 
  user: YWRtaW4=
  password: password==
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres-container
          image: postgres:9.6.6
          env:
            - name: POSTGRES_USER
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: user
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: password   
            - name: POSTGRES_DB
              value: kubernetes_django
          ports:
            - containerPort: 5432
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgres-volume-mount
      volumes:
        - name: postgres-volume-mount
          persistentVolumeClaim:
            claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432
  selector:
   app: postgres

Ничего не получается развернуть, но модуль застревает в CrashLoopBackOff.

Спасибо за помощь!


person wc_coder    schedule 20.10.2018    source источник
comment
Не уверен, но не могли бы вы попробовать: storageClassName: manual capacity: storage: 10Gi Постоянные тома Google не могут быть ниже 10Gi в GCE, и я думаю, что то же самое в GKE. Почему вы не создали экземпляр Google Cloud SQL Postgres, мне кажется намного проще. :)   -  person ThisIsMyName    schedule 21.10.2018
comment
Спасибо, я попробую вместо этого использовать экземпляр google cloud sql postgres   -  person wc_coder    schedule 22.10.2018
comment
Не сомневайтесь, если вам понадобится помощь, я сделал это несколько месяцев назад :)   -  person ThisIsMyName    schedule 22.10.2018
comment
Вы решили эту проблему?   -  person perrohunter    schedule 24.12.2018
comment
Вместо этого я использовал экземпляр Google Cloud SQL postgres, как предложил ThisIsMyName.   -  person wc_coder    schedule 26.12.2018


Ответы (3)


Проблема в вашем постоянном томе. Вы используете путь к хосту, которого нет, и в соответствии с в документ, никогда не будет, поддерживается

person Patrick W    schedule 26.10.2018

У меня такая же проблема. Следуя этому руководству, я получил все это для работы с minikube, но это выдало ту же ошибку на GCP.

Как упоминал Патрик В., документы скажи:

Типы постоянных объемов

  • ...
  • HostPath (только для тестирования одного узла - локальное хранилище никак не поддерживается и НЕ БУДЕТ РАБОТАТЬ в многоузловом кластере)
  • ...

Чтобы решить эту проблему, я нашел решение в документах kubernetes.

Сначала вам нужно создать gcePersistentDisk:

gcloud compute disks create --size=[SIZE] --zone=[ZONE] [DISK_NAME]

а затем конфигурация, описанная в ссылке, должна помочь:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: postgres-pv
  labels:
    type: local
spec:
  capacity:
    storage: 4Gi
  storageClassName: standard
  accessModes:
    - ReadWriteMany
  gcePersistentDisk:
    pdName:data-disk
    fsType: ext4
    readOnly: true
person Tim    schedule 21.02.2019

Во-первых, вам не следует использовать путь к хосту в постоянном томе. во-вторых, я думаю, что вам не хватает части в развертывании, вы должны указать каталог PDATA.

Для простоты я делюсь развертыванием yml:

1. Заявление о сохранении объема:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-pvc  
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi

2. карта конфигурации для хранения posgres env:

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
  labels:
    app: postgres
data:
  POSTGRES_DB: profile
  POSTGRES_USER: postgresadmin
  POSTGRES_PASSWORD: othmane
  PGDATA: /var/lib/postgresql/data/pgdata

3. развертывание postgres:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:10.4
          imagePullPolicy: "IfNotPresent"
          ports:
            - containerPort: 5432
              name: postgres
          envFrom:
            - configMapRef:
                name: postgres-config
          volumeMounts:
           - name: postgres-db
             mountPath: /var/lib/postgresql/data
      volumes:
      - name: postgres-db
        persistentVolumeClaim: 
          claimName: postgres-pvc


---

apiVersion: v1
kind: Service
metadata:
  name: postgres
spec:
  selector:
    app: postgres
  ports:
   - protocol: "TCP"
     port: 5432
     targetPort: 5432
  type: ClusterIP
person Othmane Daanouni    schedule 28.04.2019