Kubernetes:mysql pod无法打开日志文件/var/log/pods/

Kubernetes:mysql pod无法打开日志文件/var/log/pods/,mysql,docker,kubernetes,google-kubernetes-engine,Mysql,Docker,Kubernetes,Google Kubernetes Engine,我遵循官方教程,在已经在GCP上运行的Kubernetes集群上运行一个有状态的mysql pod。我使用了完全相同的命令,首先创建持久卷和持久卷链,然后根据文档部署mysql yaml文件的内容。mysql pod未运行,并且处于RunContainerError状态。检查此mysql pod的日志显示: failed to open log file "/var/log/pods/045cea87-6408-11e9-84d3-42010aa001c3/mysql/2.log": open

我遵循官方教程,在已经在GCP上运行的Kubernetes集群上运行一个有状态的mysql pod。我使用了完全相同的命令,首先创建持久卷和持久卷链,然后根据文档部署mysql yaml文件的内容。mysql pod未运行,并且处于RunContainerError状态。检查此mysql pod的日志显示:

failed to open log file "/var/log/pods/045cea87-6408-11e9-84d3-42010aa001c3/mysql/2.log": open /var/log/pods/045cea87-6408-11e9-84d3-42010aa001c3/mysql/2.log: no such file or directory
更新:如@Matthew在评论中所问,
kubectl descripe pods-l app=mysql的结果如下所示:

Name:               mysql-fb75876c6-tk6ml
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               gke-mycluster-default-pool-b1c1d316-xv4v/10.160.0.13
Start Time:         Tue, 23 Apr 2019 13:36:04 +0530
Labels:             app=mysql
                    pod-template-hash=963143272
Annotations:        kubernetes.io/limit-ranger=LimitRanger plugin set: cpu request for container mysql
Status:             Running
IP:                 10.52.0.7
Controlled By:      ReplicaSet/mysql-fb75876c6
Containers:
  mysql:
    Container ID:   docker://451ec5bf67f60269493b894004120b627d9a05f38e37cb50e9f283e58dbe6e56
    Image:          mysql:5.6
    Image ID:       docker-pullable://mysql@sha256:5ab881bc5abe2ac734d9fb53d76d984cc04031159152ab42edcabbd377cc0859
    Port:           3306/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       RunContainerError
    Last State:     Terminated
      Reason:       ContainerCannotRun
      Message:      error while creating mount source path '/mnt/data': mkdir /mnt/data: read-only file system
      Exit Code:    128
      Started:      Tue, 23 Apr 2019 13:36:18 +0530
      Finished:     Tue, 23 Apr 2019 13:36:18 +0530
    Ready:          False
    Restart Count:  1
    Requests:
      cpu:  100m
    Environment:
      MYSQL_ROOT_PASSWORD:  password
    Mounts:
      /var/lib/mysql from mysql-persistent-storage (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-jpkzg (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  mysql-persistent-storage:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  mysql-pv-claim
    ReadOnly:   false
  default-token-jpkzg:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-jpkzg
    Optional:    false
QoS Class:       Burstable
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  32s               default-scheduler                                  Successfully assigned default/mysql-fb75876c6-tk6ml to gke-mycluster-default-pool-b1c1d316-xv4v
  Normal   Pulling    31s               kubelet, gke-mycluster-default-pool-b1c1d316-xv4v  pulling image "mysql:5.6"
  Normal   Pulled     22s               kubelet, gke-mycluster-default-pool-b1c1d316-xv4v  Successfully pulled image "mysql:5.6"
  Normal   Pulled     4s (x2 over 18s)  kubelet, gke-mycluster-default-pool-b1c1d316-xv4v  Container image "mysql:5.6" already present on machine
  Normal   Created    3s (x3 over 18s)  kubelet, gke-mycluster-default-pool-b1c1d316-xv4v  Created container
  Warning  Failed     3s (x3 over 18s)  kubelet, gke-mycluster-default-pool-b1c1d316-xv4v  Error: failed to start container "mysql": Error response from daemon: error while creating mount source path '/mnt/data': mkdir /mnt/data: read-only file system
kubectl光伏索赔的结果

Name:          mysql-pv-claim
Namespace:     default
StorageClass:  manual
Status:        Bound
Volume:        mysql-pv-volume
Labels:        <none>
Annotations:   kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"mysql-pv-claim","namespace":"default"},"spec":{"accessModes":["R...
               pv.kubernetes.io/bind-completed=yes
               pv.kubernetes.io/bound-by-controller=yes
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      1Gi
Access Modes:  RWO
Events:        <none>
mysql.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
  clusterIP: None
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
          # Use secret in real usage
        - name: MYSQL_ROOT_PASSWORD
          value: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

这是因为您不需要在GKE上创建这些卷和StorageClass。如果您想使用minikube或kubeadm,那么这些yaml文件是完全有效的,但对于GKE来说就不是了,GKE可以自己处理一些手动步骤

您可以使用这个官方软件在GKE上运行mysql,或者只使用我编辑并在GKE上测试的文件

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-volumeclaim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
和mysql部署:

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
  clusterIP: None
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
          # Use secret in real usage
        - name: MYSQL_ROOT_PASSWORD
          value: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-volumeclaim

确保您阅读了链接指南,因为它解释了GKE的特定主题

您需要使用
kubectl descripe pods-l app=mysql
的输出更新您的问题,因为
无法打开日志文件
可能来自
kubelet
而不是您的Pod。如果没有更多详细信息,我们无法猜测是什么导致了
RunContainerError
。我已在问题中添加了详细信息。请通过运行:kubectl descripe pv kubectl descripe pvc done提供persistentvolume和persistentvolumeclaims的详细信息。我已在问题中补充了细节
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-volumeclaim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
  clusterIP: None
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
          # Use secret in real usage
        - name: MYSQL_ROOT_PASSWORD
          value: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-volumeclaim