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就可以了
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就可以了