本記事は『 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