Kubernetes

minikubeのKubernetes でカスタムイメージを使ってPodを起動する方法について

概要

Kubernetes環境を簡単に使用できるminikubeでカスタムイメージを使ってコンテナを起動したくなったので、Dockerfile で作成したカスタムイメージでPODを起動する方法を調べてみました

環境

  • minikube version: 1.33.1
    • VM Driver :docker
    • Runtime:docker、crio
  • Ubuntu 22.04.4 LTS(WSL)
  • Kubernetes v1.30.0

調べる範囲

  • 調べないこと
    • プライベート・パブリックレジストリを使う方法
    • Dockerfile でイメージを作成する詳しい説明
  • 調べること
    • ローカルイメージをminikubeで起動したKubernetesで使用する方法

調べてみる

  • やり方ですが、調べてみるとランタイムやイメージのpush方法などの違いにより8パターンあるみたいですね
Method Supported Runtimes Performance Load Build 補足
docker-env command only docker good yes yes MinikubeのVMで動作しているDockerデーモンをローカルで使用できるようになる
cache command all ok yes no ローカルからイメージを直接minikubeにpushする。すべてのminikubeクラスターに自動的にpullされる
podman-env command only cri-o good yes yes MinikubeのVM上のPodmanをローカルで使用できるようになる
registry addon all ok yes no minikubeのレジストリアドオンを使用する
minikube ssh all best yes* yes* minikubeのVMにログインしてVM上で作業する
ctr/buildctl command only containerd good yes yes docker-env や podman-env に似ているがContainerd ランタイム専用
image load command all ok yes no ローカルからVMのコンテナ ランタイムと直接通信しイメージをロードさせる
image build command all ok no yes ローカルからVMのコンテナ ランタイムと直接通信しイメージをビルドする

詳細は以下URLを参照してください

まとめ

今回は以下組み合わせを試してみました。
※◯=利用できる

ローカル VM Driver Runtime image load command docker-env command podman-env command image build command
docker docker docker
docker docker crio

Runtimeがcrioの場合、この環境だとimage build 以外は、成功しませんでした

おそらく、VM Driverを変更しローカルでpodmanを使えるよにすれば利用できると思いますが、
今回は、簡単にローカルイメージを使いたかっただけなので、詳細までは調べませんでした

同じ環境でさくっとイメージを確認したい際には、
image load commanddocker-env commandが便利そうですね

やってみた結果のメモ

テスト用Dockerfile の準備

イメージを変更したことでわかりやすいよう、起動時にシェルスクリプトを実行して
メッセージを出力するようイメージを作成します

  • シェルスクリプトを作成
    • 文字列は検証する内容によりあとで適宜変更します

#環境準備
tech-0222@MSI:tmp$ cd /var/tmp/
tech-0222@MSI:tmp$
tech-0222@MSI:tmp$ mkdir sample-docker
tech-0222@MSI:tmp$
tech-0222@MSI:tmp$ cd sample-docker/
tech-0222@MSI:sample-docker$

#Podで実行するShellを準備
tech-0222@MSI:sample-docker$ vi hello.sh
tech-0222@MSI:sample-docker$
tech-0222@MSI:sample-docker$ cat hello.sh
#!/bin/ash
sleep 10
echo "minikube image load"
tech-0222@MSI:sample-docker$
  • Dockerfile を作成
#Dockerfile 準備
tech-0222@MSI:sample-docker$ vi Dockerfile
tech-0222@MSI:sample-docker$ cat Dockerfile
FROM alpine:latest

# 作業ディレクトリの作成
RUN mkdir /opt/shell

# hello.shをコンテナ内にコピー
COPY hello.sh /opt/shell/

# スクリプトに実行権限を付与
RUN chmod +x /opt/shell/hello.sh

# コンテナ起動時に実行するコマンドを指定
CMD ["/opt/shell/hello.sh"]
tech-0222@MSI:sample-docker$
  • ビルドしてイメージを作成

#イメージをビルド
tech-0222@MSI:sample-docker$
tech-0222@MSI:sample-docker$ docker build -t sample:latest .
[+] Building 2.4s (9/9) FINISHED                                                                                                 docker:default
 => [internal] load build definition from Dockerfile                                                                                       0.0s
 => => transferring dockerfile: 349B                                                                                                       0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                                           1.8s
 => [internal] load .dockerignore                                                                                                          0.0s
 => => transferring context: 2B                                                                                                            0.0s
 => [1/4] FROM docker.io/library/alpine:latest@sha256:0a4eaa0eecf5f8c050e5bba433f58c052be7587ee8af3e8b3910ef9ab5fbe9f5                     0.0s
 => [internal] load build context                                                                                                          0.0s
 => => transferring context: 199B                                                                                                          0.0s
 => CACHED [2/4] RUN mkdir /opt/shell                                                                                                      0.0s
 => [3/4] COPY hello.sh /opt/shell/                                                                                                        0.0s
 => [4/4] RUN chmod +x /opt/shell/hello.sh                                                                                                 0.4s
 => exporting to image                                                                                                                     0.1s
 => => exporting layers                                                                                                                    0.0s
 => => writing image sha256:6339d09dc1a2f1dda4b8cbb072f5d5e7fc484927a06e413be6be329b7d5a11d3                                               0.0s
 => => naming to docker.io/library/sample:latest                                                                                           0.0s
tech-0222@MSI:sample-docker$
tech-0222@MSI:sample-docker$

#イメージを確認
tech-0222@MSI:sample-docker$ docker image ls | grep sample
sample                        latest     6339d09dc1a2   8 minutes ago   7.8MB
tech-0222@MSI:sample-docker$

#動作確認
#Shellで設定したメッセージが出力されたらOK
tech-0222@MSI:sample-docker$ docker run --rm sample:latest
minikube image load
tech-0222@MSI:sample-docker$

image load commandをやってみる

  • テスト用のKubernetesClusterをminikubeで作成します

#Cluster作成
tech-0222@MSI:sample-docker$ minikube start -p test
😄  [test] minikube v1.33.1 on Ubuntu 22.04 (amd64)
✨  Automatically selected the docker driver. Other choices: kvm2, qemu2, ssh
📌  Using Docker driver with root privileges
👍  Starting "test" primary control-plane node in "test" cluster
🚜  Pulling base image v0.0.44 ...
🔥  Creating docker container (CPUs=2, Memory=3900MB) ...
🐳  Preparing Kubernetes v1.30.0 on Docker 26.1.1 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔗  Configuring bridge CNI (Container Networking Interface) ...
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "test" cluster and "default" namespace by default
tech-0222@MSI:sample-docker$

#確認
tech-0222@MSI:sample-docker$ minikube profile list
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
| Profile  | VM Driver | Runtime |      IP      | Port | Version | Status  | Nodes | Active Profile | Active Kubecontext |
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
| minikube | docker    | docker  | 192.168.58.2 | 8443 | v1.28.3 | Stopped |     1 | *              |                    |
| test     | docker    | docker  | 192.168.49.2 | 8443 | v1.30.0 | Running |     1 |                | *                  |
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
tech-0222@MSI:sample-docker$
  • Pod起動用のマニフェストを作成します
  • 設定ポイントは以下ですね
コメント
imagePullPolicy: IfNotPresent ローカルイメージを参照する設定
restartPolicy: Never シェルを実行後にコンテナが再起動しないように設定
image: docker.io/library/sample:latest 作成したイメージ名、タグを設定
tech-0222@MSI:~$ cd /tmp/
tech-0222@MSI:tmp$
tech-0222@MSI:tmp$ vi sample1.yaml
tech-0222@MSI:tmp$
tech-0222@MSI:tmp$ cat sample1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: sample1
spec:
  restartPolicy: Never
  containers:
  - name: my-container
    image: sample:latest
    imagePullPolicy: IfNotPresent
tech-0222@MSI:tmp$
  • イメージを共有前にPodのデプロイをしてみます
    • 想定通り、イメージがないのでエラーになりますね
#デプロイ
tech-0222@MSI:tmp$ kubectl apply -f sample1.yaml
pod/sample1 created
tech-0222@MSI:tmp$

#想定通りエラー
tech-0222@MSI:tmp$ kubectl get po
NAME      READY   STATUS             RESTARTS   AGE
sample1   0/1     ImagePullBackOff   0          16s
tech-0222@MSI:tmp$

tech-0222@MSI:tmp$ kubectl describe pod sample1
Name:             sample1
~~略~~
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  36s                default-scheduler  Successfully assigned default/sample1 to test
  Normal   Pulling    21s (x2 over 36s)  kubelet            Pulling image "sample:latest"
  Warning  Failed     19s (x2 over 34s)  kubelet            Failed to pull image "sample:latest": Error response from daemon: pull access denied for sample, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
  Warning  Failed     19s (x2 over 34s)  kubelet            Error: ErrImagePull
  Normal   BackOff    5s (x2 over 33s)   kubelet            Back-off pulling image "sample:latest"
  Warning  Failed     5s (x2 over 33s)   kubelet            Error: ImagePullBackOff
tech-0222@MSI:tmp$
  • コマンド「minikube image load 」を試してみます。
    • コマンドを実行する際には、minikubeのProfile名を-pで指定しないと上手くいきません

#イメージをminikubeにロードさせる
tech-0222@MSI:sample-docker$
tech-0222@MSI:sample-docker$ minikube image load sample:latest -p test

# minikube側のイメージ一覧に「sample:latest」があるのでOK
tech-0222@MSI:sample-docker$
tech-0222@MSI:sample-docker$ minikube image list -p test
registry.k8s.io/pause:3.9
registry.k8s.io/kube-scheduler:v1.30.0
registry.k8s.io/kube-proxy:v1.30.0
registry.k8s.io/kube-controller-manager:v1.30.0
registry.k8s.io/kube-apiserver:v1.30.0
registry.k8s.io/etcd:3.5.12-0
registry.k8s.io/coredns/coredns:v1.11.1
gcr.io/k8s-minikube/storage-provisioner:v5
docker.io/library/sample:latest
tech-0222@MSI:sample-docker$
  • PODをデプロイしてみる
    • minikubeのKubernetesクラスタのPodで作成したイメージが使えてますね

#デプロイ
tech-0222@MSI:tmp$ kubectl apply -f sample1.yaml
pod/sample1 created
tech-0222@MSI:tmp$

#実行を確認
#STATUSがCompletedであればOK
tech-0222@MSI:tmp$ kubectl get po
NAME      READY   STATUS      RESTARTS   AGE
sample1   0/1     Completed   0          6m21s
tech-0222@MSI:tmp$

#ログを確認
tech-0222@MSI:tmp$ kubectl logs sample1
minikube image load
tech-0222@MSI:tmp$

docker-env commandをやってみる

  • シェルを変更してdocker-env を試してみましょう
    • minikube docker-env コマンド実行時にProfile名を指定する必要がありますね

#シェルを編集
tech-0222@MSI:sample-docker$ vi hello.sh
tech-0222@MSI:sample-docker$ cat hello.sh
#!/bin/ash
sleep 10
echo "docker-env command"
tech-0222@MSI:sample-docker$

#設定前の状態
#minikubeのVMとして使用しているコンテナだけ確認できます
tech-0222@MSI:~$ docker ps
CONTAINER ID   IMAGE                                 COMMAND                  CREATED      STATUS       PORTS                                                                                                                                  NAMES
605da9f10747   gcr.io/k8s-minikube/kicbase:v0.0.44   "/usr/local/bin/entr…"   7 days ago   Up 3 hours   127.0.0.1:32787->22/tcp, 127.0.0.1:32786->2376/tcp, 127.0.0.1:32785->5000/tcp, 127.0.0.1:32784->8443/tcp, 127.0.0.1:32783->32443/tcp   test
tech-0222@MSI:~$

# eval $(minikube docker-env) を実行して連携
tech-0222@MSI:sample-docker$ eval $(minikube docker-env)
tech-0222@MSI:sample-docker$

#確認
#環境変数に設定されてないですね・・
tech-0222@MSI:~$ echo $MINIKUBE_ACTIVE_DOCKERD

tech-0222@MSI:~$

# クラスター名を指定すると成功
tech-0222@MSI:~$
tech-0222@MSI:~$ eval $(minikube docker-env -p test)
tech-0222@MSI:~$ echo $MINIKUBE_ACTIVE_DOCKERD
test
tech-0222@MSI:~$

#VM Driver上のdocker で起動しているコンテナが確認できますね
tech-0222@MSI:~$ docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED       STATUS       PORTS     NAMES
38ca70c11d3d   6e38f40d628d                "/storage-provisioner"   3 hours ago   Up 3 hours             k8s_storage-provisioner_storage-provisioner_kube-system_a538aab4-20bc-468b-9268-c44736ee237e_3
4c69248ad905   cbb01a7bd410                "/coredns -conf /etc…"   3 hours ago   Up 3 hours             k8s_coredns_coredns-7db6d8ff4d-5f4qt_kube-system_83993b85-0a46-480d-949b-18674bccd748_1
32fdb62fa3b0   a0bf559e280c                "/usr/local/bin/kube…"   3 hours ago   Up 3 hours             k8s_kube-proxy_kube-proxy-rm6pd_kube-system_dd05d784-8172-4c37-9c86-deda2f4b6027_1
ba94698ba4a3   registry.k8s.io/pause:3.9   "/pause"                 3 hours ago   Up 3 hours             k8s_POD_coredns-7db6d8ff4d-5f4qt_kube-system_83993b85-0a46-480d-949b-18674bccd748_1
d402d33e775c   registry.k8s.io/pause:3.9   "/pause"                 3 hours ago   Up 3 hours             k8s_POD_kube-proxy-rm6pd_kube-system_dd05d784-8172-4c37-9c86-deda2f4b6027_1
3d93f539a443   registry.k8s.io/pause:3.9   "/pause"                 3 hours ago   Up 3 hours             k8s_POD_storage-provisioner_kube-system_a538aab4-20bc-468b-9268-c44736ee237e_1
c3c2f265569d   c7aad43836fa                "kube-controller-man…"   3 hours ago   Up 3 hours             k8s_kube-controller-manager_kube-controller-manager-test_kube-system_a639b72a798f308fa1b7187c79db1637_1
fd7c77348e74   259c8277fcbb                "kube-scheduler --au…"   3 hours ago   Up 3 hours             k8s_kube-scheduler_kube-scheduler-test_kube-system_f447e8eb84104cb6d7c5835dc38aa171_1
8cbb4be7076c   c42f13656d0b                "kube-apiserver --ad…"   3 hours ago   Up 3 hours             k8s_kube-apiserver_kube-apiserver-test_kube-system_e16df32a551e063f1eb65a1d1899e03f_1
ce538290671e   3861cfcd7c04                "etcd --advertise-cl…"   3 hours ago   Up 3 hours             k8s_etcd_etcd-test_kube-system_9db3e9ee8a3bc9463a86d13804b017f0_1
873c4cc3789d   registry.k8s.io/pause:3.9   "/pause"                 3 hours ago   Up 3 hours             k8s_POD_kube-controller-manager-test_kube-system_a639b72a798f308fa1b7187c79db1637_1
1fc309bb1614   registry.k8s.io/pause:3.9   "/pause"                 3 hours ago   Up 3 hours             k8s_POD_kube-scheduler-test_kube-system_f447e8eb84104cb6d7c5835dc38aa171_1
fe86f84e07af   registry.k8s.io/pause:3.9   "/pause"                 3 hours ago   Up 3 hours             k8s_POD_etcd-test_kube-system_9db3e9ee8a3bc9463a86d13804b017f0_1
38268ca34c0c   registry.k8s.io/pause:3.9   "/pause"                 3 hours ago   Up 3 hours             k8s_POD_kube-apiserver-test_kube-system_e16df32a551e063f1eb65a1d1899e03f_1
tech-0222@MSI:~$
  • ターミナル上でイメージをビルドしてPodを起動してみます

#ビルド前のイメージを確認
tech-0222@MSI:~$ docker image ls | grep sample
sample                                    latest     d0b09164905e   6 days ago      7.8MB
tech-0222@MSI:~$

#イメージをビルド
tech-0222@MSI:sample-docker$ docker build -t sample:latest .
[+] Building 2.2s (9/9) FINISHED                                                                                                                                             docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                   0.0s
 => => transferring dockerfile: 349B                                                                                                                                                   0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                                                                                       1.8s
 => [internal] load .dockerignore                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                        0.0s
 => [1/4] FROM docker.io/library/alpine:latest@sha256:0a4eaa0eecf5f8c050e5bba433f58c052be7587ee8af3e8b3910ef9ab5fbe9f5                                                                 0.0s
 => [internal] load build context                                                                                                                                                      0.0s
 => => transferring context: 81B                                                                                                                                                       0.0s
 => CACHED [2/4] RUN mkdir /opt/shell                                                                                                                                                  0.0s
 => [3/4] COPY hello.sh /opt/shell/                                                                                                                                                    0.0s
 => [4/4] RUN chmod +x /opt/shell/hello.sh                                                                                                                                             0.2s
 => exporting to image                                                                                                                                                                 0.0s
 => => exporting layers                                                                                                                                                                0.0s
 => => writing image sha256:561e0e34b1392782d7ef897989ebdc70386be43a476dd4a733808b0e28320d51                                                                                           0.0s
 => => naming to docker.io/library/sample:latest                                                                                                                                       0.0s
tech-0222@MSI:sample-docker$

#ビルド後のイメージを確認
tech-0222@MSI:sample-docker$ docker image ls | grep sample
sample                                    latest     561e0e34b139   21 seconds ago   7.8MB
tech-0222@MSI:sample-docker$
  • PODをデプロイして確認してみます
    • メッセージが変わったので成功です

#起動していたPodを削除
tech-0222@MSI:tmp$ kubectl delete po sample1
pod "sample1" deleted
tech-0222@MSI:tmp$

#Podをデプロイ
tech-0222@MSI:tmp$ kubectl apply -f sample1.yaml
pod/sample1 unchanged
tech-0222@MSI:tmp$
tech-0222@MSI:tmp$ kubectl get pod
NAME      READY   STATUS      RESTARTS   AGE
sample1   0/1     Completed   0          3h
tech-0222@MSI:tmp$ kubectl logs sample1
minikube docker-env
tech-0222@MSI:tmp$

podman-env command をやってみる

  • Runtime が crio のクラスターを作成

tech-0222@MSI:~$ minikube profile list
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
| Profile  | VM Driver | Runtime |      IP      | Port | Version | Status  | Nodes | Active Profile | Active Kubecontext |
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
| minikube | docker    | docker  | 192.168.58.2 | 8443 | v1.28.3 | Stopped |     1 | *              |                    |
| test     | docker    | docker  | 192.168.49.2 | 8443 | v1.30.0 | Running |     1 |                | *                  |
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
tech-0222@MSI:~$
tech-0222@MSI:~$ minikube start \
  --network-plugin=cni \
  --enable-default-cni \
  --container-runtime=cri-o \
  --bootstrapper=kubeadm -p test-2
😄  [test-2] minikube v1.33.1 on Ubuntu 22.04 (amd64)
✨  Automatically selected the docker driver. Other choices: kvm2, qemu2, ssh
❗  With --network-plugin=cni, you will need to provide your own CNI. See --cni flag as a user-friendly alternative
E0817 17:17:37.233362  435261 start_flags.go:464] Found deprecated --enable-default-cni flag, setting --cni=bridge
📌  Using Docker driver with root privileges
👍  Starting "test-2" primary control-plane node in "test-2" cluster
🚜  Pulling base image v0.0.44 ...
💾  Downloading Kubernetes v1.30.0 preload ...
    > preloaded-images-k8s-v18-v1...:  376.27 MiB / 376.27 MiB  100.00% 2.13 Mi
🔥  Creating docker container (CPUs=2, Memory=3900MB) ...
🎁  Preparing Kubernetes v1.30.0 on CRI-O 1.24.6 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔗  Configuring bridge CNI (Container Networking Interface) ...
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "test-2" cluster and "default" namespace by default
tech-0222@MSI:~$
tech-0222@MSI:~$ minikube profile list
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
| Profile  | VM Driver | Runtime |      IP      | Port | Version | Status  | Nodes | Active Profile | Active Kubecontext |
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
| minikube | docker    | docker  | 192.168.58.2 | 8443 | v1.28.3 | Stopped |     1 | *              |                    |
| test     | docker    | docker  | 192.168.49.2 | 8443 | v1.30.0 | Running |     1 |                |                    |
| test-2   | docker    | crio    | 192.168.67.2 | 8443 | v1.30.0 | Running |     1 |                | *                  |
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
tech-0222@MSI:~$
  • minikube podman-env を試してみる
    • podman のインストール等の設定が必要そうなので、今回は詳細を調べません
# WSL側にpodman ないとやっぱりErrorになる
tech-0222@MSI:sample-docker$ eval $(minikube podman-env -p test-2)
tech-0222@MSI:sample-docker$
tech-0222@MSI:sample-docker$ podman-remote help
podman-remote: command not found
tech-0222@MSI:sample-docker$
tech-0222@MSI:sample-docker$ podman-remote virsion
podman-remote: command not found
tech-0222@MSI:sample-docker$
tech-0222@MSI:sample-docker$ podman --version
Command 'podman' not found, but can be installed with:
sudo apt install podman
tech-0222@MSI:sample-docker$
  • VM Driver が docker なので eval $(minikube docker-env)を試してみましたがダメですね
    • docker-envコマンドはdockerとcontainerdランタイムが使えるみたいです
tech-0222@MSI:sample-docker$ eval $(minikube docker-env -p test-2)
❌  Exiting due to MK_USAGE: the docker-env command only supports the docker and containerd runtimes
tech-0222@MSI:sample-docker$

#和訳
❌ MK_USAGEのため終了します: docker-envコマンドはdockerとcontainerdランタイムのみをサポートします

image build commandをやってみる

  • Runtime がcrio の環境で image build を試してみます
    • これならRuntime がcrioでも成功しました

#シェル変更
tech-0222@MSI:sample-docker$
tech-0222@MSI:sample-docker$ vi hello.sh
tech-0222@MSI:sample-docker$ cat hello.sh
#!/bin/ash
sleep 10
echo "minikube image build"
tech-0222@MSI:sample-docker$

# minikube 経由でビルド
tech-0222@MSI:sample-docker$ minikube image build -t sample2:latest . -p test-2
STEP 1/5: FROM alpine:latest
STEP 2/5: RUN mkdir /opt/shell
--> Using cache 751b12bf48aa4f34549c95ac90ce8753db8a5c1311510fe59a0f823f05a9a72c
--> 751b12bf48a
STEP 3/5: COPY hello.sh /opt/shell/
--> 1eec53e6b8e
STEP 4/5: RUN chmod +x /opt/shell/hello.sh
--> dce3e0ae739
STEP 5/5: CMD ["/opt/shell/hello.sh"]
COMMIT docker.io/library/sample2:latest
--> 0be2494b782
Successfully tagged docker.io/library/sample2:latest
0be2494b782b6c3de12e139fd2b6dd196ec6bcc00f4d5d930ed8bc251cfc8a1a
tech-0222@MSI:sample-docker$

#クラスターが管理しているイメージを確認
#イメージが作成できてますね
tech-0222@MSI:sample-docker$ minikube image list -p test-2
registry.k8s.io/pause:3.9
registry.k8s.io/kube-scheduler:v1.30.0
registry.k8s.io/kube-proxy:v1.30.0
registry.k8s.io/kube-controller-manager:v1.30.0
registry.k8s.io/kube-apiserver:v1.30.0
registry.k8s.io/etcd:3.5.12-0
registry.k8s.io/coredns/coredns:v1.11.1
gcr.io/k8s-minikube/storage-provisioner:v5
docker.io/library/sample2:latest
docker.io/library/alpine:latest
docker.io/kindest/kindnetd:v20240202-8f1494ea
tech-0222@MSI:sample-docker$ 

# PodのYAMLを編集
tech-0222@MSI:tmp$ cat sample1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: sample1
spec:
  restartPolicy: Never
  containers:
  - name: my-container
    image: docker.io/library/sample2:latest
    imagePullPolicy: IfNotPresent
tech-0222@MSI:tmp$

#デプロイ
tech-0222@MSI:tmp$ kubectl apply -f sample1.yaml
pod/sample1 created
tech-0222@MSI:tmp$
tech-0222@MSI:tmp$ kubectl get po
NAME      READY   STATUS    RESTARTS   AGE
sample1   1/1     Running   0          2s
tech-0222@MSI:tmp$
tech-0222@MSI:tmp$

#成功
tech-0222@MSI:tmp$ kubectl logs sample1
minikube image build
tech-0222@MSI:tmp$
tech-0222@MSI:tmp$

人気記事

1

Kubernetes kubectl rollout コマンドでdeploymentをロールバックしてみる 概要 kubectl rollout コマンドでデプロイ履歴を確認してロールバックするやり方 ...

2

  terraformのバージョン管理どうすればいいのか? terraformの複数バージョンを簡単に動かしたい terraformのインストール方法が分からない と、疑問を抱えている人の疑 ...

3

本記事では どんな環境にterraformをインストールできるの? terraformのインストールどうしたらいいの? terraformのどのバージョンをインストールすればいいの? と、困っている人 ...

4

Kubernetes kubectl version コマンドでバージョンを調べてみる 概要 kubectl version は、Kubernetes の Client、Serverのバージョンを確認 ...

-Kubernetes