■ はじめに
多くの企業が採用を始めており、トレンドになっているという
Kubernetes を一緒に学んでいきましょう。
上記が本稿の主旨となります。
といっても公式Documentや他技術blogなどで、Kubernetesとはどういったものかという情報自体は溢れているかと思います。
そこでコチラでは未経験者や初級エンジニアさんを対象に、そして私自身のために、こんな風に学習をススメてみましたを共有出来たらと思います。
// 活発な議論がなされているという参考記事
専門家が論ずるKubernetesのトップトレンドと運用上の問題
■ 対象読者
- Kubernetes未経験者
- 初級エンジニア
- 私自身 (Input/Outputしながら進めることで学習効率を上げたい)
■ Documents
下記情報を基に、読んでは試してみるというカタチで進めてみようと思います。
公式Document
https://kubernetes.io/docs/home/
※日本語版もしっかり整理されています
GitHub上のリポジトリ
https://github.com/kubernetes/kubernetes
※ヒントとなりそうな情報がちらほら。構成図なども公開されています。
■ 学習方法
ざっとDocumentに目を通してみると、多くのクラウドサービスやOSSが提供している機能を包括している印象を受けました。しかしながら、情報量が多すぎてイメージが付きづらいため、実際にさわりながら学習を進めたいと思います。
幸いなことに検証ツールを公式が用意して下さっています。それが下記のminikubeです。
- ローカル環境でKubernetesを簡単に実行するためのツール
- PC上のVM内でシングルノードのKubernetesクラスタを実行することができる
■ 始める前に
まず一番最初に引っ掛かるのが Kubernetes の 読み方、発音だと思います。
下記記事を引用しますと、開発メンバーが何と呼んでいるかのツイート と 実際発音している動画を取り上げており、私はそれにならうことにしました(聞こえたとおりに)
引用: シラベタ - 「Kubernetes」の正しい読み方(発音)
■ 検証開始
■ 01. 検証環境の準備
では早速、minikube公式のDocumentに沿って進めてみます。
チュートリアル形式で記載されており、取っ掛かり易い感じです。
https://minikube.sigs.k8s.io/docs/start/
環境
Host OS | Windows 10(64bit) |
VM | VirtualBox(6.1.22) |
多くの方がおうちの環境で用意し易いだろう、コチラでやってみました。
※VirtualBoxは適宜導入してみてください。
■ 02. minikube for Windows インストール
3通りの方法が提示されていましたが、そのうちの2つであるパッケージマネージャを導入していなかったため、
**「minikube-installer.exe」**からインストールしました。下記はインストール後の確認になります。
PS C:\Users\Mitzi> minikube version
minikube version: v1.20.0
commit: c61663e942ec43b20e8e70839dcca52e44cd85ae
■ 03. Kubernetesクラスタ起動
PS C:\Users\Mitzi> minikube start
* Microsoft Windows 10 Home 10.0.18363 Build 18363 上の minikube v1.20.0
* virtualboxドライバーが自動的に選択されました
* VM ブートイメージをダウンロードしています...
> minikube-v1.20.0.iso.sha256: 65 B / 65 B [-------------] 100.00% ? p/s 0s
> minikube-v1.20.0.iso: 245.40 MiB / 245.40 MiB [] 100.00% 9.77 MiB p/s 25s
* コントロールプレーンのノード minikube を minikube 上で起動しています
* Kubernetes v1.20.2 のダウンロードの準備をしています
> preloaded-images-k8s-v10-v1...: 491.71 MiB / 491.71 MiB 100.00% 8.78 MiB
* virtualbox VM (CPUs=2, Memory=2200MB, Disk=20000MB) を作成しています...\ # このタイミングでVirtualBox Interfaceへの変更許可を求められる(2回)
* Docker 20.10.6 で Kubernetes v1.20.2 を準備しています...
- Generating certificates and keys ...
- Booting up control plane ...
- Configuring RBAC rules ...
* Kubernetes コンポーネントを検証しています...
- Using image gcr.io/k8s-minikube/storage-provisioner:v5
* 有効なアドオン: default-storageclass, storage-provisioner
* kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
Headless Frontendで起動されたVirtualBoxを確認してみると、minikubeというゲストOSが追加されていました。
■ 04. shinyなクラスタにさわってみる
// 公式の文言より:
If you already have kubectl installed, you can now use it to access your shiny new cluster
04-1. minikube.exe経由で、 VM上のpodの状態を確認
PS C:\Users\Mitzi> minikube kubectl -- get po -A
> kubectl.exe.sha256: 64 B / 64 B [----------------------] 100.00% ? p/s 0s
> kubectl.exe: 39.52 MiB / 39.52 MiB [---------] 100.00% 11.69 MiB p/s 3.6s
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-74ff55c5b-xjpmp 1/1 Running 0 28m
kube-system etcd-minikube 1/1 Running 0 29m
kube-system kube-apiserver-minikube 1/1 Running 0 29m
kube-system kube-controller-manager-minikube 1/1 Running 0 29m
kube-system kube-proxy-92wbf 1/1 Running 0 28m
kube-system kube-scheduler-minikube 1/1 Running 0 29m
kube-system storage-provisioner 1/1 Running 1 29m
※補足
・kubelctl は下記のようにローカルフォルダ配下に格納されていました。こちらを利用していた様です。
C:\Users\Mitzi\.minikube\cache\windows\v1.20.2\kubectl.exe
04-2. kubectlを導入
・公式の手順に沿って最新版のkubectlを入手し、同様の確認を行いました。
https://kubernetes.io/docs/tasks/tools/
a) 最新版の kubectl.exe を入手
PS C:\Users\Mitzi\Downloads> curl -LO https://dl.k8s.io/release/v1.21.0/bin/windows/amd64/kubectl.exe
↓ "-LO" のパラメータは使えないと警告がでる。 実体は下記コマンドになるため下記のように対応
PS C:\Users\Mitzi\Downloads> Invoke-WebRequest -Uri https://dl.k8s.io/release/v1.21.0/bin/windows/amd64/kubectl.exe -OutFile ./kubectl.exe
b) チェックサムファイルで正常にDL出来たか確認
・Documentに沿って律儀に対応してみました。勉強。
PS C:\Users\Mitzi\Downloads> curl https://dl.k8s.io/v1.21.0/bin/windows/amd64/kubectl.exe.sha256 -o ./kubectl.exe.sha256
・ハッシュ値を比較
PS C:\Users\Mitzi\Downloads> CertUtil -hashfile kubectl.exe SHA256
SHA256 ハッシュ (対象 kubectl.exe):
9f77c0198c15b3b7f051cd4a58fb40941ade04c7d0b30c889aec64b8f4a57ed1
PS C:\Users\Mitzi\Downloads> type kubectl.exe.sha256
9f77c0198c15b3b7f051cd4a58fb40941ade04c7d0b30c889aec64b8f4a57ed1
OKでした
・ちなみにワンライナーでは下記のようにして確認出来ました
PS C:\Users\Mitzi\Downloads> $($(CertUtil -hashfile .\kubectl.exe SHA256)[1] -replace " ", "") -eq $(type .\kubectl.exe.sha256)
True
c) PATH環境変数に登録
・kubectl.exeを気軽に使えるよう手動でPATH環境変数に登録した後、下記のように反映を確認
PS C:\Users\Mitzi> $ENV:path.split(";") | Select-String Kubernetes
-----
C:\Program Files\Kubernetes\Minikube
C:\Program Files\Kubernetes\bin <- minikubeに合わせて、当該フォルダ配下にkubectl.exeを格納したためコチラを設定
d) コマンド実行確認と合わせてバージョン確認
PS C:\Users\Mitzi> kubectl version --client
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:31:21Z", GoVersion:"go1.16.1", Compiler:"gc", Platform:"windows/amd64"}
最新版であることを確認
e) あらためてkubectlコマンドから直接shinyなクラスタにアクセス(pod情報を表示)
PS C:\Users\Mitzi> kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-74ff55c5b-xjpmp 1/1 Running 0 10h
kube-system etcd-minikube 1/1 Running 0 10h
kube-system kube-apiserver-minikube 1/1 Running 0 10h
kube-system kube-controller-manager-minikube 1/1 Running 0 10h
kube-system kube-proxy-92wbf 1/1 Running 0 10h
kube-system kube-scheduler-minikube 1/1 Running 0 10h
kube-system storage-provisioner 1/1 Running 1 10h
kubernetes-dashboard dashboard-metrics-scraper-f6647bd8c-dmcbn 1/1 Running 0 9h
kubernetes-dashboard kubernetes-dashboard-968bcb79-68sph 1/1 Running 0 9h
※後述するDashboardの起動をやった後だったため、上記のように表示が増えていました。
04-3. Dashboard起動
PS C:\Users\Mitzi> minikube dashboard
* ダッシュボードを有効化しています...
- Using image kubernetesui/dashboard:v2.1.0
- Using image kubernetesui/metrics-scraper:v1.0.4
* ダッシュボードの状態を確認しています...
* プロキシを起動しています...
* プロキシの状態を確認しています...
* Opening http://127.0.0.1:51281/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
・デフォルトブラウザが自動で起動しDashboardが表示されました (ちなみにポート番号は、起動の度に変わっていました)
公式Documentより
https://minikube.sigs.k8s.io/docs/handbook/dashboard/
GUIからrolling update や podの管理が出来るとのこと
04-4. Dashboard停止
To stop the proxy (leaves the dashboard running), abort the started process (Ctrl+C)
肝心の止め方も記載がありました。割り込んで止めてとのことです。ワイルド
■ ここまでのまとめ
検証環境を用意し、Kubernetesの機能の一端に触れるところまでになります。
今後も Documentを参照しながら検証するという形式で学習を継続したく思います。