Kubenetes上のMy SQLが起動しなくなった

Kubenetes上のMy SQLが起動できなくなった。

Podを再生成して、すぐにエラーになってしまう。
最悪なことにエラーログも出ておらず 原因がわからない。

原因調査

手で動かして確認するのがいいんだけど、
起動すらしないのでどうしたものかと悩んでしまった。

どうにかする方法がないかとぐぐる
Kubenetes MySQLのPod(Yaml)ファイル 内にcommandを定義することで、
MySQLのDockerのCMD※を上書きできることがわかった。

※コンテナ起動時にデフォルトで実行するコマンド

MySQLのDockerファイル

CMDでmysqldコマンド(mysqlデーモン起動コマンド)を記載

ENTRYPOINT [ \
  "prehook", \
    "add-server-id.sh", \
    "--", \
  "/entrypoint.sh" \
]

CMD ["mysqld"]
Kubenetes MySQL Podファイル

commandを追加して、コンテナ起動時にはシェルを動かして待機するようにした。

  template:
    metadata:
      labels:
        app: mysql-master
    spec:
      terminationGracePeriodSeconds: 600
      containers:
      - name: mysql
        image: XXXXXXXX
        imagePullPolicy: Always
        command: ["/bin/sh"]
        args: ["-c", "sleep 600 && cat /var/log/mysql/mysql-error.log > /dev/termination-log"]
コンテナにログイン

kubctlコマンドでPodを再デプロイ→コンテナにログイン
コンテナに入れるようになった

#kubectl delete -f mysql-master.yaml
#kubectl apply -f mysql-master.yaml

#kubectl get pods
NAME                               READY   STATUS         RESTARTS        AGE
mysql-master-0                     1/1     Running        0               9m


#kubectl exec --stdin --tty mysql-master-0 -- /bin/bash
root@mysql-master-0:/# 
原因判明

MySQL起動コマンドを打ってみるが反応なし ログフォルダを確認してみるとmysql-error.log が出力されていた

root@mysql-master-0:/# mysqld
root@mysql-master-0:/# cd /var/log/mysql
root@mysql-master-0:/var/log/mysql# ls
mysql-bin.index  mysql-error.log 

mysql-error.logを確認するとスペースがないとログが出ていた。

root@mysql-master-0:/var/log/mysql# cat mysql-error.log 
.
.
2023-02-09T06:23:33.696585+09:00 0 [ERROR] [MY-012640] [InnoDB] Error number 28 means 'No space left on device'

df コマンドを打ってみると/var/lib/mysqlが100%になっていることがわかった。 KubenetesのPersistant Volumeの容量を使い切ってしまっていた。

root@mysql-master-0:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay          95G   43G   52G  46% /
tmpfs            64M     0   64M   0% /dev
tmpfs            16G     0   16G   0% /sys/fs/cgroup
shm              64M     0   64M   0% /dev/shm
/dev/sda1        95G   43G   52G  46% /etc/hosts
/dev/sdp        3.9G  3.9G  288K 100% /var/lib/mysql
tmpfs           6.0G   12K  6.0G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs            16G     0   16G   0% /proc/acpi
tmpfs            16G     0   16G   0% /proc/scsi
tmpfs            16G     0   16G   0% /sys/firmware
解決

Persistant Volumeにパッチを当てて、容量を拡張

# kubenetes % kubectl get pvc
NAME                        STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
ramentweet-log-pv-claim     Pending                                                                        okteto-standard   203d
ramentweet-mysql-pv-claim   Bound     pvc-3a245f8b-1f10-48e8-b4ed-35673dc49beb   4Gi        RWO            okteto-standard   404d
# kubectl get pv 
Error from server (Forbidden): persistentvolumes is forbidden: User "system:serviceaccount:okteto:d54deb2f-213a-4b07-98d6-e4aaad41815b" cannot list resource "persistentvolumes" in API group "" at the cluster scope

# kubectl patch pvc ramentweet-mysql-pv-claim -p "{\"spec\":{\"resources\":{\"requests\":{\"storage\": \"10Gi\"}}}}"
persistentvolumeclaim/ramentweet-mysql-pv-claim patched

MySQL Podを再生成するとエラーにならず起動するようになった!

#kubectl delete -f mysql-master.yaml
#kubectl apply -f mysql-master.yaml