2025年03月19日
第18回 Kubernetesの運用を便利にするオープンソースツールの紹介

今回は、 Kubernetes管理に利用できる多様なオープンソースのツールを紹介します。
Kubernetesは、強力なコンテナオーケストレーション能力で多様性と拡張性に優れています。しかし、強力であるために複雑さをもたらします。ここで紹介するオープンソースを利用すれば、このような複雑な作業がより簡単になります。
1. 多様な Krewプラグインリスト
kubectl krewは、 Kubernetesのコマンドラインインターフェースのkubectlのためのプラグインマネージャーです。Krewは Kubernetesの活用性をより拡張し、ユーザ体験を向上させることに重点を置きます。
プラグインは言葉通り簡単に1行のコマンドの入力(プラグ)だけで多数のツールをインストールや、削除、アップグレードができます。
krewを使用するとプラグインの検索や、インストール、管理の過程が簡単になります。コマンド一行で新しいプラグインを発見し、インストールできます。これは、Kubernetes環境をより速く便利にユーザに使い易いものにします。
Krewはオープンソースコミュニティからサポートされ、継続的に成長するプラグインインフラで、ユーザは多様なリクエストに適したプラグインを見つけることができます。
krewを利用すると、Kubernetesクラスター管理がより効率的に簡略化されます。日常的な作業を自動化し、複雑なコマンドを単純化して作業時間を節約できます。
インストールは brewを利用すると、以下の通り簡単です(筆者は既にインストールしているので、表示が異なるところがあります)。
1. (jerry-test:karpenter)~$ brew install krew
2. ==> Downloading https://formulae.brew.sh/api/formula.jws.json
3. (省略)
4. Warning: krew 0.4.4 is already installed and up-to-date.
5. To reinstall 0.4.4, run:
6. brew reinstall krew
24年 1月現在で 200個を超える多様なプラグインツールがあり、必要に応じて選択できます。筆者がKubernetesを管理する時によく使用する Krewプラグインリストは次の通りです。このツールは Kubernetesプラグインを便利に管理できる Krewを利用してインストールします。
1. (jerry-test:default)~$ k krew list
2. PLUGIN VERSION
3. cnpg v1.21.0
4. ctx v0.9.5
5. deprecations v1.6.0
6. df-pv v0.3.0
7. get-all v1.3.8
8. krew v0.4.4
9. neat v2.0.3
10. ns v0.9.5
11. stern v1.26.0
12. view-secret v0.11.0
コマンドを入力すると、そのコマンドの使用法を確認できるため、次に説明します。
cnpg(Cloud Native PostgreSQL)
Kubernetesクラスター内でPostgreSQLデータベース管理のためのプラグインで、データベース管理の作業を簡略化します。
ctx
Kubernetesコンテキストを簡単に変換できるようにするツールで、マルチクラスター環境で有用です。マルチクラスターの管理ではns、kube-ps1と合わせると、3つのメインツール(^^)になります。
deprecations
クラスターアップグレード作業の時のクラスターの構成ファイルですが、マニフェストで以前のAPIバージョンを識別する時に役立つツールです。
df-pv
Persistent Volumes(PV)のディスク使用量を確認できるため、ストレージ管理で有用です。
get-all
一回のコマンド入力で複数のKubernetesリソースを照会できるプラグインです。既存の k get allコマンドではできないリソースまで表示できます。
krew
Kubernetesプラグインマネージャーで、多様なプラグインを簡単に検索してインストールできます。
neat
YAMLマニフェスト出力を整理し、必須ではない情報を除去します。
ns
Kubernetesネームスペースを早く転換できるツールで、ネームスペース管理を簡単にします。
stern
既存の k log コマンドはシングルPodのログのみは検索できますが、sternを使用するとマルチPodのログをリアルタイムで集計し、ストリーミングする時に使用され、ログ管理に有用です。
view-secret
追加のエンコーディングをすることなく、Kubernetes secretを簡単に照会し、解析できます。
その他Kubernetes管理環境をより便利にする、多様な Krewプラグインがあります。運用環境に適したものを選択して使用することを推奨します。
2. Polarisを利用したコンテナとPodのセキュリティーウィークポイントの確認
クラウドネイティブ環境でセキュリティーは最も重要な事柄の一つです。 Kubernetesは強力なコンテナオーケストレーションツールですが、正しくない構成のクラスターは深刻なセキュリティーウィークポイントになる可能性があります。Polarisは Kubernetesクラスターの構成を検査し、セキュリティー上の改善事項を推奨してクラスターをより安全にするためのオープンソースツールです。
Kubernetesのセキュリティーウィークポイントを確認して改善する用途でkubescape など多様なツールがありますが、Polarisは簡単に使用でき、発見されたウィークポイントに対処し易いように便利なGUIを提供しています。

Polarisは Kubernetesの ベストプラクティスに関する明確な方法を提供し、クラスターマネージャーがこれを順守できるようにサポートします。例えば、Polarisは見易いレポートを提供し、 改善事項を分かり易く識別できるようにして、優先順位を決めさせます。また、 Jenkins、CircleCI等のCI/CDパイプラインと統合されて、コード配布前にセキュリティーチェックを自動的に実行できます。
一般的に、アプリケーションのインストール時は、主にソリューションを提供する事業者のhelmチャートを利用してインストールします。しかし、このような公式 helmチャートもセキュリティーの側面で不十分な部分があるので、Polarisは模範事例の基準で12以上の検査を実施します。
次は実習で確認します。先ず、helm基盤でPolarisをインストールします。
1. (jerry-test:kubecost)polaris$ helm repo add fairwinds-stable https://charts.fairwinds.com/stable
2. "fairwinds-stable" has been added to your repositories
3. (jerry-test:kubecost)polaris$ helm pull fairwinds-stable/polaris
4. (jerry-test:kubecost)polaris$ tar xvfz polaris-5.16.0.tgz
5. (jerry-test:kubecost)polaris$ rm -rf polaris-5.16.0.tgz
6. (jerry-test:kubecost)polaris$ mv polaris polaris-5.16.0
7. (jerry-test:kubecost)polaris$ cd polaris-5.16.0/
8. (jerry-test:kubecost)polaris-5.16.0$ cp values.yaml ci/my-values.yaml
基本的に提供されるValues.yamlファイルで、下記のようにリソース関連設定のみを変更し、my-values.yamlファイルを生成します。
1. dashboard:
2. resources:
3. requests:
4. cpu: 10m
5. memory: 512Mi
Polarisネームスペースにインストールします。
1. (jerry-test:kubecost)polaris-5.16.0$ helm install polaris --namespace polaris --create-namespace -f ci/my-values.yaml .
2. NAME: polaris
3. LAST DEPLOYED: Sun Nov 5 01:12:13 2023
4. NAMESPACE: polaris
5. STATUS: deployed
6. REVISION: 1
7. TEST SUITE: None
8. NOTES:
9. ** Please be patient while the chart is being deployed **
10.
11. Enjoy Polaris and smooth sailing!
12. To view the dashboard execute this command:
13.
14. kubectl port-forward --namespace polaris svc/polaris-dashboard 8080:80
15.
16. Then open http://localhost:8080 in your browser.
インストールが完了すると、Podが正常に実行されます。
1. (jerry-test:kubecost)polaris-5.16.0$ k ns polaris
2. Context "jerry-test" modified.
3. Active namespace is "polaris".
4. (jerry-test:polaris)polaris-5.16.0$ k get pod
5. NAME READY STATUS RESTARTS AGE
6. polaris-dashboard-677d5f7488-lmbhp 1/1 Running 0 51s
7. polaris-dashboard-677d5f7488-xzfnm 1/1 Running 0 51s
port-forward コマンドで Polarisダッシュボードに接続します。
1. (jerry-test:polaris)polaris-5.16.0$ k get svc
2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
3. polaris-dashboard ClusterIP 172.20.50.177 <none> 80/TCP 10m
4. (jerry-test:polaris)polaris-5.16.0$ k port-forward svc/polaris-dashboard 8080:80
5. Forwarding from 127.0.0.1:8080 -> 8080
6. Forwarding from [::1]:8080 -> 8080

上記の図で用語の説明は次の通りです。
- Score
ベストプラクティスと比べたクラスター全体構成の内訳を簡単に点数に換算して表示します。勧告に従って修正すると、点数が上昇します。
- Passing/Warning/Dangerous Checks
Polarisは危険度をレベルで分けて構成のウィークポイントを識別します。例外設定を除外して、危険(dangerous) なステップのウィークポイントは修正することを推奨します。
次は、インストールしたアプリケーションのウィークポイントを確認できるため、詳細なウィークポイント別に必要な対処をします。下記は、 Redisアプリケーションのウィークポイントと対処方法の事例です。

追加のリンクを確認すると、詳細な対処方法を確認できます。
3. 管理コンソールでKubernetesがマスターできる K9sの紹介
OpenLensと合わせてローカル環境で、Kubernetesの管理コンソールで多く使用するK9sです。
K9sは、簡単な CLIインターフェースをサポートし、複雑なKubernetesコマンドを簡略化して、ユーザがクラスターを分かり易く、素早く管理できるようになります。また、クラスターのリアルタイムの状態をモニタリングできるため、Podや、ノード、サービス等の状態をリアルタイムで確認できます。
kubectl コマンドに慣れていない開発者でも、クラスター内のアプリケーションログを簡単に確認できて、問題の解決とデバッグのためのログ分析が容易にできます。
K9sをインストールする方法です。brew で簡単にインストールできます。
1. (jerry-test:default)~$ brew install derailed/k9s/k9s
2. Running `brew update --auto-update`...
3. ==> Auto-updated Homebrew!
4. Updated 4 taps (derailed/k9s, aws/tap, homebrew/core and homebrew/cask).
5. ==> New Formulae
6. ain bomber dicebear invoice noir python-docopt scikit-image
7. apkleaks certgraph dockerfile-language-server libjuice orbuculum python-mako signmykey
8. appstream certsync frozen libsail osctrl-cli raven tailspin
9. authz0 cfripper gittuf mediamtx phylum-cli redwax-tool tlrc
10. bao der-ascii graphqlviz modsurfer presenterm regclient vet
11. ==> New Casks
12. clibor deveco-studio gstreamer-development gstreamer-runtime keymapp metamer mitmproxy music-decoy orka3
13.
14. You have 29 outdated formulae installed.
15.
16. k9s 0.27.4 is already installed but outdated (so it will be upgraded).
17. ==> Fetching derailed/k9s/k9s
18. ==> Downloading https://github.com/derailed/k9s/releases/download/v0.28.0/k9s_Darwin_arm64.tar.gz
19. ==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/167596393/64f86002-bb1b-41f0-9f83-89fba643aaf2?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20231109%2Fus-east-1%2Fs3%2
20. ############################################################################################################################################################################################################################################## 100.0%
21. ==> Upgrading derailed/k9s/k9s
22. 0.27.4 -> 0.28.0
23.
24. <img draggable="false" class="emoji" alt=" " src="https://s.w.org/images/core/emoji/11/svg/1f37a.svg"> /opt/homebrew/Cellar/k9s/0.28.0: 5 files, 65.3MB, built in 3 seconds
25. ==> Running `brew cleanup k9s`...
26. Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
27. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
28. Removing: /opt/homebrew/Cellar/k9s/0.27.4... (5 files, 64.2MB)
29. Removing: /Users/jerry/Library/Caches/Homebrew/k9s--0.27.4.tar.gz... (17.9MB)
筆者はクラスターのアップグレードや、ノード Drainの作業時に、全体 Podの状態を把握するためによく利用します。
下記のように Podモニタリング画面で ‘0’ を入力すると、特定ネームスペースではない全体ネームスペース Podの状態を確認できます。

続く画面で、キーと sキーを同時入力すると、下記のように状態(STATUS)を基準にPodを整列できます。次に、k drain コマンドで特定ノードを Drainすると、変化する Podの状態を確認できます。特定の Podが実行できないか、Pendingの状態を把握できるため、作業が正常終了か否かの判断に便利です。

K9sは Kubernetesクラスター管理を効率的にする強力なツールで、複雑なクラスター環境での作業を単純化し、スピードアップできるツールです。
4. Metrics-ServerでKubernetesリソース使用量の確認
Kubernetesで必ず使用するMetrics-Serverのインストール方法を簡単に確認します。Metrics-ServerはHPA適用時、Podのリソース使用量を把握するのに必要な要素です。
Metrics-Serverのインストールはマニフェスト YAMLファイルでインストールもできますが、今後の管理の利便性のためにhelmを利用したインストールを推奨します。
1. (jerry-test:default)foo$ helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
2. "metrics-server" has been added to your repositories
3.
4. (jerry-test:default)metrics-server-3.10.0$ helm pull metrics-server/metrics-server
1. (jerry-test:kube-system)metrics-server-3.11.0$ helm install metrics-server -f ci/ci-values.yaml .
2. NAME: metrics-server
3. LAST DEPLOYED: Thu Nov 9 16:04:13 2023
4. NAMESPACE: kube-system
5. STATUS: deployed
6. REVISION: 1
7. TEST SUITE: None
8. NOTES:
9. ***********************************************************************
10. * Metrics Server *
11. ***********************************************************************
12. Chart version: 3.11.0
13. App version: 0.6.4
14. Image tag: registry.k8s.io/metrics-server/metrics-server:v0.6.4
15. ***********************************************************************
kube-systemネームスペースでmetrics-server Podが正常に実行されます。
1. (jerry-test:kube-system)metrics-server-3.11.0$ k get pod --selector app.kubernetes.io/name=metrics-server
2. NAME READY STATUS RESTARTS AGE
3. metrics-server-966ddf79d-4z7mj 1/1 Running 0 73s
以降は、ノードと Podの cpuとメモリのリソース使用量を k top コマンドで把握できて便利です。
1. (jerry-test:kube-system)metrics-server-3.11.0$ k top nodes
2. NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
3. ip-10-110-22-92.ap-northeast-2.compute.internal 110m 5% 2543Mi 35%
4. ip-10-110-29-227.ap-northeast-2.compute.internal 119m 6% 1041Mi 71%
5. ip-10-110-32-197.ap-northeast-2.compute.internal 39m 2% 677Mi 46%
1. (jerry-test:kube-system)metrics-server-3.11.0$ k top pods
2. NAME CPU(cores) MEMORY(bytes)
3. aws-load-balancer-controller-847fd69fdd-m5sgx 3m 28Mi
4. aws-load-balancer-controller-847fd69fdd-mhtz2 1m 20Mi
5. aws-node-8n5xr 4m 59Mi
6. aws-node-pl56t 4m 63Mi
7. aws-node-sljqx 4m 53Mi
8. coredns-7598c7588c-pbflr 2m 18Mi
9. coredns-7598c7588c-scfnh 2m 18Mi
10. ebs-csi-controller-7f8787d56d-9tpl5 3m 59Mi
11. ebs-csi-controller-7f8787d56d-d857m 4m 56Mi
12. ebs-csi-node-gjkqt 2m 32Mi
13. ebs-csi-node-q49sb 1m 21Mi
14. ebs-csi-node-x9tnj 1m 32Mi
15. external-dns-5555f6796f-zltdz 1m 18Mi
16. kube-proxy-b5tm2 1m 19Mi
17. kube-proxy-c7l5w 1m 21Mi
18. kube-proxy-d2mfw 1m 15Mi
19. metrics-server-966ddf79d-4z7mj 3m 17Mi
以上で、Kubernetes環境で使用できる便利なオープンソースツールを確認しました。