概要
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 command か docker-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$