Поскольку диск 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