😀
hello-minikube
はじめに
hello-minikube をやってみた。
簡単かと思いきや、2020/4/28 のコミット で誤記が埋め込まれていて混乱した。
イメージがHello worldを表示するものからHTTP Requestをechoするだけのものに変わっていて、何一つHello Worldが絶対出てこない手順になっている…。
前提条件
- minikubeのインストール手順に従ってminikube, kubectrlをインストール済であること。
k8sのコンテナ管理の構成
hello-minikube をやる前に、k8sの管理するコンテナの構成を確認する。
hello-minikubeはとにかく jargon が多く、そのままだと理解不能なので。
- Deployment
1つ以上のReplicaSetの集合。k8sのデプロイの最大単位。 - ReplicaSet
1つ以上に複製されたPodの集合。 - Pod
1つ以上のコンテナの集合。k8sのデプロイの最小単位。 - Service
外部からk8sの管理するコンテナにアクセスする最小単位。エンドポイント。 - Node
VMまたは物理サーバ。k8sのデプロイ先の最小単位。1つのPodは必ず1つの
Nodeにデプロイされる。 - Volume
永続データを保持するデータ領域。 - Secret
認証関係のデータを保持するデータ領域。パスワード等。
Minikubeクラスタの作成
-
minikubeを起動する。
$ minikube start 😄 Ubuntu 18.04 上の minikube v1.9.2 ✨ Using the docker driver based on existing profile 👍 Starting control plane node m01 in cluster minikube 🚜 Pulling base image ... 🔄 Restarting existing docker container for "minikube" ... 🐳 Docker 19.03.2 で Kubernetes v1.18.0 を準備しています... ▪ kubeadm.pod-network-cidr=10.244.0.0/16 E0506 10:06:08.828823 8108 kubeadm.go:331] Overriding stale ClientConfig host https://172.17.0.3:8443 with https://172.17.0.2:8443 🌟 アドオンを有効化しています: default-storageclass, storage-provisioner 🏄 Done! kubectl is now configured to use "minikube"
絵文字がいっぱい出てきてうざい。
-
ブラウザーでkubernetesダッシュボードを開く。
$ minikube dashboard 🔌 ダッシュボードを有効化しています... 🤔 Verifying dashboard health ... 🚀 プロキシを起動しています... 🤔 Verifying proxy health ... 🎉 Opening http://127.0.0.1:45967/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser... 既存のブラウザ セッションで開いています。
絵文字がいっぱい出てきて(以下略)
画面はこんな感じ。
Deploymentの作成
まずは、デプロイの最大単位であるDeployを作る。ReplicaSetやPodは、Deployment作成時にk8sが自動生成するようなので気にしなくて良い。
-
create
コマンドを使用してDeploymentを作成する。$ kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4 deployment.apps/hello-node created
-
Deploymentを確認する。
Serviceの作成
次に、Serviceを作成して、クライアントからアクセスできるようにする。
-
expose
コマンドでPodを公開する。kubectl expose deployment hello-node --type=LoadBalancer --port=8080
-
サービスをブラウザで表示する。
minikube service hello-node
-
サービスを
curl
から実行する。$ echo hogehoge | curl http://172.17.0.2:32053/ -d @- CLIENT VALUES: client_address=172.18.0.1 command=POST real path=/ query=nil request_version=1.1 request_uri=http://172.17.0.2:8080/ SERVER VALUES: server_version=nginx: 1.10.0 - lua: 10001 HEADERS RECEIVED: accept=*/* content-length=8 content-type=application/x-www-form-urlencoded host=172.17.0.2:32053 user-agent=curl/7.58.0 BODY: hogehoge
クリーンアップ
最後に、後始末。作ったServiceとDeploymentを削除する。
ReplicaSetやPodは、Deployment削除時にk8sが自動削除するようなので気にしなくて良い。
$ kubectl delete service hello-node
service "hello-node" deleted
$ kubectl delete deployment hello-node
deployment.apps "hello-node" deleted
Discussion