rook-ceph的dashboard配置覆盖与生效
背景
在rook-ceph部署好之后,默认的ui是clusterip的模式,然后我们想通过edit svc的方式把类型改成nodeport,这时配置生效我们可以访问,然后就出现配置恢复的情况出现。
像出现这种情况,Rook-Ceph 配置自动还原的核心原因是 Operator 采用「声明式管理」,会持续将 CephCluster 自定义资源(CRD)的状态与实际集群资源(如 Service、Pod)同步。若配置不合法或超出 CRD 支持范围,修改会被还原,且编辑时会报校验错误。
以下就是核心问题:
Operator 的一致性协调:Rook Operator 会监控 CephCluster CRD 的变化,并根据 CRD 中的 spec 段 “协调” 实际资源(如 Dashboard 的 Service)。若手动修改 Service(如改成 NodePort),但 CRD 中未声明该配置,Operator 会将 Service 还原为 CRD 定义的默认状态(如 ClusterIP)。
CephCluster CRD 字段限制:早期 Rook 版本的 CephCluster CRD 不支持直接配置 Dashboard 的 Service 类型(如 NodePort)。若强行添加不支持的字段(如 spec.dashboard.service),CRD 校验会失败,导致配置无法保存,进而被 Operator 还原。
配置合法性校验失败:编辑 CephCluster 时提示 invalid,说明修改的字段不符合 CRD 的结构定义(如字段拼写、层级错误,或使用了 CRD 不支持的字段)。
操作生效
因为这个环境的cluster.yaml不知道在哪里,所以这里采用更改CRD yaml文件的方式来修改。
kubectl get cephcluster rook-ceph -n rook-ceph
把集群文件导出
kubectl get cephcluster rook-ceph -n rook-ceph -o yaml > cephcluster.yaml
然后进行修改操作,并注意时效在一分钟内,要不然重新kubectl apply的时候会报错,需要重新导出配置再apply流程。
找到dashboard,关闭ssl和使用7000端口
dashboard:enabled: trueport: 7000ssl: false
重新apply文件之后,我们创建个svc文件,例如dashboard-nodeport.yaml
apiVersion: v1
kind: Service
metadata:name: rook-ceph-mgr-dashboard-nodeportnamespace: rook-cephlabels:app: rook-ceph-mgrrook_cluster: rook-ceph
spec:ports:- name: dashboardport: 7000 # 与 Dashboard 内部端口一致targetPort: 7000 # 与 Dashboard 内部端口一致nodePort: 32304 # 自定义 NodePort(需在 30000–32767 范围内)selector:app: rook-ceph-mgrrook_cluster: rook-cephtype: NodePort
接着把mgr的pod进程重启下
kubectl delete pod rook-ceph-mgr-a-844bf7c945-7mv9j -n rook-ceph
查看svc
访问测验