我在自建的K8s集群里部署用helm部署了emqx5,当时没有作持久化存储,今天上了持久化存储后想要修改配置
kubectl edit emqx/emqx -n test
修改了以下内容:
volumeClaimTemplates:
storageClassName: standard
resources:
requests:
storage: 200Mi
出现了问题想要删除新创建的sts,回归原来创建使用的老版本,结果失败了
尝试了以下等方式:
kubectl delete statefulset emqx-core-5b75c7785 -n test
kubectl delete pod emqx-core-5b75c7785-0 -n test
删除后会自动创建,且会添加到emq集群中
每次都要cluster force-leave
不要删除 Pod 和 Sts,将 EMQX 的 Yaml 改回之前的即可
我一开始没有动yaml,而是通过
kubectl edit emqx/emqx -n test
这条命令
那是不是我应该通过提取原先的版本的yaml文件,如old-emqx.yaml(带容器id例如:emqx-core-7c58fcb7c7)
然后执行
kubectl apply -f old-emqx.yaml?
我尝试过再次使用kubectl edit emqx/emqx -n test
将配置改回去,但是这么做似乎行不通
行不通的表现是什么
kubectl edit emqx/emqx -n test
coreNodesStatus:
collisionCount: 1
currentReplicas: 2
currentRevision: 7c58fcb4b4
readyReplicas: 2
replicas: 2
updateRevision: 5b75c7785
我使用该命令修改emqx的状态信息部分,删除updateRevision这一行来解除更新可以吗
或者emqx-operator-controller有什么办法和命令能控制更新或停止更新
kubectl edit 无法修改资源的 status 的
之前你将配置修改回去之后,检查一下 status 的 currentRevision 和 updateRevision,如果这两个值都是对应的旧的 sts,那么就回滚成功了,手动删掉新的 sts 就可以了
我之前修改回去后 新版本的apdateRevision还是新的,存在新旧两个sts,尝试删除新的sts会重新创建,目前只有通过kubectl edit 才能看到currentRevision是旧的,apdateRevision是新的,从目前的情况来看 我是回滚失败了,operator控制器那里可以修改吗
coreTemplate:
metadata: {}
spec:
containerSecurityContext:
runAsGroup: 1000
runAsNonRoot: true
runAsUser: 1000
extraVolumeMounts:
- mountPath: /mounted/cert
name: ssl-self-sign
extraVolumes:
- name: ssl-self-sign
secret:
secretName: ssl-self-sign
livenessProbe:
failureThreshold: 3
httpGet:
path: /status
port: dashboard
initialDelaySeconds: 60
periodSeconds: 30
podSecurityContext:
fsGroup: 1000
fsGroupChangePolicy: Always
runAsGroup: 1000
runAsUser: 1000
supplementalGroups:
- 1000
readinessProbe:
failureThreshold: 12
httpGet:
path: /status
port: dashboard
initialDelaySeconds: 10
periodSeconds: 5
replicas: 2
resources:
requests:
cpu: “1”
memory: 1Gi
volumeClaimTemplates:
resources: {}
我最开始只是在coreTemplate.spec.volumeClaimTemplates这里做了修改,参照k8s持久化的配置,内容大致如下:
spec:
image: emqx:5
coreTemplate:
spec:
volumeClaimTemplates:
storageClassName: standard
resources:
requests:
storage: 500Mi
accessModes:
- ReadWriteOnce
replicas: 3
这是我的部署文件,kubectl apply 仅对端口做了修改
cat emqx.yaml
apiVersion: apps.emqx.io/v2beta1
kind: EMQX
metadata:
name: emqx
namespace: test
spec:
image: emqx:5.5.0
coreTemplate:
spec:
replicas: 2
resources:
requests:
cpu: 1000m
memory: 1Gi
extraVolumes:
- name: ssl-self-sign
secret:
secretName: ssl-self-sign
extraVolumeMounts:
- name: ssl-self-sign
mountPath: /mounted/cert
replicantTemplate:
spec:
replicas: 3
resources:
requests:
cpu: 1000m
memory: 2Gi
extraVolumes:
- name: ssl-self-sign
secret:
secretName: ssl-self-sign
extraVolumeMounts:
- name: ssl-self-sign
mountPath: /mounted/cert
dashboardServiceTemplate:
spec:
type: NodePort
listenersServiceTemplate:
spec:
type: NodePort
我是否可以通过kubectl apply -f 旧版本的sts.yaml,来恢复到旧版本
我 尝试kubectl apply -f 最初的部署时使用的emqx.yaml,并不能退回正在运行的旧版本,唯一效果是
coreNodesStatus:
collisionCount: 1
currentReplicas: 2
currentRevision: 7c58fcb4b4
readyReplicas: 2
replicas: 2
updateReplicas: 1
updateRevision: 7594bdc888
这里的版本变了