#本記事の目的
自分が検証でKubernetesをいじる際によく使う、便利なkubectlコマンドについてまとめる。
#kubectlコマンド
####kubectl create <リソース名> <オブジェクト名> --dry-run=client -o yaml > <マニフェストファイル名>
対象のリソースに関するマニフェストファイルを作成する。
自分の場合は、以下のリソースで使用する頻度が高い。
(以下で挙げているリソース以外にも、様々なリソースを作成可能)
- deployment
- service
- namespace
- job
- configmap
- secret
$ kubectl create deployment nginx --image=nginx --replicas=2 --dry-run=client -o yaml > nginx.yaml
$ cat nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}
リソースに応じて、適宜オプションを追加すると良い。
ちなみに--dry-runのオプションの使い分けについては、公式ドキュメントでは以下のように説明がある。
"none"、"server"、"client "のいずれかでなければならない。"client"の場合、送信されるオブジェクトを送信せずに出力するだけである。"server"の場合、リソースを永続化することなく、サーバーサイドのリクエストを送信する。
kubectl apply -f <マニフェストファイル名>
作成したマニフェストファイルに沿ってリソースを生成・変更する。
上記の"kubectl create"コマンドと一緒に用いられる事が多い。
$ kubectl apply -f nginx.yaml
deployment.apps/nginx created
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 2/2 2 2 5m44s
kubectl get <リソース名> -o wide
通常の"kubectl get"コマンドより多くの情報を取得できる。
特にリソースをpodで実行すると、オブジェクト名やステータスに加えて、IPアドレスや稼働ノードの情報も得られるため使い勝手が良い。
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE ...
nginx-6799fc88d8-bhqj6 1/1 Running 0 2m34s 10.1.0.6 worker1 ...
nginx-6799fc88d8-s5qrp 1/1 Running 0 28s 10.1.0.7 worker2 ...
kubectl describe <リソース名> <オブジェクト名>
特定のオブジェクトに関する詳細情報を取得する。
"kubectl get"コマンドでは入手できない詳細なステータスやイベントを入手する事が可能なため、リソースが想定通りに稼働しているかどうかを調査する際に用いる事が多い。
$ kubectl describe deployment nginx
Name: nginx
Namespace: default
CreationTimestamp: xxx
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=nginx
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: nginx
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Progressing True NewReplicaSetAvailable
Available True MinimumReplicasAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-6799fc88d8 (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 5m59s deployment-controller Scaled up replica set nginx-6799fc88d8 to 1
Normal ScalingReplicaSet 3m53s deployment-controller Scaled up replica set nginx-6799fc88d8 to 2
kubectl edit <リソース名> <オブジェクト名>
エディタを用いて、既に生成済のオブジェクトの設定を更新する。
通常はマニフェストファイルを修正し、applyコマンドで適用する事で変更を反映するが、このコマンドを使えば簡易的に設定を更新できる。
ただしマニフェストファイルには変更が反映されないため、きちんとマニフェストファイルで管理したい場合は使用しない事が推奨される。
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 2/2 2 2 5m44s
$ kubectl edit deployment nginx # replicasを2→3に変更
deployment.apps/nginx edited
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 3/3 3 3 12m
#感想
他に便利なコマンドがあれば、適宜更新予定。
#参考文献