我是 k8 的新手,并尝试更新 StatefulSet 中的 storageClassName。(从默认到 default-t1 仅在 yaml 中更改)
我尝试跑步kubectl apply -f test.yaml
第一个和第二个 Yaml(用于应用更新)之间的唯一区别是 storageClassName:default-t1 而不是 default
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
podManagementPolicy: "Parallel"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: default
resources:
requests:
storage: 1Gi
Run Code Online (Sandbox Code Playgroud)
每次我尝试更新时都会得到The StatefulSet "web" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy' are forbidden
我缺少什么或者我应该采取什么步骤来做到这一点?
fil*_*lst 10
据我所知,没有简单的方法,但这是可能的。
kubectl get statefulset some-statefulset -o yaml > statefulset.yaml
Run Code Online (Sandbox Code Playgroud)
storageClassName的更改volumeClaimTemplatekubectl delete statefulset some-statefulset --cascade=orphan
Run Code Online (Sandbox Code Playgroud)
kubectl apply -f statefulset.yaml
Run Code Online (Sandbox Code Playgroud)
删除每个 Pod 后,StatefulSet 将重新创建一个 Pod(因为没有 PVC),并且使用 StatefulSet 中定义的更改的 StorageClass 为该 Pod 重新创建一个新的 PVC。
StatefulSet 的第一行应该定义一个“apiVersion”,你可以在这里看到示例statefulset。请在第一行添加:
apiVersion: apps/v1
Run Code Online (Sandbox Code Playgroud)
你能给我看看你的“www”PVC 文件的输出吗?
kubectl get pvc www -o yaml
Run Code Online (Sandbox Code Playgroud)
在 PVC 中,您有字段“storageClassName”,应在您要使用的 StorageClass 上设置该字段,因此在您的情况下它将是:
storageClassName: default-t1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5162 次 |
| 最近记录: |