はじめに
kubectl
は Kubernetes を操作するクライアントツールです。
Pod などのオブジェクトの作成、情報参照などを行うことが可能です。
kubectl
にはプラグイン機能があり、kubectl
をサポートする機能があったので
今回はプラグイン導入して実際にいくつかのプラグインをお試ししてみました。
※プラグインはコミュニティ等のチェックは行われていないため、利用は自己責任でお願いします
環境構成
minikube で動作検証をしました。
OS:Ubuntu 18.04.5 LTS
minikube:v1.17.0
Kubernetes:v1.20.2
kubectl:v1.20.2
kubectl krew
kubuectl
のプラグインマネージャとして krew
を利用します。
プラグインのインストールや削除などの管理を行う事ができます。
※krew
自体も kubectl
のプラグインとして実装されています。
krew
については以下を参照ください。
早速 krew
をインストールします。
# git がインストールされていることを確認、なければインストールする
$ git version
git version 2.17.1
# 公式サイトにあるスクリプトを利用してインストールする
$ (
set -x; cd "$(mktemp -d)" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.tar.gz" &&
tar zxvf krew.tar.gz &&
KREW=./krew-"$(uname | tr '[:upper:]' '[:lower:]')_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/arm.*$/arm/')" &&
"$KREW" install krew
)
↑ここまでコマンド
・・・
Installed plugin: krew
\
| Use this plugin:
| kubectl krew
| Documentation:
| https://krew.sigs.k8s.io/
| Caveats:
| \
| | krew is now installed! To start using kubectl plugins, you need to add
| | krew’s installation directory to your PATH:
| |
| | * macOS/Linux:
| | - Add the following to your ~/.bashrc or ~/.zshrc:
| | export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
| | - Restart your shell.
| |
| | * Windows: Add %USERPROFILE%\.krew\bin to your PATH environment variable
| |
| | To list krew commands and to get help, run:
| | $ kubectl krew
| | For a full list of available plugins, run:
| | $ kubectl krew search
| |
| | You can find documentation at
| | https://krew.sigs.k8s.io/docs/user-guide/quickstart/.
| /
/
# コマンドのパスを環境変数に追加する
$ echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> .bashrc
$ source .bashrc
# 動作確認
$ kubectl krew version
OPTION VALUE
GitTag v0.4.0
・・・
プラグインマネージャの導入ができました。
実際のプラグインのインストールは以下で行います。
$ kubectl krew install <plugin name>
プラグインのお試し
以降では実際に私が試して便利だったプラグインをご紹介します。
kubeconfig
ns
namespace
の切り替えを容易にしてくれるプラグインです。
kubectl
では kubectl config
コマンドを使ってコンテキストの設定をしなければならないのですが、どうしてもコマンドが長くなってしまいます。
ns
を使うと現在のコンテキストの namespace
を簡単に変更できます。
※類似プラグインとしてコンテキスト切り替えを容易にする ctx
もあります
# サブコマンドが指定されないと namespace の一覧を表示
# (Qiita だと色が付かないですが、カレント namespace は色が付きます)
$ kubectl ns
default
kube-node-lease
kube-public
kube-system
# 現在の namespace を確認 (-c / --current)
$ kubectl ns -c
default
# 現在のコンフィグを確認
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* minikube minikube minikube default
# 現在の namespace 変更
$ kubectl ns kube-system
Context "minikube" modified.
Active namespace is "kube-system".
$ kubectl ns -c
kube-system
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* minikube minikube minikube kube-system
fleet
fleet(艦隊)なクラスタ群を表示するプラグインです。
kubeconfig の内容とクラスタの情報出力をサポートします。
※複数クラスタ・コンテキストを管理している場合に便利
# コンテキスト内のクラスタ一覧を表示
$ kubectl fleet
CLUSTER VERSION NODES NAMESPACES PROVIDER API
minikube v1.20.2 1/1 4 minikube https://192.168.49.2:8443
# クラスタ内のオブジェクトの一覧化
$ kubectl fleet details minikube
API server endpoint: https://192.168.49.2:8443
# namespace [default]
has no pods
has 1 service(s) overall:
- service [kubernetes] of type ClusterIP uses IP 10.96.0.1 and port(s) https TCP/443
--------------------------------------------------------------------------------
・・・
# namespace [kube-system]
has 7 pod(s) overall:
- pod [coredns-74ff55c5b-ph8rs] is running and uses image(s) k8s.gcr.io/coredns:1.7.0
- pod [etcd-minikube] is running and uses image(s) k8s.gcr.io/etcd:3.4.13-0
- pod [kube-apiserver-minikube] is running and uses image(s) k8s.gcr.io/kube-apiserver:v1.20.2
- pod [kube-controller-manager-minikube] is running and uses image(s) k8s.gcr.io/kube-controller-manager:v1.20.2
- pod [kube-proxy-th774] is running and uses image(s) k8s.gcr.io/kube-proxy:v1.20.2
- pod [kube-scheduler-minikube] is running and uses image(s) k8s.gcr.io/kube-scheduler:v1.20.2
- pod [storage-provisioner] is running and uses image(s) gcr.io/k8s-minikube/storage-provisioner:v4
has 1 service(s) overall:
- service [kube-dns] of type ClusterIP uses IP 10.96.0.10 and port(s) dns UDP/53 dns-tcp TCP/53 metrics TCP/9153
--------------------------------------------------------------------------------
view-serviceaccount-kubeconfig
指定された ServiceAccount で kubectl
を利用する際の kubeconfig を出力します。
# ServiceAccount:default のkubeconfig を出力
$ kubectl view-serviceaccount-kubeconfig default
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: ・・・
server: https://192.168.49.2:8443
name: minikube
contexts:
- context:
cluster: minikube
namespace: kube-system
user: default
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: default
user:
token: ・・・
Pod
images
docker images
の用に使っているイメージを一覧化して表示したい時に便利なプラグインです。
Pod / Container 名で絞り込むことも可能です。
# イメージを一覧化
$ kubectl images
[Summary]: 1 namespaces, 7 pods, 7 containers and 7 different images
+----------------------------------+-------------------------+--------------------------------------------+
| PodName | ContainerName | ContainerImage |
+----------------------------------+-------------------------+--------------------------------------------+
| coredns-74ff55c5b-ph8rs | coredns | k8s.gcr.io/coredns:1.7.0 |
+----------------------------------+-------------------------+--------------------------------------------+
| etcd-minikube | etcd | k8s.gcr.io/etcd:3.4.13-0 |
+----------------------------------+-------------------------+--------------------------------------------+
| kube-apiserver-minikube | kube-apiserver | k8s.gcr.io/kube-apiserver:v1.20.2 |
+----------------------------------+-------------------------+--------------------------------------------+
| kube-controller-manager-minikube | kube-controller-manager | k8s.gcr.io/kube-controller-manager:v1.20.2 |
+----------------------------------+-------------------------+--------------------------------------------+
| kube-proxy-th774 | kube-proxy | k8s.gcr.io/kube-proxy:v1.20.2 |
+----------------------------------+-------------------------+--------------------------------------------+
| kube-scheduler-minikube | kube-scheduler | k8s.gcr.io/kube-scheduler:v1.20.2 |
+----------------------------------+-------------------------+--------------------------------------------+
| storage-provisioner | storage-provisioner | gcr.io/k8s-minikube/storage-provisioner:v4 |
+----------------------------------+-------------------------+--------------------------------------------+
# 特定の Pod で絞り込み(-c オプションでコンテナの指定も可)
$ kubectl images -n kube-system coredns
[Summary]: 1 namespaces, 1 pods, 1 containers and 1 different images
+-------------------------+---------------+--------------------------+
| PodName | ContainerName | ContainerImage |
+-------------------------+---------------+--------------------------+
| coredns-74ff55c5b-ph8rs | coredns | k8s.gcr.io/coredns:1.7.0 |
+-------------------------+---------------+--------------------------+
pod-dive
Pod の階層的な情報(どこのノード、どこの namespace
、どのオブジェクトタイプ)を出力します。
アラートから得られる情報が Pod 名の場合が多いことから作成されたプラグインのようです。
※↑ヘルプより。
# coredns の Pod 名を確認
$ kubectl get po -l k8s-app=kube-dns -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-74ff55c5b-ph8rs 1/1 Running 0 159m
# coredns の Pod 情報を出力
$ kubectl pod-dive coredns-74ff55c5b-ph8rs -n kube-system
[node] minikube [ready]
[namespace] ├─┬ kube-system
[type] │ └─┬ replicaset [deployment]
[workload] │ └─┬ coredns-74ff55c5b [1 replica]
[pod] │ └─┬ coredns-74ff55c5b-ph8rs [running]
[containers] │ └── coredns [0 restarts]
...
podevents
Pod のイベント情報を整形して出力します。
タイムスタンプで表示されることや時系列で整形されて表示されるので見やすいです。
# Pod のイベント情報を表示
$ kubectl podevents storage-provisioner
Events for 'storage-provisioner':
LAST SEEN TYPE REASON MESSAGE
2021-01-26 15:31:42 +0000 UTC Normal SandboxChanged Pod sandbox changed, it will be killed and re-created.
2021-01-26 15:32:29 +0000 UTC Normal Pulled Container image "gcr.io/k8s-minikube/storage-provisioner:v4" already present on machine
2021-01-26 15:32:29 +0000 UTC Normal Created Created container storage-provisioner
2021-01-26 15:32:29 +0000 UTC Normal Started Started container storage-provisioner
2021-01-26 15:32:14 +0000 UTC Warning BackOff Back-off restarting failed container
sick-pods
障害が起きている Pod の状態やイベント情報をまとめて出力します。
# 障害が起きている Pod の情報を出力
# 今回は request memory のリソースを過剰に設定してからプラグインで出力させてみました
$ kubectl sick-pods nginx-54f8d64599-rz75g
'nginx-54f8d64599-rz75g' is not ready! Reason Provided: None
Failed Pod Conditions:
CONDITION REASON MESSAGE
PodScheduled Unschedulable 0/1 nodes are available: 1 Insufficient memory.
Pod Events:
LAST SEEN TYPE REASON MESSAGE
0001-01-01 00:00:00 +0000 UTC Warning FailedScheduling 0/1 nodes are available: 1 Insufficient memory.
0001-01-01 00:00:00 +0000 UTC Warning FailedScheduling 0/1 nodes are available: 1 Insufficient memory.
secret
view-secret
Base64 でエンコードされた Secret の情報をデコードして出力します。
一々デコード処理のコマンドに渡す手間を省くことが出来て便利です。
# Secret のキー一覧を出力
$ kubectl view-secret default-token-tmdjk
Multiple sub keys found. Specify another argument, one of:
-> token
-> ca.crt
-> namespace
# Secret の情報をデコードして出力
$ kubectl view-secret default-token-tmdjk ca.crt
-----BEGIN CERTIFICATE-----
MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwptaW5p
・・・
1Kwm6cWEGMZh3w==
-----END CERTIFICATE-----
# Secret の全ての情報をデコードして出力
$ kubectl view-secret default-token-tmdjk -a
token=・・・
ca.crt=-----BEGIN CERTIFICATE-----
・・・
-----END CERTIFICATE-----
namespace=default
modify-secret
Secret の情報を、kubectl edit
の用に編集することが出来ます。
Base64 のエンコードをすることなく Secret を編集することが出来て便利です。
※マニフェストファイルで管理している場合は逆効果・・・?
# Secret の編集
$ kubectl modify-secret XXXX
※エディタが開き編集可能になる
※表示は Base64 デコードされ、保存する際に再エンコードされる
view-cert
Secret に格納している証明書情報を出力します。
Subject / Issuer / 期限情報を確認することが出来ます。
# Secret の格納している証明書情報を出力
# Secret 名 / key を指定
$ kubectl view-cert default-token-tmdjk ca.crt
[
{
"SecretName": "default-token-tmdjk",
"Namespace": "default",
"Version": 3,
"SerialNumber": "1",
"Issuer": "CN=minikubeCA",
"Validity": {
"NotBefore": "2021-01-24T15:12:52Z",
"NotAfter": "2031-01-23T15:12:52Z"
},
"Subject": "CN=minikubeCA",
"IsCA": true
}
]
resource
resource-capacity
クラスタ内のResource Request/Limit を整形して出力してくれるプラグインです。
ソート機能や metrics-server が導入されている kubernetes であれば利用量も出力してくれるのが便利です。
# クラスタ内の Request / Limit の合計値を出力
$ kubectl resource-capacity
NODE CPU REQUESTS CPU LIMITS MEMORY REQUESTS MEMORY LIMITS
minikube 750m (37%) 0m (0%) 170Mi (4%) 170Mi (4%)
# Request / Limit に加え、利用量を出力(前提:metrics-server)
$ kubectl resource-capacity -u
NODE CPU REQUESTS CPU LIMITS CPU UTIL MEMORY REQUESTS MEMORY LIMITS MEMORY UTIL
minikube 750m (37%) 0m (0%) 67m (3%) 170Mi (4%) 170Mi (4%) 579Mi (14%)
# Pod 毎で CPU の Request の降順に出力
$ kubectl resource-capacity --pods --sort cpu.request
NODE NAMESPACE POD CPU REQUESTS CPU LIMITS MEMORY REQUESTS MEMORY LIMITS
minikube * * 750m (37%) 0m (0%) 170Mi (4%) 170Mi (4%)
minikube kube-system kube-apiserver-minikube 250m (12%) 0m (0%) 0Mi (0%) 0Mi (0%)
minikube kube-system kube-controller-manager-minikube 200m (10%) 0m (0%) 0Mi (0%) 0Mi (0%)
minikube kube-system etcd-minikube 100m (5%) 0m (0%) 100Mi (2%) 0Mi (0%)
minikube kube-system kube-scheduler-minikube 100m (5%) 0m (0%) 0Mi (0%) 0Mi (0%)
・・・
view-utilization
こちらもリソース情報を整形して出力してくれるプラグインです。
前述紹介したものよりシンプルなものになっています。
# クラスタ内のリソース情報を出力
$ kubectl view-utilization
Resource Requests %Requests Limits %Limits Allocatable Schedulable Free
CPU 750 37 0 0 2002 1252 1252
Memory 178257920 4 178257920 4 4136144896 3957886976 3957886976
# namespace 毎の Request/Limit を出力
$ kubectl view-utilization namespace
Namespace CPU Requests CPU Limits Memory Requests Memory Limits
default 0 0 0 0
kube-system 750 0 178257920 178257920
# Node 毎の Request/Limit を出力
$ kubectl view-utilization node
CPU : ▁
Memory: ▁
CPU Memory
Node Requests %Requests Limits %Limits Requests %Requests Limits %Limits
minikube 750 37 0 0 178257920 4 178257920 4
reap
クラスタ内で不要となったオブジェクト(Pod / ConfigMap など)を削除するプラグインです。
Dry-run で不要となっているオブジェクトを削除せずに一覧出力することも出来ます。
# 削除する内容はヘルプ参照
$ kubectl reap --help
Delete unused resources. Supported resources:
- Pods (whose status is not Running)
- ConfigMaps (not used in any Pods)
- Secrets (not used in any Pods or ServiceAccounts)
- PersistentVolumes (not satisfying any PersistentVolumeClaims)
- PersistentVolumeClaims (not used in any Pods)
- Jobs (completed)
- PodDisruptionBudgets (not targeting any Pods)
- HorizontalPodAutoscalers (not targeting any resources)
# 削除対象を一覧出力
$ kubectl reap cm --dry-run=client
configmap/test deleted (dry run)
# 不要なオブジェクトを削除
$ kubectl reap cm -n default
configmap/test deleted
RBAC
rbac-lookup
特定の Subject(ユーザやグループ、ServiceAccount)に割り振られている Role を一覧出力すること出来ます。
# default が含まれる Subject(ユーザやグループ、ServiceAccount)の Role 一覧を出力
$ kubectl rbac-lookup default
SUBJECT SCOPE ROLE
default cluster-wide ClusterRole/cluster-admin
system:bootstrappers:kubeadm:default-node-token cluster-wide ClusterRole/kubeadm:get-nodes
system:bootstrappers:kubeadm:default-node-token cluster-wide ClusterRole/system:node-bootstrapper
system:bootstrappers:kubeadm:default-node-token cluster-wide ClusterRole/system:certificates.k8s.io:certificatesigningrequests:nodeclient
system:bootstrappers:kubeadm:default-node-token kube-system Role/kube-proxy
system:bootstrappers:kubeadm:default-node-token kube-system Role/kubeadm:kubelet-config-1.20
system:bootstrappers:kubeadm:default-node-token kube-system Role/kubeadm:nodes-kubeadm-config
# coredns が含まれる Subject の Role 一覧を出力
$ kubectl rbac-lookup coredns
SUBJECT SCOPE ROLE
coredns cluster-wide ClusterRole/system:coredns
rolesum
対象の Subject に割り振られている RBAC を整形して出力します。
リソース毎の可否をテーブルで表示し、Role や RoleBinding も合わせて出力されます。
# coredns の RBAC を出力
$ kubectl rolesum coredns
ServiceAccount: kube-system/coredns
Secrets:
• */coredns-token-z54xv
Policies:
• [CRB] */system:coredns ⟶ [CR] */system:coredns
Resource Name Exclude Verbs G L W C U P D DC
endpoints [*] [-] [-] ✖ ✔ ✔ ✖ ✖ ✖ ✖ ✖
namespaces [*] [-] [-] ✖ ✔ ✔ ✖ ✖ ✖ ✖ ✖
nodes [*] [-] [-] ✔ ✖ ✖ ✖ ✖ ✖ ✖ ✖
pods [*] [-] [-] ✖ ✔ ✔ ✖ ✖ ✖ ✖ ✖
services [*] [-] [-] ✖ ✔ ✔ ✖ ✖ ✖ ✖ ✖
Security
popeye
クラスタ内をスキャンし潜在的な問題を出力するプラグインです。
単体のソフトウェアとしても利用可能で、コンテナとして呼び出すことも出来ます。
セキュリティ製品というよりかは、クラスタ内の問題になりそうな箇所のチェックしたい場合に有効かと思います。
指標については公式サイトを参照ください。
$ kubectl popeye
___ ___ _____ _____ K .-'-.
| _ \___| _ \ __\ \ / / __| 8 __| `\
| _/ _ \ _/ _| \ V /| _| s `-,-`--._ `\
|_| \___/_| |___| |_| |___| [] .->' a `|-'
Biffs`em and Buffs`em! `=/ (__/_ /
\_, ` _)
`----; |
GENERAL [MINIKUBE]
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
· Connectivity...................................................................................✅
· MetricServer...................................................................................✅
CLUSTERS (1 SCANNED) 💥 0 😱 0 🔊 0 ✅ 1 100٪
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
· Version........................................................................................✅
✅ [POP-406] K8s version OK.
・・・
DEPLOYMENTS (3 SCANNED) 💥 1 😱 1 🔊 1 ✅ 0 33٪
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
· kube-system/coredns............................................................................🔊
🔊 [POP-404] Deprecation check failed. Unable to assert resource version.
· kube-system/metrics-server.....................................................................😱
🐳 metrics-server
😱 [POP-106] No resources requests/limits defined.
· kube-system/nginx..............................................................................💥
🔊 [POP-404] Deprecation check failed. Unable to assert resource version.
🐳 nginx
💥 [POP-100] Untagged docker image in use.
😱 [POP-106] No resources requests/limits defined.
・・・
PODS (9 SCANNED) 💥 1 😱 8 🔊 0 ✅ 0 0٪
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
・・・
· kube-system/nginx-6799fc88d8-ws5td.............................................................💥
🔊 [POP-206] No PodDisruptionBudget defined.
😱 [POP-300] Using "default" ServiceAccount.
😱 [POP-301] Connects to API Server? ServiceAccount token is mounted.
😱 [POP-302] Pod could be running as root user. Check SecurityContext/image.
🐳 nginx
😱 [POP-205] Pod was restarted (10) times.
💥 [POP-100] Untagged docker image in use.
😱 [POP-106] No resources requests/limits defined.
😱 [POP-102] No probes defined.
😱 [POP-306] Container could be running as root user. Check SecurityContext/Image.
・・・
ROLES (10 SCANNED) 💥 0 😱 0 🔊 0 ✅ 10 100٪
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
· kube-system/extension-apiserver-authentication-reader..........................................✅
· kube-system/kube-proxy.........................................................................✅
· kube-system/kubeadm:kubelet-config-1.20........................................................✅
· kube-system/kubeadm:nodes-kubeadm-config.......................................................✅
· kube-system/system::leader-locking-kube-controller-manager.....................................✅
· kube-system/system::leader-locking-kube-scheduler..............................................✅
· kube-system/system:controller:bootstrap-signer.................................................✅
· kube-system/system:controller:cloud-provider...................................................✅
· kube-system/system:controller:token-cleaner....................................................✅
· kube-system/system:persistent-volume-provisioner...............................................✅
・・・
SUMMARY
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
Your cluster score: 87 -- B
o .-'-.
o __| B `\
o `-,-`--._ `\
[] .->' a `|-'
`=/ (__/_ /
\_, ` _)
`----; |
score
こちらも潜在的な問題を出力するプラグインです。
対象は yaml ファイルなので作成した yaml ファイルや get -o yaml
を「|」(パイプ)で渡して利用することができます。
こちらも指標は公式サイトを参照ください。
$ kubectl get deploy nginx -o yaml | kubectl score -
apps/v1/Deployment nginx in kube-system 💥
[CRITICAL] Container Security Context
· nginx -> The pod has a container with a writable root filesystem
Set securityContext.readOnlyRootFilesystem to true
· nginx -> The container is running with a low user ID
A userid above 10 000 is recommended to avoid conflicts with the
host. Set securityContext.runAsUser to a value > 10000
· nginx -> The container running with a low group ID
A groupid above 10 000 is recommended to avoid conflicts with the
host. Set securityContext.runAsGroup to a value > 10000
[CRITICAL] Container Resources
· nginx -> CPU limit is not set
Resource limits are recommended to avoid resource DDOS. Set
resources.limits.cpu
· nginx -> Memory limit is not set
Resource limits are recommended to avoid resource DDOS. Set
resources.limits.memory
· nginx -> CPU request is not set
Resource requests are recommended to make sure that the application
can start and run without crashing. Set resources.requests.cpu
· nginx -> Memory request is not set
Resource requests are recommended to make sure that the application
can start and run without crashing. Set resources.requests.memory
[CRITICAL] Container Image Tag
· nginx -> Image with latest tag
Using a fixed tag is recommended to avoid accidental upgrades
[CRITICAL] Pod NetworkPolicy
· The pod does not have a matching NetworkPolicy
Create a NetworkPolicy that targets this pod to control who/what
can communicate with this pod. Note, this feature needs to be
supported by the CNI implementation used in the Kubernetes cluster
to have an effect.
おわりに
今回は kubectl
のプラグインを試してみました。
主に表示系が多かったのですが、手軽に導入できて作業効率がアップできるのは良いと思いました。
プラグインの一覧は以下にまとめられています。
また、プラグインの開発ガイドもあるのでご参考までに。