docker - Statefulset 无法在本地 minikube 中工作。它给出了来自服务器的错误(BadRequest): pod mysql-0 does not have a host assigned

标签 docker kubernetes persistent-volumes kubernetes-statefulset persistent-volume-claims

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 具有未绑定(bind)的即时 PersistentVolumeClaims

pvc 和 pv 处于待处理状态

更新2:

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

15m 警告 FailedScheduling pod/mysql-0 0/1 个节点可用:1 个 pod 具有未绑定(bind)的即时 PersistentVolumeClaims。 4分12秒正常ExternalProvisioning permanentvolumeclaim/mysql-vol-mysql-0等待创建卷,可以通过外部配置程序“docker.io/hostpath”创建,也可以由系统管理员手动创建

更新3:

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

最佳答案

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

虽然它只使用单个副本,但与使用 pvc 部署相比,statefulSet 仍然是最佳选择,主要是因为应用程序的目的是扩展项目的数据库,在使用 a 时更好地解释应用程序的含义statefulSet 因为它是有状态的,并且将来可以变成一组 pod,而不仅仅是一个。

查看kubernetes article当它第一次普及并设置为可用状态时,它们是当前的 docs就在上面

关于docker - Statefulset 无法在本地 minikube 中工作。它给出了来自服务器的错误(BadRequest): pod mysql-0 does not have a host assigned,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69009859/

相关文章:

kubernetes - 该服务在Kubernetes中不可用

amazon-web-services - Kubernetes 无法在 AWS-EBS 上创建 PersistentVolumeClaim

kubernetes - 节点有卷节点关联冲突

docker - 升级vapor-cli后,Laravel steam部署仍然失败 "you are using an outdated version of Vapor CLI"

kubernetes - 如何使用virtualservice公开grafana prometheus和kiali等仪表板?

kubernetes - 运行一个shell脚本来初始化kubernetes中的Pod(初始化我的数据库集群)

Kubernetes - 对于 Scale,当在扩展 pod (GKE) 时附加持久卷时 pod 处于挂起状态

mongodb - 如何在 mongo db 配置文件 (mongod.conf) 中使用环境变量作为 Bind-Ip

docker - GKE 无法从 GCR 拉取镜像

Django、GDAL 和 CircleCI 2