はじめに
コンテナの開発環境を構築する際のメモ。 Minikubeを構築して、ローカルのコンテナイメージをデプロイするまでの手順を残しておく。
環境
$ cat /etc/os-release | grep PRETTY_NAME PRETTY_NAME="Ubuntu 20.04.4 LTS" $ uname -srvm Linux 5.13.0-39-generic #44~20.04.1-Ubuntu SMP Thu Mar 24 16:43:35 UTC 2022 x86_64 $ docker version Client: Docker Engine - Community Version: 20.10.14 (略) Server: Docker Engine - Community Engine: Version: 20.10.14 (略)
手順
(1) Minikubeのインストール
インストール方法はいくつかあるが、今回はDebian packageを利用する。 以下のコマンドを実行。
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb $ sudo dpkg -i minikube_latest_amd64.deb
詳細はこちら。
(2) kubectlのインストール
インストール方法はいくつかあるが、今回はsnapを利用する。 以下のコマンドを実行。
$ sudo snap install kubectl --classic
詳細はこちら。
(3) Minikubeの起動
以下のコマンドを実行。
$ minikube start 😄 Ubuntu 20.04 上の minikube v1.25.2 ✨ docker ドライバーが自動的に選択されました。他の選択肢: kvm2, ssh, none 👍 minikube クラスター中のコントロールプレーンの minikube ノードを起動しています 🚜 ベースイメージを取得しています... 💾 Kubernetes v1.23.3 のダウンロードの準備をしています > gcr.io/k8s-minikube/kicbase: 379.06 MiB / 379.06 MiB 100.00% 169.59 KiB > preloaded-images-k8s-v17-v1...: 505.68 MiB / 505.68 MiB 100.00% 220.72 K 🔥 docker container (CPUs=2, Memory=3900MB) を作成しています... 🐳 Docker 20.10.12 で Kubernetes v1.23.3 を準備しています... ▪ kubelet.housekeeping-interval=5m ▪ 証明書と鍵を作成しています... ▪ コントロールプレーンを起動しています... ▪ RBAC のルールを設定中です... 🔎 Kubernetes コンポーネントを検証しています... ▪ gcr.io/k8s-minikube/storage-provisioner:v5 イメージを使用しています 🌟 有効なアドオン: storage-provisioner, default-storageclass 🏄 完了しました! kubectl が「"minikube"」クラスタと「"default"」ネームスペースを使用するよう構成されました
(4) ダッシュボードで動作確認
以下のコマンドを実行。
$ minikube dashboard 🔌 ダッシュボードを有効化しています... ▪ kubernetesui/metrics-scraper:v1.0.7 イメージを使用しています ▪ kubernetesui/dashboard:v2.3.1 イメージを使用しています 🤔 ダッシュボードの状態を検証しています... 🚀 プロキシーを起動しています... 🤔 プロキシーの状態を検証しています... 🎉 デフォルトブラウザーで http://127.0.0.1:35159/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ を開いています... 既存のブラウザ セッションで開いています。
デフォルトのブラウザが自動的に起動されて、以下のようにダッシュボードが表示される。 まだ何もデプロイしていないので「表示するものがありません」とメッセージが出ている。
(5) テスト用のWebサーバのイメージを作成
まず、作成するコンテナイメージをMinikubeが認識できるようにしなければならない。 その方法はいくつかあるが、今回は「docker-env command」という方法を採用する。 以下のコマンドを実行する。
$ eval $(minikube docker-env)
詳細はこちら。
次に、以下の内容でDockerfileを作成する。 Ningxのドキュメントルートに、hello, world! を表示するだけのHTMLを配置している。
FROM nginx:1.21 RUN echo "<!DOCTYPE html><html><body>hello, world!</body></html>" > /usr/share/nginx/html/index.html
そして、以下のコマンドを実行して、コンテナイメージを作成する。
$ docker build --tag test-web:1.0.0 .
(6) Minikubeにデプロイ
以下の内容でmanifest.yml
を作成する。
--- apiVersion: v1 kind: Service metadata: name: test-web-service spec: type: NodePort selector: app: test-web ports: - protocol: TCP port: 80 targetPort: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: test-web-deployment labels: app: test-web spec: replicas: 1 selector: matchLabels: app: test-web template: metadata: labels: app: test-web spec: containers: - name: test-web image: test-web:1.0.0 ports: - containerPort: 80
このマニフェストファイルをMinikubeに適用する。
$ kubectl apply -f manifest.yml
(7) 動作確認
以下のコマンドを実行して、アクセス用のURLを取得する。
$ minikube service test-web-service --url http://192.168.49.2:32219
WebブラウザでこのURLにアクセスすると、以下のようにhello, world!が表示される。
ダッシュボードを確認すると、デプロイメント、ポッド、レプリカセットが作成されていることを確認できる。