ioo*_*ooi 10 kubernetes google-kubernetes-engine persistent-volumes kubernetes-pvc kubernetes-statefulset
在 GKE 上,我将有状态集资源设置为
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
spec:
serviceName: "redis"
selector:
matchLabels:
app: redis
updateStrategy:
type: RollingUpdate
replicas: 3
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis
resources:
limits:
memory: 2Gi
ports:
- containerPort: 6379
volumeMounts:
- name: redis-data
mountPath: /usr/share/redis
volumes:
- name: redis-data
persistentVolumeClaim:
claimName: redis-data-pvc
Run Code Online (Sandbox Code Playgroud)
想要使用 PVC 所以创建了这个。(这一步是在statefulset部署之前完成的)
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Run Code Online (Sandbox Code Playgroud)
当检查kubernetes中的资源时
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
redis-data-pvc Bound pvc-6163d1f8-fb3d-44ac-a91f-edef1452b3b9 10Gi RWO standard 132m
Run Code Online (Sandbox Code Playgroud)
默认存储类别是standard
.
kubectl get storageclass
NAME PROVISIONER
standard (default) kubernetes.io/gce-pd
Run Code Online (Sandbox Code Playgroud)
但是当检查statafulset的部署状态时。总是错的。
# Describe its pod details
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 22s default-scheduler persistentvolumeclaim "redis-data-pvc" not found
Warning FailedScheduling 17s (x2 over 20s) default-scheduler pod has unbound immediate PersistentVolumeClaims (repeated 2 times)
Normal Created 2s (x2 over 3s) kubelet Created container redis
Normal Started 2s (x2 over 3s) kubelet Started container redis
Warning BackOff 0s (x2 over 1s) kubelet Back-off restarting failed container
Run Code Online (Sandbox Code Playgroud)
为什么找不到名字redis-data-pvc
?
Jon*_*nas 17
你所做的,应该有效。确保 和PersistentVolumeClaim
位于StatefulSet
同一命名空间中。
也就是说,这是一个更简单的解决方案,可以让您更轻松地扩展到更多副本:
当使用 StatefulSet 和 PersistentVolumeClaim 时,请使用StatefulSetvolumeClaimTemplates:
中的字段。
将volumeClaimTemplates:
用于为每个副本创建唯一的 PVC,并且它们具有以例如结尾的唯一命名,-0
其中数字是用于 StatefulSet 中的副本的序数。
因此,请使用如下所示的 SatefuleSet 清单:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
spec:
serviceName: "redis"
selector:
matchLabels:
app: redis
updateStrategy:
type: RollingUpdate
replicas: 3
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis
resources:
limits:
memory: 2Gi
ports:
- containerPort: 6379
volumeMounts:
- name: redis-data
mountPath: /usr/share/redis
volumeClaimTemplates: // this will be used to create PVC
- metadata:
name: redis-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23258 次 |
最近记录: |