kubectlの覚えていた方がよさそうなコマンド



# 記事の内容

過去に記事にしていた

[docker-composeの覚えていた方がよさそうなコマンド](https://qiita.com/toyotoyo_/items/da16f35ed2f7435878b1)

のkubectlコマンド版になります。

kubectlとdockerコマンドには似た内容のコマンドも多いのと、dockerコマンドも必要な時があるので参考にしてみてください。

# kubectlでよく使うコマンド

実際の業務でも使用したことがあるコマンドになります。

## kubectl get(確認コマンド)

### ポッドの確認
```
kubectl get po
```
※po pod podsでも同じ

### サービスの確認
```
kubectl get svc
```
※svc service servicesでも同じ

### ノードの確認
```
kubectl get node
```
※no node nodesでも同じ

### デプロイメントの確認
```
kubectl get deploy 
```
※deploy deployment deployments でも同じ
	
### パーシステントボリュームクライムの確認
```
kubectl get pvc 
```
※pvc PersistentVolumeClaim でも同じ

### パーシステントボリュームの確認
```
kubectl get pv
```
※ pv PersistentVolume でも同じ

### コンフィグマップの確認
```
kubectl get cm
```
※ cm configmap configmaps でも同じ



## kubectl get 確認コマンドのオプションなど
### 全てのネームスペースのpodを表示
```
kubectl get po --all-namespaces
```
### kube-systemネームスペースにあるpod を表示

```
kubectl get po -n kube-system
```

### pod の詳細表示
```
kubectl get po -o wide
```


---

## 確認以外でよく使うコマンド
### マニフェストファイルの記載内容を実行
```
kubectl apply -f foo.yaml
```

### マニフェストファイルで立ち上げた内容の削除
```
kubectl delete -f foo.json
```

### 特定のポッドの削除
```
kubectl delete po pod名
```
※ ポッドを削除してもデプロイメントのマニフェストがあれば自動で再起動します。なのでイメージの最新化をしたい場合などに使用しています。

### 特定のデプロイメントの削除
```
kubectl delete deploy deployment名
```
※ ポッドの起動自体を止めたいときなどに使用します。

### 特定のポッドのイメージ内に入る
```
kubectl exec -it pod名 bash
```
```
kubectl exec -it pod名 sh
```

### ポッド内でコマンドの実行
```
kubectl exec pod名 コマンド
```


### マニフェスト確認や変更
```
kubectl edit pod名など
```
※ マニフェストが開かれるので変更し保存すれば即座に反映されます

### ログ表示
```
kubectl logs pod名など
```

### 詳細表示
```
kubectl describe pod名など
```

### ファイルのコピー
```
kubectl cp コピー元のパス pod名:pod内のパス
```
```
kubectl cp pod名:pod内のパス コピー元のパス 
```
### コンフィグマップ登録
```
kubectl create configmap my-config --from-file=./my-config.toml 
```

#### ファイルが複数の場合

```
kubectl create configmap my-config --from-file=./my-config.toml --from-file=./my-config2.toml
```

### コンフィグマップ削除
```
kubectl delete configmap my-config
```

### コンフィグマップ確認
```
kubectl get configmap my-config -o yaml
```

### シークレット登録(CA証明書など)
```
kubectl create secret generic シークレット名 --from-file=./ca.crt
```
### シークレット削除(CA証明書など)
```
kubectl delete secret シークレット名
```

---

# istio関連で使うkubectl コマンド

## ゲートウェイの確認
```
kubectl get gateway
```
※ gatewayには解放ポートや証明書ファイルなどを設定

## バーチャルサービスの確認
```
kubectl get VirtualService
```
※ VirtualServiceはnginxで設定していた、ipを振り分けたりヘッダに何か追加に使用

## サービスエンティティの確認
```
kubectl get ServiceEntry
```
※ ServiceEntryは内部から外向けのアドレスやポートの設定に使用

---

# その他たまに使うkubectl コマンドなど

## クラスタの確認
```
kubectl get componentstatuses
```
## レプリカセットの確認
```
kubectl get rs
```
※ rs replicaset replicasets でも同じ

## デーモンセットの確認
```
kubectl get ds
```
※ ds daemonset daemonsets でも同じ

## エンドポイントの確認
```
kubectl get ep
```
※ ep endpoint endpoints でも同じ

## pod をjson形式で表示
```
kubectl get po -o json
```

## pod をyaml形式で表示
```
kubectl get po -o yaml
```

## ヘッダを出力しないでpodを表示(パイプ処理などに)
```
kubectl get po --no-headers
```

## 特定のポッドだけを調べたい場合など
```
kubectl get po | grep 調べたいポッド名
```

## 接続設定ファイルの確認
```
kubectl config view
```

## ラベルの追加（AAAラベルに値BBBを設定）
```
kubectl label po ポッド名 AAA=BBB
```

## ラベルの削除（AAAラベルを削除）
```
kubectl label po ポッド名 AAA-
```

---

# Kubernetes環境について
Kubernetesはオンプレでもインストール出来ますが、インストールトラブルも多く、運用するとなると余分なリソースが増えてきます。

Kubernetesで運用を考えるのであれば、GKEやEKSなどマネージドサービスの利用の検討をお勧めします。
※ GKEを業務で使っていますが、脆弱性のパッチなど自動で行ってくれるのはかなり助かります。

勉強のためなどにKubernetesを試すだけならkubeadmでインストールするより、minikubeやMicroK8sやRancher(k3s)でインストールするのもいいと思います。

MicroK8sをインストールするなら

[Raspberry Pi 4(1台)でKubernetes環境を構築 (Raspberry Pi 4 + Ubuntu 19.10 + MicroK8s)](https://qiita.com/toyotoyo_/items/c58b8d318bee2c735793)

の記事を前回書いていますので、確認してみてください。
Ubuntu環境さえあればかなり簡単にKubernetes環境が作れます。