Statefulset 在本地 minikube 中不工作。它给出,来自服务器的错误(BadRequest):pod mysql-0 没有分配主机

Statefulset not working in local minikube. It gives, Error from server (BadRequest): pod mysql-0 does not have a host assigned

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
  namespace: cp1
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: mysql
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mysql
          image: mysql:latest
          env:
            - name: MYSQL_ROOT_HOST
              value: '%'
            - name: MYSQL_LOG_CONSOLE
              value: "true"
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                configMapKeyRef:
                  key: MYSQL_PASSWORD
                  name: env-map-service
          ports:
            - containerPort: 3306
              name: mysql
          resources:
            requests:
              cpu: 500m
              memory: 1Gi
          volumeMounts:
            - name: mysql-vol
              mountPath: /var/lib/mysql
  volumeClaimTemplates:
    - metadata:
        name: mysql-vol
      spec:
        accessModes: [ "ReadWriteOnce" ]
        resources:
          requests:
            storage: 1Gi
        storageClassName: test-sc

apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: cp1
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  ports:
    - port: 3306
      name: mysql
      targetPort: 3306
  clusterIP: None
  selector:
    app: mysql

这是我的应用程序部署 yaml 文件。效果很好,

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kube-child-app
  labels:
    app: kube-child-app
  namespace: cp1
spec:
  replicas: 1
  template:
    metadata:
      name: kube-child-app
      labels:
        app: kube-child-app
    spec:
      containers:
        - name: kube-child-app
          image: jahadulrakib/kube-child-app:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8081
      restartPolicy: Always
  selector:
    matchLabels:
      app: kube-child-app

我想在我的本地 kubernetes 集群中部署一个数据库应用程序。但它给出了以下错误并且没有 运行 pod。在这里,我附上了用于 pod up 的 yaml 文件。我为这个 StroageClass 创建了 PV.

错误:来自服务器的错误 (BadRequest):pod mysql-0 没有分配主机

更新 1:

警告 FailedScheduling 5h40m 默认调度程序 0/1 个节点可用:1 个 pod 具有未绑定的即时 PersistentVolumeClaims

pvc 和 pv 处于待定状态

更新 2:

PVC 处于 pending 状态,因为存储 class 无法创建所需的 PV

15m Warning FailedScheduling pod/mysql-0 0/1 个节点可用:1 个 pod 具有未绑定的即时 PersistentVolumeClaims。 4 分钟 12 秒正常外部供应 persistentvolumeclaim/mysql-vol-mysql-0 等待创建卷,由外部供应商“docker.io/hostpath”或由系统管理员手动创建

更新 3:

这个问题似乎源于我们想要使用的可用 PV 标签和配置与 statefulSet 中设置的标签和配置之间的差异 volumeClaimTemplates

看起来 PVC 对所需的 PV 不满意,因为 storageClass 没有创建新的 PV 并且现有 PV 与 Pending PVC 不匹配,因此它们无法绑定在一起。更改适当的字段后,它们绑定在一起。

虽然它只使用单个副本,但 statefulSet 仍然是最好的选择,而不是使用 pvc 部署,主要是因为应用程序的意图是一个扩展项目鸟瞰图的数据库解释应用程序的含义更好时使用 statefulSet,因为它是有状态的,将来可以变成一组 pods 而不是一个。

查看kubernetes article on it when is was first popularised and set as in useful state, and theire current docs就可以了