Kubernetes - 01. Kubernetesの紹介 (MiniKube実践編)

本記事は『 Kubernetes完全ガイド 第3版 』を使用して学習した内容をまとめたものです。

1. 要約

MacOS環境でMiniKubeを活用し、Kubernetes環境を構築してテストします。

※ MinikubeはKubernetesをローカルで簡単に実行するためのツールです。

MinikubeはVMプロビジョニングのために libmachine を使用し、Kubernetesクラスタをプロビジョニングするために kubeadm を使用します。

2. 実践

ハイパーバイザのインストール

筆者は VirtualBox をインストールしました。

miniKubeのインストール

(1) MacOSの仮想化サポートVMXの確認


pc:~ user$ sysctl -a | grep -E --color 'machdep.cpu.features|VMX'

machdep.cpu.features: FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP
MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT
TM PBE SSE3 PCLMULQDQ DTES64 MON DSCPL VMX SMX EST TM2 SSSE3 FMA CX16
TPR PDCM SSE4.1 SSE4.2 x2APIC MOVBE POPCNT AES PCID XSAVE OSXSAVE SEGLIM64
TSCTMR AVX1.0 RDRAND F16C

出力の中に(色で強調された) VMX があれば、マシンでVT-x機能が有効になっています。

(2) brew install minikube

homebrewを使用してminikubeをインストールします。

Kubernetesとのやり取り

(1) minikube start --driver=virtualbox

Minikubeと呼ぶ kubectlコンテキスト を作成します。このコンテキストには、Minikubeクラスタと通信するための設定が含まれています。

※ KubectlはKubernetesクラスタを制御するためのコマンドラインツールです。


pc:~ user$ minikube start --driver=virtualbox

?  Darwin 10.14.5 上の minikube v1.12.1
✨  ユーザー環境設定情報に基づき virtualbox ドライバを使用中
?  仮想マシンブートイメージをダウンロード中 ...
    > minikube-v1.12.0.iso.sha256: 65 B / 65 B [-------------] 100.00% ? p/s 0s
    > minikube-v1.12.0.iso: 173.57 MiB / 173.57 MiB [] 100.00% 9.71 MiB p/s 18s
?  Starting control plane node minikube in cluster minikube
?  Kubernetes v1.18.3 をダウンロード中 ...
    > preloaded-images-k8s-v4-v1.18.3-docker-overlay2-amd64.tar.lz4: 526.27 MiB
?  virtualbox VM (CPUs=2, Memory=4000MB, Disk=20000MB) を作成中 ...
?  Kubernetes v1.18.3 を Docker 19.03.12 ランタイムでインストール中
?  Verifying Kubernetes components...
?  Enabled addons: default-storageclass, storage-provisioner
?  完了しました!これで kubectl が "minikube" を使用するように設定されました

(2) 状態の確認

minikube status


pc:~ user$ minikube status

minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

(3) Virtualboxを確認すると、minikube vmが作成されています。

(4) kubectlを使用してノードを確認しましょう。


pc:~ user$ kubectl get node

NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   17m   v1.18.3

(5) サービスのNodePortを確認するには、 kubectl コマンドで以下のように実行します。


kubectl get service $SERVICE --output='jsonpath="{.spec.ports[0].nodePort}"'

(6) Kubernetes (k8s) ダッシュボードを利用するには、 Minikubeを実行した後、シェルで以下のコマンドを実行してアドレスを確認します。


pc:~ user$ minikube dashboard

?  ダッシュボードを有効化中 ...
?  Verifying dashboard health ...
?  プロキシを開始中 ...
?  Verifying proxy health ...
?  Opening http://127.0.0.1:63216/api/v1/namespaces/kubernetes-dashboard/
services/http:kubernetes-dashboard:/proxy/ in your default browser...

(7) 簡単なデプロイメントの例を作成できます。


pc:~ user$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
pod/hello-minikube created

pc:~ user$ kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
hello-minikube                    1/1     Running   0          14s

pc:~ user$ kubectl delete pod hello-minikube
pod "hello-minikube" deleted

pc:~ user$ kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
deployment.apps/hello-minikube created

pc:~ user$ kubectl expose deployment hello-minikube --type=NodePort
error: couldn't find port via --port flag or introspection

pc:~ user$ kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed

pc:~ user$ kubectl get services
NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
hello-minikube   NodePort    10.99.129.52   <none>        8080:32226/TCP   5m12s
kubernetes       ClusterIP   10.96.0.1      <none>        443/TCP          3d5h


pc:~ user$ minikube service hello-minikube
|-----------|----------------|-------------|-----------------------------|
| NAMESPACE |      NAME      | TARGET PORT |             URL             |
|-----------|----------------|-------------|-----------------------------|
| default   | hello-minikube |        8080 | http://192.168.99.100:32226 |
|-----------|----------------|-------------|-----------------------------|
?  Opening service default/hello-minikube in default browser...

(8) アドオン設定


$ minikube addons list
|-----------------------------|----------|--------------|
|         ADDON NAME          | PROFILE  |    STATUS    |
|-----------------------------|----------|--------------|
| ambassador                  | minikube | disabled     |
| dashboard                   | minikube | enabled ✅   |
| default-storageclass        | minikube | enabled ✅   |
| efk                         | minikube | disabled     |
| freshpod                    | minikube | disabled     |
| gvisor                      | minikube | disabled     |
| helm-tiller                 | minikube | disabled     |
| ingress                     | minikube | disabled     |
| ingress-dns                 | minikube | disabled     |
| istio                       | minikube | disabled     |
| istio-provisioner           | minikube | disabled     |
| kubevirt                    | minikube | disabled     |
| logviewer                   | minikube | disabled     |
| metallb                     | minikube | disabled     |
| metrics-server              | minikube | disabled     |
| nvidia-driver-installer     | minikube | disabled     |
| nvidia-gpu-device-plugin    | minikube | disabled     |
| olm                         | minikube | disabled     |
| pod-security-policy         | minikube | disabled     |
| registry                    | minikube | disabled     |
| registry-aliases            | minikube | disabled     |
| registry-creds              | minikube | disabled     |
| storage-provisioner         | minikube | enabled ✅   |
| storage-provisioner-gluster | minikube | disabled     |
|-----------------------------|----------|--------------|

$ minikube addons enable metrics-server
?  The 'metrics-server' addon is enabled

$ kubectl get pod,svc -n kube-system
NAME                                   READY   STATUS    RESTARTS   AGE
pod/coredns-66bff467f8-6pwgf           1/1     Running   1          3d5h
pod/etcd-minikube                      1/1     Running   1          3d5h
pod/kube-apiserver-minikube            1/1     Running   1          3d5h
pod/kube-controller-manager-minikube   1/1     Running   1          3d5h
pod/kube-proxy-msnjp                   1/1     Running   1          3d5h
pod/kube-scheduler-minikube            1/1     Running   1          3d5h
pod/metrics-server-7bc6d75975-nc2l5    1/1     Running   0          27s
pod/storage-provisioner                1/1     Running   2          3d5h

NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
service/kube-dns         ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   3d5h
service/metrics-server   ClusterIP   10.98.180.253   <none>        443/TCP                  27s

参考資料

- https://kubernetes.io/

AD