簡體   English   中英

無法在 k8s 上創建兩個 mysql pod

[英]Can't create two mysql pods on k8s

我正在嘗試在一個集群中運行兩個 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
---

kubectl describe pod關於第二個 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

我根據喬納斯的評論運行kubectl logs <podname> 我看到了問題的原因。 它有效,因為我清空了 mysql 數據目錄。 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM