kubernetes - Kubernetes statefulset:除了'replicas'、'template'和'updateStrategy'是被禁止的
问题描述
注意:nfs 服务器和权限都很好,我已经检查了 PV 和 PVC 正在创建良好,只有 statefulSet 给了我这个错误。
错误消息:StatefulSet“auth-mongo-ss”无效:规范:禁止:禁止更新“副本”、“模板”和“更新策略”以外的字段的状态集规范(错误消息很简单,但没有帮助解决它!我在这里缺少什么?)
Kubernetes(minkube)版本:
客户端版本:v1.20.2 服务器版本:v1.20.2
操作系统:
Linux 薄荷 - 20
apiVersion: v1
kind: PersistentVolume
metadata:
name: auth-pv
spec:
capacity:
storage: 250Mi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
nfs:
path: /nfs/auth
server: 192.168.10.104
---
apiVersion: v1
kind: Service
metadata:
name: auth-mongo-serv
labels:
app: auth-mongo-serv
spec:
ports:
- name: db
protocol: TCP
port: 27017
targetPort: 27017
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: auth-mongo-ss
spec:
selector:
matchLabels:
app: auth-mongo-serv # has to match .spec.template.metadata.labels
serviceName: auth-mongo-ss
replicas: 1 # by default is 1
template:
metadata:
labels:
app: auth-mongo-serv # has to match .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10
containers:
- name: auth-mongo-docker
image: mongo
ports:
- containerPort: 27017
resources:
limits:
memory: "250Mi"
cpu: "250m"
volumeMounts:
- name: auth-mongo-data
mountPath: /data/db
volumeClaimTemplates:
- metadata:
name: auth-mongo-data
spec:
storageClassName: manual
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 250Mi
```
解决方案
错误spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy' are forbidden
说明了一切。
StatefultSet
只有可变(您可以更改/更新)replicas
是,template
和updateStrategy
. 除了这些字段之外,Spec
您不能在更新期间更改其他字段。
更新
您有多个问题:
在
StatefuleSet
你使用的规范中serviceName: auth-mongo-ss
,你有这个无头服务吗?在此服务规范中,您没有提供
selector
apiVersion: v1
kind: Service
metadata:
name: auth-mongo-serv
labels:
app: auth-mongo-serv
spec:
ports:
- name: db
protocol: TCP
port: 27017
targetPort: 27017
下面给出了来自 k8s 文档的 StatefulSet 示例,对于 statefulset,您需要一个无头服务。
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx # has to match .spec.template.metadata.labels
serviceName: "nginx"
replicas: 3 # by default is 1
template:
metadata:
labels:
app: nginx # has to match .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10
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: "my-storage-class"
resources:
requests:
storage: 1Gi
推荐阅读
- ios - UITableView:找不到向上移动/对齐 tableIndex 元素的方法
- android - 如何使用 Android 代码更改分辨率(大小)和密度,Runtime.getRuntime().exec(...) 不起作用
- python - 两个 Django 查询集的联合不起作用
- c# - Selenium 中的 PageSource 属性可以在 JavaScript 加载数据时更新吗?
- c# - 列值是另一个值相同的另一列的最大值
- arrays - Mongodb $group + 数组项数
- java - JXPath:如何从地图中查询所有键
- r - 聚合具有特定共享值的行
- microsoft-cognitive - 将参数添加到 POST 分析方法
- rxjs - 仅将新 Observable 的值传播给某些观察者