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/