minikubeでkubernetesを起動してみる

minikubeでkubernetesを起動してみたメモです

そろそろkubernetesを触れておこうと思って、チュートリアルをやってみようと思います。
https://minikube.sigs.k8s.io/docs/start/
https://kubernetes.io/ja/docs/setup/learning-environment/minikube/

下記バージョンで試してみます。

minikube

パブリッククラウドのマネージドkubernetesを利用するのは敷居が高いので、
出来ることが制限されますが、ローカルで試せるminikubeを使用してみます。

https://minikube.sigs.k8s.io/docs/start/

install

公式から下記コマンドでインストールします

❯ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
❯ sudo install minikube-darwin-amd64 /usr/local/bin/minikube

確認

❯ minikube version
minikube version: v1.25.2
commit: 362d5fdc0a3dbee389b3d3f1034e8023e72bd3a7

kubectl

kubernetesCLIであるkubectlをインストールします。
brewでインストールします

❯ brew install kubectl
❯ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.5", GitCommit:"5c99e2ac2ff9a3c549d9ca665e7bc05a3e18f07e", GitTreeState:"clean", BuildDate:"2021-12-16T08:38:33Z", GoVersion:"go1.16.12", Compiler:"gc", Platform:"darwin/amd64"}

起動

minikubeを起動します。
kubernetesのバージョンを指定することもできますが、何も指定しないと1.23.3が起動しました。

❯ minikube start
😄  Darwin 10.14.6 上の minikube v1.25.2
✨  docker ドライバーが自動的に選択されました。他の選択肢: hyperkit, virtualbox, ssh
👍  minikube クラスター中のコントロールプレーンの minikube ノードを起動しています
🚜  ベースイメージを取得しています...
💾  Kubernetes v1.23.3 のダウンロードの準備をしています
    > preloaded-images-k8s-v17-v1...: 505.68 MiB / 505.68 MiB  100.00% 18.24 Mi
    > gcr.io/k8s-minikube/kicbase: 379.06 MiB / 379.06 MiB  100.00% 10.45 MiB p
🔥  docker container (CPUs=2, Memory=1985MB) を作成しています...
🐳  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"」ネームスペースを使用するよう構成されました

確認

下記のコマンドでminikubeのpodの状態を確認します。
poはリソースタイプpodsの省略系です。
https://kubernetes.io/ja/docs/reference/kubectl/overview/#resource-types

❯ kubectl get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
kube-system   coredns-64897985d-p7nfx            1/1     Running   1 (26s ago)   38m
kube-system   etcd-minikube                      0/1     Running   1 (26s ago)   38m
kube-system   kube-apiserver-minikube            1/1     Running   1 (26s ago)   38m
kube-system   kube-controller-manager-minikube   1/1     Running   1 (26s ago)   38m
kube-system   kube-proxy-spkw9                   1/1     Running   1 (26s ago)   38m
kube-system   kube-scheduler-minikube            1/1     Running   1 (26s ago)   38m
kube-system   storage-provisioner                1/1     Running   2 (26s ago)   38m

echoserver

サーバの情報をそのまま表示するechoserverというイメージを使ってみます。

はじめにDeploymentを作成します。

❯ kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
deployment.apps/hello-minikube created

exposeで8080 portでServiceを公開します。

❯ kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed

podの状態を確認し、Runningになっていることを確認

❯ kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
hello-minikube-7bc9d7884c-kfpgn   1/1     Running   0          12m

port-forwardでlocalの7080ポートをhello-minikubeの8080ポートへ転送します。

❯ kubectl port-forward service/hello-minikube 7080:8080
Forwarding from 127.0.0.1:7080 -> 8080
Forwarding from [::1]:7080 -> 8080
Handling connection for 7080

ブラウザでhttp://localhost:7080/にアクセスすると下記の情報が表示されました。

CLIENT VALUES:
client_address=127.0.0.1
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://localhost:8080/

SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001

HEADERS RECEIVED:
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
accept-encoding=gzip, deflate
accept-language=ja,en-US;q=0.7,en;q=0.3
connection=keep-alive
host=localhost:7080
sec-fetch-dest=document
sec-fetch-mode=navigate
sec-fetch-site=cross-site
sec-fetch-user=?1
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:97.0) Gecko/20100101 Firefox/97.0
BODY:
-no body in request-

describeで詳細な情報を確認できます。

❯ kubectl describe pod hello-minikube
Name:         hello-minikube-7bc9d7884c-kfpgn
Namespace:    default
Priority:     0
Node:         minikube/192.168.49.2
Start Time:   Tue, 08 Mar 2022 01:44:11 +0900
Labels:       app=hello-minikube
              pod-template-hash=7bc9d7884c
Annotations:  <none>
Status:       Running
IP:           172.17.0.5
IPs:
  IP:           172.17.0.5
Controlled By:  ReplicaSet/hello-minikube-7bc9d7884c
Containers:
  echoserver:
    Container ID:   docker://4d0224ccabfd4c162ae47fcbf05cb71c112f42e1a98bf60f222c9b130f53a985
    Image:          k8s.gcr.io/echoserver:1.4
    Image ID:       docker-pullable://k8s.gcr.io/echoserver@sha256:5d99aa1120524c801bc8c1a7077e8f5ec122ba16b6dda1a5d3826057f67b9bcb
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Tue, 08 Mar 2022 01:44:17 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-pbqpp (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-pbqpp:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  14m   default-scheduler  Successfully assigned default/hello-minikube-7bc9d7884c-kfpgn to minikube
  Normal  Pulling    14m   kubelet            Pulling image "k8s.gcr.io/echoserver:1.4"
  Normal  Pulled     14m   kubelet            Successfully pulled image "k8s.gcr.io/echoserver:1.4" in 5.429185047s
  Normal  Created    14m   kubelet            Created container echoserver
  Normal  Started    14m   kubelet            Started container echoserver

✋  「minikube」ノードを停止しています...
🛑  SSH 経由で「minikube」の電源をオフにしています...
🛑  1 台のノードが停止しました。

delete servicesでhello-minikube Serviceを削除します。

❯ kubectl delete services hello-minikube
service "hello-minikube" deleted

delete deploymentでhello-minikube Deploymentを削除します

❯ kubectl delete deployment hello-minikube
deployment.apps "hello-minikube" deleted

minikubeクラスタを停止します

❯ minikube stop
✋  「minikube」ノードを停止しています...
🛑  SSH 経由で「minikube」の電源をオフにしています...
🛑  1 台のノードが停止しました。

minikubeクラスタを削除します。

❯ minikube delete
🔥  docker の「minikube」を削除しています...
🔥  コンテナー「minikube」を削除しています...
🔥  /Users/JP21326/.minikube/machines/minikube を削除しています...
💀  クラスター「minikube」の全てのトレースを削除しました。

おわり。