GKE 可用的 pod 磁盘大小和卷不同

问题描述 投票:0回答:1

我有一个 mysql 部署,其中有一个需要存储的 pod。这就是为什么它通过 pvc 在 /var/lib/mysql 上绑定到 250G 容量的卷。在容器中执行并检查可用磁盘大小,这些值不会相加:在 /var/lib/mysql 上,它显示只有 9.5G 可用,而不是 250G。

在 linux 容器内执行 df 显示磁盘总大小仅为 9.5G,已使用 4%:

nim@DESKTOP-FOASM6G:/home$ kubectl exec mysql-7947979f68-74plp -- df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay          95G  2.5G   92G   3% /
tmpfs            64M     0   64M   0% /dev
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/sda1        95G  2.5G   92G   3% /etc/hosts
shm              64M     0   64M   0% /dev/shm
/dev/sdb        9.9G  307M  9.5G   4% /var/lib/mysql
tmpfs           2.4G   12K  2.4G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs           2.0G     0  2.0G   0% /proc/acpi
tmpfs           2.0G     0  2.0G   0% /proc/scsi
tmpfs           2.0G     0  2.0G   0% /sys/firmware

在 Linux 容器内执行 lsblk 显示正确的 233Gi 磁盘大小,但缺少使用信息:

nim@DESKTOP-FOASM6G:/home$ kubectl exec -it mysqltest-5566cb6985-4rzcw -- lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda       8:0    0  100G  0 disk
|-sda1    8:1      95.9G  0 part /etc/resolv.conf
|-sda2    8:2    0   16M  0 part
|-sda3    8:3    0    2G  0 part
|-sda4    8:4    0   16M  0 part
|-sda5    8:5    0    2G  0 part
|-sda6    8:6       512B  0 part
|-sda7    8:7    0  512B  0 part
|-sda8    8:8        16M  0 part
|-sda9    8:9    0  512B  0 part
|-sda10   8:10   0  512B  0 part
|-sda11   8:11        8M  0 part
`-sda12   8:12   0   32M  0 part
sdb       8:16   0  233G  0 disk /var/lib/mysql

Mysql Pod 描述:

nim@DESKTOP-FOASM6G:~$ kubectl describe pod mysql-7947979f68-74plp
Name:         mysql-7947979f68-74plp
Namespace:    default
Priority:     0
Node:         gke-sblice-clust-pool-1-c1994f74-ueyy/10.156.15.207
Start Time:   Wed, 19 Jul 2023 13:18:04 +0200
Labels:       app=sql
              pod-template-hash=7947979f68
Annotations:  <none>
Status:       Running
IP:           10.16.1.11
IPs:
  IP:           10.16.1.11
Controlled By:  ReplicaSet/mysql-7947979f68
Containers:
  mysql:
    Container ID:   containerd://c1cd6e60c0f20956ca4146c315dd0665f2d1bb2eee0351e719a813a2ca62d87c
    Image:          mysql:5.6
    Image ID:       docker.io/library/mysql@sha256:20575ecebe6216036d25dab5903808211f1e9ba63dc7825ac20cb975e34cfcae
    Port:           3306/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Wed, 19 Jul 2023 13:18:06 +0200
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     1
      memory:  2500M
    Requests:
      cpu:     100m
      memory:  512Mi
    Liveness:  exec [bash -c mysqladmin -uroot -p$MYSQL_ROOT_PASSWORD ping
] delay=30s timeout=5s period=10s #success=1 #failure=3
    Readiness:  exec [bash -c mysql -h127.0.0.1 -uroot -p$MYSQL_ROOT_PASSWORD -e'SELECT 1'
] delay=5s timeout=1s period=2s #success=1 #failure=3
    Environment:
      MYSQL_ROOT_PASSWORD:  <set to the key 'MYSQL_ROOT_PASSWORD' in secret 'mysql-secrets'>  Optional: false
      MYSQL_DATABASE:       wordpress
      MYSQL_USER:           <set to the key 'MYSQL_USER' of config map 'mysql-config'>   Optional: false
      MYSQL_PASSWORD:       <set to the key 'MYSQL_PASSWORD' in secret 'mysql-secrets'>  Optional: false
    Mounts:
      /var/lib/mysql from regional-storage-180723 (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-4qncz (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  regional-storage-180723:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  regional-storage-pvc-180723
    ReadOnly:   false
  kube-api-access-4qncz:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:                      <none>

此容器绑定到 PVC,并带有描述:

nim@DESKTOP-FOASM6G:/home$ kubectl describe pvc regional-storage-pvc-180723
Name:          regional-storage-pvc-180723
Namespace:     default
StorageClass:  normal-storageclass
Status:        Bound
Volume:        pvc-e5baeec9-435d-46b8-a442-179d54c023e6
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: pd.csi.storage.gke.io
               volume.kubernetes.io/selected-node: gke-sblice-clust-pool-1-c1994f74-ueyy
               volume.kubernetes.io/storage-provisioner: pd.csi.storage.gke.io
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      233Gi
Access Modes:  RWO
VolumeMode:    Filesystem
DataSource:
  APIGroup:  snapshot.storage.k8s.io
  Kind:      VolumeSnapshot
  Name:      snapshot14072023
Used By:     mysql-7947979f68-74plp
Events:      <none>

PV本身描述为:

nim@DESKTOP-FOASM6G:/home$ kubectl describe pv pvc-e5baeec9-435d-46b8-a442-179d54c023e6
Name:              pvc-e5baeec9-435d-46b8-a442-179d54c023e6
Labels:            <none>
Annotations:       pv.kubernetes.io/provisioned-by: pd.csi.storage.gke.io
                   volume.kubernetes.io/provisioner-deletion-secret-name:
                   volume.kubernetes.io/provisioner-deletion-secret-namespace:
Finalizers:        [kubernetes.io/pv-protection external-attacher/pd-csi-storage-gke-io]
StorageClass:      normal-storageclass
Status:            Bound
Claim:             default/regional-storage-pvc-180723
Reclaim Policy:    Retain
Access Modes:      RWO
VolumeMode:        Filesystem
Capacity:          233Gi
Node Affinity:
  Required Terms:
    Term 0:        topology.gke.io/zone in [europe-west3-b]
    Term 1:        topology.gke.io/zone in [europe-west3-c]
Message:
Source:
    Type:              CSI (a Container Storage Interface (CSI) volume source)
    Driver:            pd.csi.storage.gke.io
    FSType:            ext4
    VolumeHandle:      projects/sblice/regions/europe-west3/disks/pvc-e5baeec9-435d-46b8-a442-179d54c023e6
    ReadOnly:          false
    VolumeAttributes:      storage.kubernetes.io/csiProvisionerIdentity=1689594187853-2313-pd.csi.storage.gke.io
Events:                <none>

来自容器的日志:

nim@DESKTOP-FOASM6G:/home$ kubectl logs mysql-66fc8c8d48-v7fzd
2023-08-01 15:42:15+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.6.51-1debian9 started.
2023-08-01 15:42:15+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2023-08-01 15:42:15+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.6.51-1debian9 started.
2023-08-01 15:42:16 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2023-08-01 15:42:16 0 [Note] mysqld (mysqld 5.6.51) starting as process 1 ...
2023-08-01 15:42:16 1 [Note] Plugin 'FEDERATED' is disabled.
2023-08-01 15:42:16 1 [Note] InnoDB: Using atomics to ref count buffer pool pages
2023-08-01 15:42:16 1 [Note] InnoDB: The InnoDB memory heap is disabled
2023-08-01 15:42:16 1 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2023-08-01 15:42:16 1 [Note] InnoDB: Memory barrier is not used
2023-08-01 15:42:16 1 [Note] InnoDB: Compressed tables use zlib 1.2.11
2023-08-01 15:42:16 1 [Note] InnoDB: Using Linux native AIO
2023-08-01 15:42:16 1 [Note] InnoDB: Using CPU crc32 instructions
2023-08-01 15:42:16 1 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2023-08-01 15:42:16 1 [Note] InnoDB: Completed initialization of buffer pool
2023-08-01 15:42:16 1 [Note] InnoDB: Highest supported file format is Barracuda.
2023-08-01 15:42:16 1 [Note] InnoDB: 128 rollback segment(s) are active.
2023-08-01 15:42:16 1 [Note] InnoDB: Waiting for purge to start
2023-08-01 15:42:16 1 [Note] InnoDB: 5.6.51 started; log sequence number 11955998372
2023-08-01 15:42:16 1 [Note] RSA private key file not found: /var/lib/mysql//private_key.pem. Some authentication plugins will not work.
2023-08-01 15:42:16 1 [Note] RSA public key file not found: /var/lib/mysql//public_key.pem. Some authentication plugins will not work.
2023-08-01 15:42:16 1 [Note] Server hostname (bind-address): '*'; port: 3306
2023-08-01 15:42:16 1 [Note] IPv6 is available.
2023-08-01 15:42:16 1 [Note]   - '::' resolves to '::';
2023-08-01 15:42:16 1 [Note] Server socket created on IP: '::'.
2023-08-01 15:42:16 1 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2023-08-01 15:42:16 1 [Warning] 'proxies_priv' entry '@ root@mysql-5c96657748-fv26w' ignored in --skip-name-resolve mode.
2023-08-01 15:42:16 1 [Note] Event Scheduler: Loaded 0 events
2023-08-01 15:42:16 1 [Note] mysqld: ready for connections.
Version: '5.6.51'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

有关存储类别的信息:

nim@DESKTOP-FOASM6G:/home$ kubectl describe storageclass normal-storageclass
Name:            normal-storageclass
IsDefaultClass:  No
Annotations:     kubectl.kubernetes.io/last-applied-configuration={"allowVolumeExpansion":true,"allowedTopologies":[{"matchLabelExpressions":[{"key":"topology.gke.io/zone","values":["europe-west3-b","europe-west3-c"]}]}],"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"name":"normal-storageclass"},"parameters":{"replication-type":"regional-pd","type":"pd-standard"},"provisioner":"pd.csi.storage.gke.io","reclaimPolicy":"Retain","volumeBindingMode":"WaitForFirstConsumer"}

Provisioner:           pd.csi.storage.gke.io
Parameters:            replication-type=regional-pd,type=pd-standard
AllowVolumeExpansion:  True
MountOptions:          <none>
ReclaimPolicy:         Retain
VolumeBindingMode:     WaitForFirstConsumer
AllowedTopologies:
  Term 0:              topology.gke.io/zone in [europe-west3-b, europe-west3-c]
Events:                <none>

我的部署和 PVC 的 yaml 配置:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: sql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: sql
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: topology.gke.io/zone
                operator: NotIn
                values:
                - europe-west3-a
      containers:
      - image: mysql:5.6
        name: mysql
        env:
          # Use secret in real usage
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secrets
              key: MYSQL_ROOT_PASSWORD
        - name: MYSQL_DATABASE
          value: wordpress
        - name: MYSQL_USER
          valueFrom:
            configMapKeyRef:
              name: mysql-config
              key: MYSQL_USER
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secrets
              key: MYSQL_PASSWORD
        resources:
          limits:
            #cpu: "1000m"
            #memory: "2.5G"
            cpu: "500m"
            memory: "1000M"
          requests:
            cpu: "500m"
            memory: "500M"
        readinessProbe:
          exec:
            command:
            - bash
            - "-c"
            - |
              mysql -h127.0.0.1 -uroot -p$MYSQL_ROOT_PASSWORD -e'SELECT 1'
          initialDelaySeconds: 5
          periodSeconds: 2
          timeoutSeconds: 1
        livenessProbe:
          exec:
            command:
            - bash
            - "-c"
            - |
              mysqladmin -uroot -p$MYSQL_ROOT_PASSWORD ping
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: regional-storage-180723
          mountPath: /var/lib/mysql
        #nodeSelector:
        #  location: pv
      volumes:
      - name: regional-storage-180723
        persistentVolumeClaim:
          #change claimName to bigger disc created by snapshot in case of need
          claimName: regional-storage-pvc-180723

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: regional-storage-pvc-180723
spec:
  dataSource:
    name: snapshot14072023
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  storageClassName: normal-storageclass
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 250G

Kubectl 告诉我我安装了 250G 存储空间,并且在 pod 内(使用 df -h 服务)它告诉我我有 9.5G。我现在有多少可用磁盘空间?我需要做什么才能真正正确安装250G磁盘空间?如果我有 250G,我该用什么方法来检查磁盘空间使用情况以及如何设置限制?因为 GKE 控制台监控还告诉我,作为指标,我的磁盘空间要少得多。

google-kubernetes-engine monitoring metrics mounted-volumes
1个回答
0
投票

根据上一篇文章中的Michelle。您可能需要检查 PVC 是否未安装到您的容器中。因为您实际上可能没有在容器的volumeMounts中指定PVC。

这里是参考文档,您也可以查看。

© www.soinside.com 2019 - 2024. All rights reserved.