mysql - 无法在 k8s 上创建两个 mysql pod
问题描述
我正在尝试在一个集群中运行两个 mysql pod。第一个 mysql pod 使用 hdd 作为存储。第二个 mysql pod 使用 ssd 作为存储。第一个 pod 工作。但是第二个吊舱陷入“崩溃循环”。
我使用两个 .yaml 文件制作了两个 pod。这些文件在这里。
deployMysqlHdd.yaml(第一个 pod。这行得通。)
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-hdd-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysqlpersistentvolume
spec:
capacity:
storage: 1000Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: local-hdd-storage
local:
path: /k8sLocalStorage/mysql
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- hdd
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysqlvolumeclaim
spec:
accessModes:
- ReadWriteMany
volumeMode: Filesystem
resources:
requests:
storage: 1000Gi
storageClassName: local-hdd-storage
---
apiVersion: v1
kind: Service
metadata:
name: mysql-nodeport
spec:
type: NodePort
ports:
- name: mysql-port
port: 3306
targetPort: 3306
nodePort: 3306
selector:
name: mysql
---
apiVersion: v1
kind: Secret
metadata:
name: mysql-auth
type: Opaque
stringData:
password: **********
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysqldeployment
spec:
replicas: 1
selector:
matchLabels:
name: mysql
template:
metadata:
labels:
name: mysql
spec:
containers:
- name: mysql
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-auth
key: password
volumeMounts:
- name: mysqlvolumes
mountPath: /var/lib/mysql
volumes:
- name: mysqlvolumes
persistentVolumeClaim:
claimName: mysqlvolumeclaim
---
deployMysqlSSD.yaml(第二个 pod。这不起作用。)
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: intelnuc-local-mysql-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: intelnuc-mysql-persistentvolume
spec:
capacity:
storage: 500Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: intelnuc-local-mysql-storageclass
local:
path: /k8sNodeData/mysql
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: intelnuc-mysql-persistentvolumeclaim
spec:
accessModes:
- ReadWriteMany
volumeMode: Filesystem
resources:
requests:
storage: 500Gi
storageClassName: intelnuc-local-mysql-storageclass
---
apiVersion: v1
kind: Service
metadata:
name: intelnuc-mysql-nodeport
spec:
type: NodePort
ports:
- name: intelnuc-mysql-port
port: 3306
targetPort: 3306
nodePort: 3307
selector:
name: mysql-high-resource
---
apiVersion: v1
kind: Secret
metadata:
name: intelnuc-mysql-auth
type: Opaque
stringData:
password: ***********
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: intelnuc-mysql-deployment
spec:
replicas: 1
selector:
matchLabels:
name: intelnuc-mysql
template:
metadata:
labels:
name: intelnuc-mysql
spec:
containers:
- name: intelnuc-mysql
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: intelnuc-mysql-auth
key: password
volumeMounts:
- name: intelnuc-mysql-volumes
mountPath: /var/lib/mysql
volumes:
- name: intelnuc-mysql-volumes
persistentVolumeClaim:
claimName: intelnuc-mysql-persistentvolumeclaim
---
大约第二个 pod的结果kubectl describe pod
就在这里。
Name: intelnuc-mysql-deployment-9685c849-mvg4p
Namespace: default
Priority: 0
Node: intelnuc/192.168.1.10
Start Time: Sat, 19 Sep 2020 06:37:16 +0000
Labels: name=intelnuc-mysql
pod-template-hash=9685c849
Annotations: <none>
Status: Running
IP: 10.244.2.23
IPs:
IP: 10.244.2.23
Controlled By: ReplicaSet/intelnuc-mysql-deployment-9685c849
Containers:
intelnuc-mysql:
Container ID: docker://8bbe74e6d90cce313be9e8708319470a85a25a98742bc0472bcda193be91d277
Image: mysql
Image ID: docker-pullable://mysql@sha256:e1bfe11693ed2052cb3b4e5fa356c65381129e87e38551c6cd6ec532ebe0e808
Port: <none>
Host Port: <none>
State: Terminated
Reason: Error
Exit Code: 1
Started: Sat, 19 Sep 2020 06:38:13 +0000
Finished: Sat, 19 Sep 2020 06:38:13 +0000
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Sat, 19 Sep 2020 06:37:43 +0000
Finished: Sat, 19 Sep 2020 06:37:43 +0000
Ready: False
Restart Count: 3
Environment:
MYSQL_ROOT_PASSWORD: <set to the key 'password' in secret 'intelnuc-mysql-auth'> Optional: false
Mounts:
/var/lib/mysql from intelnuc-mysql-volumes (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-6m588 (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
intelnuc-mysql-volumes:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: intelnuc-mysql-persistentvolumeclaim
ReadOnly: false
default-token-6m588:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-6m588
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned default/intelnuc-mysql-deployment-9685c849-mvg4p to intelnuc
Normal Pulling 10s (x4 over 63s) kubelet, intelnuc Pulling image "mysql"
Normal Pulled 7s (x4 over 60s) kubelet, intelnuc Successfully pulled image "mysql"
Normal Created 7s (x4 over 60s) kubelet, intelnuc Created container intelnuc-mysql
Normal Started 7s (x4 over 60s) kubelet, intelnuc Started container intelnuc-mysql
Warning BackOff 6s (x5 over 56s) kubelet, intelnuc Back-off restarting failed container
我认为第二个 pod 上的 NodePort 服务设置错误,我曾尝试更改设置。但我无法解决这个问题。
我想知道在哪里修复它。
附加信息。
的结果在kubectl logs <podname>
这里。
2020-09-20 07:33:20+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.
2020-09-20 07:33:20+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-09-20 07:33:20+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.
2020-09-20 07:33:20+00:00 [Note] [Entrypoint]: Initializing database files
2020-09-20T07:33:20.840302Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.21) initializing of server in progress as process 43
2020-09-20T07:33:20.841379Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
2020-09-20T07:33:20.841384Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2020-09-20T07:33:20.841423Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-09-20T07:33:20.841495Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.21) MySQL Community Server - GPL.
解决方案
我认为,问题是因为第二个服务的标签与部署的标签不匹配。能否请您更改并重试。
就像代替服务标签“名称:mysql-high-resource”的选择器一样,尝试使用“名称:intelnuc-mysql”。
apiVersion: v1
kind: Service
metadata:
name: intelnuc-mysql-nodeport
spec:
type: NodePort
ports:
- name: intelnuc-mysql-port
port: 3306
targetPort: 3306
nodePort: 3307
selector:
name: mysql-high-resource
推荐阅读
- java - Spring 为 SQL 表创建数据库存储库
- python - 在python3中编写csv文件
- java - Struts 绝对 uri:http://struts.apache.org/tags-bean 无法在 web.xml 或随此应用程序部署的 jar 文件中解析
- python - 如何在循环中使用 numpy.dstack?
- c++ - 如何使用 C++ 在 Qt 中创建垂直(旋转)按钮
- python - 在fabric2中创建别名
- android - 没有开始的意图和上下文崩溃的应用程序
- konvajs - 如何在图层中添加上传图片
- python - 使用 Beautifulsoup 错误解析嵌套在 Div 类中的数据
- c++ - C++ Thor 库 - 使用资源加载器类的问题(''没有命名类型)