先日、minikubeを使ってKubernetes環境を構築し、テスト用のコンテナを動作させるところまで記事にした。
次は自分でビルドしたDcokerのコンテナイメージをminikubeで起動させてみたいと思う。
本記事では、minikubeで構築したKubernetes環境にて、DockerのコンテナイメージをPodとして動かすための手順を記載する。
環境
以下に今回構築する各種ソフトウェアのバージョンを記載する。
- ホストOS : AlmaLinux 8.6 (GUI環境を含めインストールする)
- ホストDocker : 20.10.21
- minikube : 1.28.0
以下にminikubeの環境の構成概要図を記載する。
Dockerコンテナイメージ作成
1. コンテナイメージをビルドするためのDockerfileの準備
今回用意するコンテナイメージは、過去の記事で作成したSquidが動作するプロキシサーバ用コンテナイメージを使用する。このコンテナイメージをビルドしminikube上で起動させ、インターネット上のWeb閲覧ができることを確認する。
2. Dockerクライアントの接続先を変更
Dockerクライアントが接続するDockerをOS上のDocker(unix:///var/run/docker.sock
)ではなく、minikube上のDocker(tcp://192.168.49.2:2376
)に変更する。この作業を実施しないと、minikubeがコンテナをPullできず「ErrImagePull」や「ImagePullBackOff」のエラーとなりPodが起動できないので注意しよう。
Dockerクライアントの接続先は環境変数で指定されている。minikubeのコマンドを使うことで環境変数を設定解除及び設定することができる。
※厳密には設定のためのコマンドを表示するだけなので、eval
コマンドに渡して実行させる必要がある。
minikube用の環境変数を「設定」するコマンド
$ minikube -p minikube docker-env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.49.2:2376"
export DOCKER_CERT_PATH="/home/kubeuser/.minikube/certs"
export MINIKUBE_ACTIVE_DOCKERD="minikube"
# To point your shell to minikube's docker-daemon, run:
# eval $(minikube -p minikube docker-env)
minikube用の環境変数を「設定解除」するコマンド
$ minikube -p minikube docker-env -u
unset DOCKER_TLS_VERIFY;
unset DOCKER_HOST;
unset DOCKER_CERT_PATH;
unset MINIKUBE_ACTIVE_DOCKERD;
コマンド実行結果は以下の通りとなる。なお、すでに接続先がminikube上のDockerとなっていた場合は、本作業はスキップすること。
$ docker context ls
NAME DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock https://192.168.49.2:8443 (default) swarm
$ eval $(minikube -p minikube docker-env)
$ docker context ls
NAME DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default * Current DOCKER_HOST based configuration tcp://192.168.49.2:2376 https://192.168.49.2:8443 (default) swarm
Warning: DOCKER_HOST environment variable overrides the active context. To use a context, either set the global --context flag, or unset DOCKER_HOST environment variable.
3. コンテナイメージをビルド
コンテナイメージをビルドしよう。通常のDockerfileを使ったビルド手順と同じく、以下のようにDockerfileが配置されているディレクトリに移動したのち、docker buid
を実行すれば問題ない。
$ cd ~/almalinux-squid/
$ docker build -t almalinux-squid:8.7 .
ビルドしたコンテナイメージを確認しておく。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
almalinux-squid 8.7 7dffc71b1972 2 minutes ago 293MB
almalinux 8.7 acaca326f3b3 9 days ago 190MB
~(以下略)~
PodとServiceリソースの作成
1. コンテナイメージからPodを作成
今回のPodやServiceリソースを作成するためのnamespaceとして、「mynamespace」を作成する。
$ kubectl create namespace mynamespace
namespace/mynamespace created
$ kubectl get namespace
NAME STATUS AGE
default Active 63d
kube-node-lease Active 63d
kube-public Active 63d
kube-system Active 63d
mynamespace Active 6s
先ほどビルドしたコンテナイメージをデプロイし、Podを作成する。
$ kubectl create deployment almalinux-squid --image=almalinux-squid:8.7 -n=mynamespace
deployment.apps/almalinux-squid created
$ kubectl get pod -n=mynamespace
NAME READY STATUS RESTARTS AGE
almalinux-squid-7bcddbfd4b-8twsw 1/1 Running 0 10s
2. Serviceリソースを作成
PodにアクセスするためのServiceリソースを作成する。
$ kubectl expose deployment almalinux-squid --type=NodePort --port=8080 -n=mynamespace
service/almalinux-squid exposed
作成されたServiceリソースの情報を確認し、コンテナへ接続するURL(IPアドレスとポート番号)を確認してみよう。
$ kubectl get services almalinux-squid -n=mynamespace
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
almalinux-squid NodePort 10.98.44.98 <none> 8080:32622/TCP 32s
まず、TYPEがNodePortとなるので、minikubeのNodeのIPアドレスである「192.168.49.2」がアクセス対象のIPアドレスとなる。ポート番号は、サービスリソース作成時に決定されるが、今回は32622/TCPとなっていることがわかる。以上より、コンテナのSquidへの接続URLは、http://192.168.49.2:32622
となる。
接続先情報はServiceリソースの内容からも確認できるが、minikube
コマンドを使えばもっと簡単に確認することができる。
$ minikube service almalinux-squid --url -n=mynamespace
http://192.168.49.2:32622
3. 動作確認
先ほど確認したURLをminikubeが動作するLinux上のFirefoxのプロキシサーバとして設定する。
試しにGoogleに接続してみたとこと、問題なくプロキシ経由で表示することができた。
以上で、minikubeで構築したKubernetes環境にて、DockerコンテナイメージをPodとして動かすための手順は完了となる。
0 件のコメント:
コメントを投稿