- Hello Minikube とは
- Minikube とは
- Mac に Minikube と kubectl をインストール
- Minikube の起動
- Kubernetes のノードと kubectl
- Pod と Deployment
- Deployment の作成
- Service を作成してコンテナにアクセス
- アドオンについて
- Kubernetes クラスタ上のリソースの削除
- Minikube の終了
Hello Minikube とは
Kubernetes 公式の、一番最初のチュートリアルです。とりあえず Kubernetes を動かしてみよう、というやつ。
https://kubernetes.io/ja/docs/tutorials/hello-minikube/
Minikube とは
Minikube とは、ローカルのPCなどにインストールして動かす、シンプルな Kubernetes クラスタです。
今回は Minikube をつかって Mac 上に Kubernetes クラスタを立ち上げ、そこにデプロイするということをやります。
Mac に Minikube と kubectl をインストール
今回は Mac に Minikube と kubectl をインストールします。
kubectl は、Kubernetes クラスタに命令を送って、アプリケーションを操作するための CLI です。
両方とも brew でインストールします。
brew install kubectl brew install minikube
Minikube の起動
minikube start
コマンドで Kubernetes クラスタが起動します。
特に何も指定しない場合は、 Docker で Kubernetes クラスタが立ち上がるようです。
$ minikube start 😄 Darwin 10.14.6 上の minikube v1.21.0 ✨ dockerドライバーが自動的に選択されました。他の選択肢: hyperkit, virtualbox, ssh 👍 コントロールプレーンのノード minikube を minikube 上で起動しています 🚜 イメージを Pull しています... 💾 Kubernetes v1.20.7 のダウンロードの準備をしています > preloaded-images-k8s-v11-v1...: 492.20 MiB / 492.20 MiB 100.00% 30.52 Mi > gcr.io/k8s-minikube/kicbase...: 359.09 MiB / 359.09 MiB 100.00% 10.88 Mi 🔥 docker container (CPUs=2, Memory=3888MB) を作成しています... 🐳 Docker 20.10.7 で Kubernetes v1.20.7 を準備しています... ▪ 証明書と鍵を作成しています... ▪ Control Plane を起動しています... ▪ RBAC のルールを設定中です... 🔎 Kubernetes コンポーネントを検証しています... ▪ イメージ gcr.io/k8s-minikube/storage-provisioner:v5 を使用しています 🌟 有効なアドオン: default-storageclass, storage-provisioner 🏄 完了しました! kubectl が「"minikube"」クラスタと「"default"」ネームスペースを使用するよう構成されました
ちなみに minikube dashboard
とすると、ブラウザでダッシュボードがみられます。今回は使いません。
Kubernetes のノードと kubectl
Kubernetes クラスタは、 ノード の集合でできています。
ノードにはマスターノードとワーカーノードがあります。
マスターノードはKubernetesクラスタを管理しているノード、ワーカーノードは、アプリケーションがデプロイされるノードです。
Kubernetes クラスタには Kubernetes API という API が生えており、 kubectl はこの API を叩くことで、クラスタの管理やデプロイなどを実行します。
Pod と Deployment
Pod とは、いくつかの Docker コンテナが集まったようなものです。イメージとしては、1つのアプリケーションが1つの Pod に対応し、その Pod の中では、 Web サーバーのコンテナやアプリケーションのコンテナがあるイメージ。
Pod はどこかのノードで動いています。一つのノードで、複数の Pod を動かすことができます。
Deployment とは、
- Pod の中にどのようなコンテナを起動するか
- どんなイメージを利用するか
- いくつの Pod を起動するか
といったことを定義したものです。
Deployment の作成
Deployment を作成すると、その Deployment の定義を元に、 Kubernetes クラスタにアプリケーションが立ち上がります。
kubectl
コマンドを利用し、
hello-node
という名前のデプロイ定義を作成しk8s.gcr.io/echoserver:1.4
というイメージをもとにアプリケーションを立ち上げます
$ kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
deployment.apps/hello-node created
get deployments や get pods を叩くと、なんとなく起動していることがわかります。ここでは、細かい数字の意味には触れません。
$ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE hello-node 1/1 1 1 30s $ kubectl get pods NAME READY STATUS RESTARTS AGE hello-node-7567d9fdc9-b4dcr 1/1 Running 0 3m36s
ちなみに、 kubectl config view
としるつお、どのような定義で起動しているのかがわかります。
Service を作成してコンテナにアクセス
Deployment を作成して、コンテナは立ち上がりましたが、現状だと Kubernetes クラスタの中からしかアクセスできません(もちろん Mac からもアクセスできません)。
アクセスできるようにするには、 Service というものを作成し、外から Pods にアクセスできるようにする必要があります。
公開するには、 kubectl expose を使います。type は LoadBalancer を使います(細かい説明はここではしません)。
$ kubectl expose deployment hello-node --type=LoadBalancer --port=8080 service/hello-node exposed
get services すると、 LoadBalancer が増えていることがわかります。
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.111.83.137 <pending> 8080:32737/TCP 36s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h53m
minikube service コマンドを実行すると、どの URL でアクセスできるかわかります。
$ minikube service hello-node |-----------|------------|-------------|---------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|------------|-------------|---------------------------| | default | hello-node | 8080 | http://192.168.49.2:32737 | |-----------|------------|-------------|---------------------------| 🏃 Starting tunnel for service hello-node. |-----------|------------|-------------|------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|------------|-------------|------------------------| | default | hello-node | | http://127.0.0.1:62563 | |-----------|------------|-------------|------------------------| 🎉 Opening service default/hello-node in default browser... ❗ Dockerドライバーをdarwin上で動かしているため、実行するにはターミナルを開く必要があります。
http://127.0.0.1:62563 にアクセスすると、レスポンスが帰ってきます。
アドオンについて
Kubernetes クラスタでは様々なアドオンが使えて、チュートリアルでは metrics-server という、多分メトリクスを見られるようなアドオンを追加&削除しているのですが、ここでは省略します。
Kubernetes クラスタ上のリソースの削除
Service や Deployment の削除を行います。
$ kubectl delete service hello-node service "hello-node" deleted $ kubectl delete deployment hello-node deployment.apps "hello-node" deleted
Minikube の終了
Minikube が動いている VM を停止します。
$ minikube stop ✋ ノード "minikube" を停止しています... 🛑 SSH 経由で「minikube」の電源をオフにしています... 🛑 1台のノードが停止しました。
Minikube が動いていた Docker コンテナを削除します。
$ minikube delete 🔥 docker の「minikube」を削除しています... 🔥 コンテナ "minikube" を削除しています... 🔥 /Users/yoshiyuki_sakamoto/.minikube/machines/minikube を削除しています... 💀 クラスタ "minikube" の全てのトレースを削除しました。
以上でチュートリアル「Hello Minikube」は終了です。