【kubectl-neat】すっきりしたマニフェストを取得する
はじめに
kubectl-neat について紹介します。
kubectl-neat
kubectl-neat
は、Kubernetes のマニフェストから不要な部分を除いて、みやすくする kubectl プラグインです。
GitHub - itaysk/kubectl-neat: Clean up Kubernetes yaml and json output to make it readable
Clean up Kubernetes yaml and json output to make it readable - itaysk/kubectl-neat
不要なstatus
フィールドやmetadata
フィールド、空のフィールドを削除して表示してくれます。
また、デフォルトの値も表示されないようになっています。(たとえ、ユーザーが明示的にデフォルト値を指定したとしても)
そのほか、細かい部分は下記で表示するかどうか記載されています。
GitHub - itaysk/kubectl-neat: Clean up Kubernetes yaml and json output to make it readable
Clean up Kubernetes yaml and json output to make it readable - itaysk/kubectl-neat
下記 2 つは、kubectl get pod myapp -o yaml
とkubectl-neat
の出力の違いになります。だいぶ不要な部分がなくなり、見やすくなっています。
1❯ kubectl get pod myapp -o yaml
2apiVersion: v1
3kind: Pod
4metadata:
5 annotations:
6 kubectl.kubernetes.io/last-applied-configuration: |
7 {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"labels":{"name":"myapp"},"name":"myapp","namespace":"default"},"spec":{"containers":[{"image":"nginx","name":"web-container","ports":[{"contain
8erPort":80}]}]}}
9 creationTimestamp: "2023-12-09T08:20:24Z"
10 labels:
11 name: myapp
12 name: myapp
13 namespace: default
14 resourceVersion: "184928"
15 uid: c6e802e4-0d65-469d-8c42-d1ba090e1eff
16spec:
17 containers:
18 - image: nginx
19 imagePullPolicy: Always
20 name: web-container
21 ports:
22 - containerPort: 80
23 protocol: TCP
24 resources: {}
25 terminationMessagePath: /dev/termination-log
26 terminationMessagePolicy: File
27 volumeMounts:
28 - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
29 name: kube-api-access-hr4gc
30 readOnly: true
31 dnsPolicy: ClusterFirst
32 enableServiceLinks: true
33 nodeName: docker-desktop
34 preemptionPolicy: PreemptLowerPriority
35 priority: 0
36 restartPolicy: Always
37 schedulerName: default-scheduler
38 securityContext: {}
39 serviceAccount: default
40 serviceAccountName: default
41 terminationGracePeriodSeconds: 30
42 tolerations:
43 - effect: NoExecute
44 key: node.kubernetes.io/not-ready
45 operator: Exists
46 tolerationSeconds: 300
47 - effect: NoExecute
48 key: node.kubernetes.io/unreachable
49 operator: Exists
50 tolerationSeconds: 300
51 volumes:
52 - name: kube-api-access-hr4gc
53 projected:
54 defaultMode: 420
55 sources:
56 - serviceAccountToken:
57 expirationSeconds: 3607
58 path: token
59 - configMap:
60 items:
61 - key: ca.crt
62 path: ca.crt
63 name: kube-root-ca.crt
64 - downwardAPI:
65 items:
66 - fieldRef:
67 apiVersion: v1
68 fieldPath: metadata.namespace
69 path: namespace
70status:
71 conditions:
72 - lastProbeTime: null
73 lastTransitionTime: "2023-12-09T08:20:24Z"
74 status: "True"
75 type: Initialized
76 - lastProbeTime: null
77 lastTransitionTime: "2023-12-09T08:20:28Z"
78 status: "True"
79 type: Ready
80 - lastProbeTime: null
81 lastTransitionTime: "2023-12-09T08:20:28Z"
82 status: "True"
83 type: ContainersReady
84 - lastProbeTime: null
85 lastTransitionTime: "2023-12-09T08:20:24Z"
86 status: "True"
87 type: PodScheduled
88 containerStatuses:
89 - containerID: docker://5d28cf7236633824b0a4f32f973375768093355166c3739591346facefd5b91a
90 image: nginx:latest
91 imageID: docker-pullable://nginx@sha256:10d1f5b58f74683ad34eb29287e07dab1e90f10af243f151bb50aa5dbb4d62ee
92 lastState: {}
93 name: web-container
94 ready: true
95 restartCount: 0
96 started: true
97 state:
98 running:
99 startedAt: "2023-12-09T08:20:27Z"
100 hostIP: 192.168.65.3
101 phase: Running
102 podIP: 10.1.9.233
103 podIPs:
104 - ip: 10.1.9.233
105 qosClass: BestEffort
106 startTime: "2023-12-09T08:20:24Z"
1❯ kubectl neat get -- pod myapp
2apiVersion: v1
3kind: Pod
4metadata:
5 labels:
6 name: myapp
7 name: myapp
8 namespace: default
9spec:
10 containers:
11 - image: nginx
12 name: web-container
13 ports:
14 - containerPort: 80
15 volumeMounts:
16 - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
17 name: kube-api-access-hr4gc
18 readOnly: true
19 preemptionPolicy: PreemptLowerPriority
20 priority: 0
21 serviceAccountName: default
22 tolerations:
23 - effect: NoExecute
24 key: node.kubernetes.io/not-ready
25 operator: Exists
26 tolerationSeconds: 300
27 - effect: NoExecute
28 key: node.kubernetes.io/unreachable
29 operator: Exists
30 tolerationSeconds: 300
31 volumes:
32 - name: kube-api-access-hr4gc
33 projected:
34 sources:
35 - serviceAccountToken:
36 expirationSeconds: 3607
37 path: token
38 - configMap:
39 items:
40 - key: ca.crt
41 path: ca.crt
42 name: kube-root-ca.crt
43 - downwardAPI:
44 items:
45 - fieldRef:
46 fieldPath: metadata.namespace
47 path: namespace
インストール
インストールはkrew
を使ってできます。
1kubectl krew install neat
使い方
kubectl-neat
には、下記 2 つの使い方があります。
- ローカル(ファイルもしくは標準入力)
- Kubernetes(kubectl get 経由)
ローカル
下記のコマンドで標準入力経由でマニフェストを出力できます。
1kubectl get [resource] [name] -o yaml | kubectl neat
1kubectl get pod myapp -o yaml | kubectl neat
ローカルのファイルを指定しても実行可能です。
1kubectl neat -f [manifest file]
1kubectl neat -f pod.yaml
Kubernetes
kubectl neat get
を使うことで、kubectl get
から取得したものをkubectl neat
で実行した形になります。
1kubectl neat get -- [resource] [name]
1kubectl neat get -- pod myapp
エイリアス
ちなみに、私は下記のエイリアスを設定して使ってみることにします。
1alias kng='kubectl neat get --'
下記のように実行できるようになります。
1kng pod myapp
気になった点
使ってみて少しだけ気になった点を挙げます。
resources.limits
とresources.requests
を同じ値で設定した場合は、resources.limits
のみ表示されるようになっているみたいです。
1❯ kubectl neat get -- pod myapp
2
3...
4
5 resources:
6 limits:
7 cpu: 50m
8 memory: 32Mi
9
10...
11