Help us understand the problem. What is going on with this article?

kind(Kubernetes IN Docker)でローカルの Docker image を使う方法

More than 1 year has passed since last update.

TL;DR

以下のコマンドでローカルの Docker image を kind で作成した k8s にアップロードすることが可能です。

$ kind load docker-image IMAGE:TAG

アップロードした Docker image を使う際には imagePullPolicy: IfNotPresent もしくは imagePullPolicy: Never の設定を行ってください。また、既にアップロード済みの場合には Docker image が更新されることなく処理が終了する仕様なのでご注意ください。

はじめに

kind(Kubernetes IN Docker)でローカルの Docker image を使う方法を紹介します。
https://github.com/kubernetes-sigs/kind

動作確認

kind で k8s クラスタを作成します。

$ kind create cluster
Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.15.0) 🖼
 ✓ Preparing nodes 📦
 ✓ Creating kubeadm config 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
Cluster creation complete. You can now use the cluster with:

export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
kubectl cluster-info

ローカルで Docker image をビルドします。

$ cat Dockerfile
FROM busybox
ENTRYPOINT sh -c "echo 'Hi, kind!' && sleep 10000"

$ docker build -t my-image:tag .

ローカルの Docker image を kind にアップロードします。

$ kind load docker-image my-image:tag

kind で作成した k8s にアップロードした Docker image を Pod としてデプロイします。
restartPolicy: Always になっていると Docker image をリモートから取得するようになってしまうので、imagePullPolicy: IfNotPresent もしくは imagePullPolicy: Never の設定を行うことを忘れないでください。

$ cat manifest.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-image
spec:
  containers:
  - name: my-image
    image: my-image:tag
    imagePullPolicy: Never

$ export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
$ kubectl apply -f manifest.yaml

アップロードした Docker image が使えているか確認します。

$ kubectl get pods
NAME       READY   STATUS    RESTARTS   AGE
my-image   1/1     Running   0          10s

$ kubectl logs my-image
Hi, kind!

アップロードした Docker image が使えることが確認できました。

備考

既にアップロード済みの場合には Docker image が更新されることなく処理が終了する仕様なのでご注意ください。この仕様に関する詳細を知りたい方は以下の Issue を参照ください。
https://github.com/kubernetes-sigs/kind/issues/380

今回は Docker image のアップロードを紹介しましたが、以下のコマンドで docker save で Docker image のアーカイブをアップロードすることも可能です。

$ kind load image-archive IMAGE_ARCHIVE.tar

参考資料

ryysud
Software Engineer at Z Lab Corporation (Subsidiary of Yahoo! Japan). Previously Data Engineer at DMM.com LLC. Interested in Kubernetes, SPIFFE, SPIRE and OPA.
https://reboooot.net
zlab
技術で新しい世界へシフトする。
https://zlab.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした