LoginSignup
0
0

minikubeでローカルで作成したイメージを使う。

Last updated at Posted at 2024-04-14

導入

ローカル環境で、minikubeを使用している際、Docker Hubのようなコンテナイメージレジストリを使用せずに構築したいシチュエーションがありました。
調べながらやりましたが、苦戦したので備忘録的にメモを残しておこうと思います。

やりたいこと

このようなマニュフェストで、myapp:latestのようなローカル環境で適当に作成したイメージを使用してdeploymentしたい。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-web-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: go-web-app
  template:
    metadata:
      labels:
        app: go-web-app
    spec:
      containers:
        - name: go-web-app
          image: myapp:latest
          ports:
            - containerPort: 8080

だがしかし、現実はそううまくいかない...

user@shrimpTail:~/git_wsl/go_clean_architecture/k8s$ kubectl get pods --watch
NAME                          READY   STATUS         RESTARTS   AGE
go-web-app-6c7fbb6849-mkc9k   0/1     ErrImagePull   0          67s
go-web-app-6c7fbb6849-mkc9k   0/1     ImagePullBackOff   0          71s
go-web-app-6c7fbb6849-mkc9k   0/1     ErrImagePull       0          116s

なぜなのか

minikube もといkubectlでdeploymentオプションを使用した際、おそらくリモート上のコンテナイメージレジストリからタグが一致するイメージを探すのがデフォルトになっている模様。
なので、マニュフェストにこの項目の追加が必要。

imagePullPolicy: IfNotPresent

修正後全体像

サンプルコード(open属性なし)

(上に空行が必要)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-web-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: go-web-app
  template:
    metadata:
      labels:
        app: go-web-app
    spec:
      containers:
        - name: go-web-app
          image: myapp:latest
          ports:
            - containerPort: 8080
          imagePullPolicy: IfNotPresent # 追加

実行コマンド

eval $(minikube docker-env)
docker build -f Dockerfile -t myapp:latest .
kubectl rollout restart deployment/go-web-app

さいごに

後発者の参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0