【Kubernetes】ImagePullBackOffでハマった話
久しぶりの投稿となります。
ちょっとハマったポイントがあったので記事書きました。
やろうとしたこと
mysqlのイメージを(諸事情により)バージョン指定した上でデプロイしようとしました。
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: mysql
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: ********
- name: MYSQL_DATABASE
value: test_db
- name: MYSQL_USER
value: test_app
- name: MYSQL_PASSWORD
value: ********
resources: {}
status: {}
何が起きたか
kubectl applyでデプロイ後、Podの状態を確認してみます。
kubectl get pods -n database
NAME READY STATUS RESTARTS AGE
mysql-58f55bdbf8-fs4jp 0/1 ImagePullBackOff 0 8m44s
ん・・・ImagePullBackOff・・・?
というわけで詳細を確認します。
kubectl describe pod mysql-58f55bdbf8-fs4jp -n database
(中略)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 9m53s default-scheduler Successfully assigned database/mysql-58f55bdbf8-fs4jp to docker-desktop
Normal Pulling 8m6s (x4 over 9m53s) kubelet Pulling image "mysql:5.7"
Warning Failed 8m1s (x4 over 9m48s) kubelet Failed to pull image "mysql:5.7": no matching manifest for linux/arm64/v8 in the manifest list entries
Warning Failed 8m1s (x4 over 9m48s) kubelet Error: ErrImagePull
Warning Failed 7m50s (x6 over 9m48s) kubelet Error: ImagePullBackOff
Normal BackOff 4m51s (x18 over 9m48s) kubelet Back-off pulling image "mysql:5.7"
ErrImagePullとなっており、コンテナイメージをPullできていないようです。
なぜエラーになったのか。
いろいろ調べてみたところ、このMacBookのアーキテクチャに原因があるようです。
このMacBookはApple SiliconのM2プロセッサを搭載しています。IntelCPUなどとはアーキテクチャが異なるため、このアーキに対応していないコンテナイメージでは正しく稼動しないようです。
コンテナ含めて技術の勉強目的に買ったのですが、、、ちょびっと後悔。
対応策
このアーキテクチャに対応しているイメージを探し、そのハッシュタグをマニフェストファイルに指定することでうまくいきました。
(略)
containers:
- image: mysql@sha256:6d5a11994be8ca5e4cfaf4d370219f6eb6ef8fb41d57f9ed1568a93ffd5471ef
name: mysql
(略)
kubectl apply でデプロイ後、Podの状態を確認。
kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-6bbbdf8b88-zp2fk 1/1 Running 0 9s
ちゃんとRunningになってますね。一安心。
まとめ
MacでもDockerDesktopをインストールできるからコンテナ開発には特に支障ないだろうと思ってましたが甘かったです。まさかこんなところに落とし穴があるとは、、、また一つ勉強になりました。