2023年2月18日土曜日

minikubeで構築したKubernetes環境にて、DockerのコンテナイメージをPodとして動かす

先日、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 件のコメント:

コメントを投稿

人気の投稿