【问题标题】:Error on StatefulSet creation for mongodb on Kubernetes在 Kubernetes 上为 mongodb 创建 StatefulSet 时出错
【发布时间】:2021-10-18 07:06:52
【问题描述】:

在 kubernetes 上为 mongodb 创建有状态集时,出现以下错误。

“无效:规范:禁止:禁止对除“副本”、“模板”和“更新策略”以外的字段更新状态集规范”

statefulset.yaml

---
  apiVersion: "apps/v1"
  kind: "StatefulSet"
  metadata:
     name: "mongo-development"
     namespace: "development"
  spec:
    selector:
      matchLabels:
        app: "mongo-development"
    serviceName: "mongo-development"
    replicas: 1
    template:
      metadata:
        labels:
           app: "mongo-development"
      spec:
        containers:
          -
            name: "mongo-development"
            image: "mongo"
            imagePullPolicy: "Always"
            env:
             -
                name: "MONGO_INITDB_ROOT_USERNAME"
                value: "xxxx"

             -
                name: "MONGO_INITDB_ROOT_PASSWORD"
                value: "xxxx"

            ports:
              -
                containerPort: 27017
                name: "mongodb"

            volumeMounts: 
              - 
                name: "mongodb-persistent-storage"
                mountPath: "/var/lib/mongodb"
      volumes: 
          - 
            name: "mongodb-persistent-storage"
            persistentVolumeClaim: 
              claimName: "mongodb-pvc-development"

pvc.yaml

---
  apiVersion: "v1"
  kind: "PersistentVolumeClaim"
  metadata:
    name: "mongodb-pvc-development"
    namespace: "development"
    labels:
      app: "mongo-development"
  spec:
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: 5Gi
    storageClassName: gp2

service.yaml

---
  apiVersion: "v1"
  kind: "Service"
  metadata:
    name: "mongo-development"
    namespace: "development"
    labels:
      app: "mongo-development"
  spec:
    ports:
      - 
        name: "mongodb"
        port: 27017
        targetPort: 27017
    clusterIP: "None"
    selector:
      app: "mongo-development"

有人可以帮助我在这里做错了什么。

【问题讨论】:

    标签: mongodb kubernetes kubernetes-statefulset


    【解决方案1】:

    您可能应用了 statefulset.yaml,之后更改了标签之类的内容并尝试重新应用 statefulset.yaml。正如错误所说,您只能在创建 statefulset 后更改某些字段。

    只需删除 statefulset 并重新创建:

    kubectl delete -f statefulset.yaml
    kubectl apply -f statefulset.yaml
    

    【讨论】:

      【解决方案2】:

      Kubernetes 方面对有状态集有明确的限制。

      您删除有状态集并再次应用配置以解决问题。

      您还可以阅读更多内容: https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets

      如错误中所述:在有状态下,您只能更改 replicastemplateupdateStrategyspec 中的其他文件将无法更新。

      【讨论】:

        猜你喜欢
        • 2019-04-10
        • 1970-01-01
        • 2019-05-19
        • 2021-06-08
        • 1970-01-01
        • 2019-11-30
        • 1970-01-01
        • 1970-01-01
        • 2021-09-26
        相关资源
        最近更新 更多