Нет способа применить изменения к развертыванию, связанному с ReadWriteOnce PV в движке gCloud Kubernetes? - PullRequest
0 голосов
/ 22 октября 2018

Поскольку диск GCE не поддерживает ReadWriteMany, у меня нет возможности применить изменения к развертыванию, но я застрял на ContainerCreating с FailedAttachVolume.

Итак, вот мои настройки:

1.ПВХ

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: mysql
spec:
  storageClassName: "standard"
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

2.Услуга

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  type: ClusterIP
  ports:
    - protocol: TCP
      port: 3306
      targetPort: 3306
  selector:
    app: mysql

3.Развертывание

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql/mysql-server
        name: mysql
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /mysql-data
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

Что хорошо для создания PVC, svc и развертывания.Стручок и контейнер запустились успешно и работали, как и ожидалось.


Однако, когда я попытался применить изменения: kubectl apply -f mysql_deployment.yaml

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

NAME             READY     STATUS              RESTARTS   AGE
mysql-nowhash    1/1       Running             0          2d
mysql-newhash    0/2       ContainerCreating   0          15m

Во-вторых, из консоли gCloud, внутри стручка, который пытался создать, я получил две решающие ошибкижурналы:

1 из 2 FailedAttachVolume

Multi-Attach error for volume "pvc-<hash>" Volume is already exclusively attached to one node and can't be attached to another  FailedAttachVolume

2 из 2 FailedMount

Unable to mount volumes for pod "<pod name and hash>": timeout expired waiting for volumes to attach/mount for pod "default"/"<pod name and hash>". list of unattached/unmounted volumes=[mysql-persistent-storage] 

Что я мог сразудумать о ReadWriteOnce способность gCloud PV.Потому что двигатель kubernetes создаст новый модуль перед тем, как прекратить работу существующего.Таким образом, в ReadWriteOnce он никогда не сможет создать новый модуль и заявить о существующем pvc ...

Есть идеи или я должен использовать какой-то другой способ выполнения обновлений развертывания?благодарю за любой вклад и предложение =)

примечание: мой текущий обходной путь - создать временный модуль NFS, чтобы сделать его похожим на пвх ReadWriteMany, это сработало, но звучит глупо ... требует дополнительной памятиo издержки для облегчения обновления развертывания? .. = P

1 Ответ

0 голосов
/ 22 октября 2018

Причина в том, что если вы применяете UpdateStrategy: RollingUpdate (по умолчанию), k8s ожидает готовности нового контейнера, прежде чем закрыть старый.Вы можете изменить это поведение, применив UpdateStrategy: Recreate

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy

...