<

一足遅れて Kubernetes を学び始める - 04. kubectl -

ストーリー

  1. 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -
  2. 一足遅れて Kubernetes を学び始める - 02. Docker For Mac -
  3. 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -
  4. 一足遅れて Kubernetes を学び始める - 04. kubectl -
  5. 一足遅れて Kubernetes を学び始める - 05. workloads その 1 -
  6. 一足遅れて Kubernetes を学び始める - 06. workloads その 2 -
  7. 一足遅れて Kubernetes を学び始める - 07. workloads その 3 -
  8. 一足遅れて Kubernetes を学び始める - 08. discovery&LB その 1 -
  9. 一足遅れて Kubernetes を学び始める - 09. discovery&LB その 2 -
  10. 一足遅れて Kubernetes を学び始める - 10. config&storage その 1 -
  11. 一足遅れて Kubernetes を学び始める - 11. config&storage その 2 -
  12. 一足遅れて Kubernetes を学び始める - 12. リソース制限 -
  13. 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -
  14. 一足遅れて Kubernetes を学び始める - 14. スケジューリング -
  15. 一足遅れて Kubernetes を学び始める - 15. セキュリティ -
  16. 一足遅れて Kubernetes を学び始める - 16. コンポーネント -

前回

一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -では、RaspberryPi の環境に Kubernetes を導入しました。無事、動作確認ができたので、さっそく学習していきたいです。

参考

Kubernetes 完全ガイド」を読んで進めてみます。ソースコードはこちら

以前の投稿では、入門 Kubernetesを参考にしていましたが、Kubernetes 完全ガイドの方が網羅的に学べて良かったで、そちらを使いました。

kubectl

Kubectl is a command line interface for running commands against Kubernetes clusters

https://kubernetes.io/docs/reference/kubectl/overview/

kubernetes を操作するための CLI です。

よく使うものを私なりに整理し、入門時に最小限覚えておけば良いものをまとめました。

1. apply

pi@raspi001:~ $ cat << EOF > sample-pod.yaml
apiVersion: v1
kind: Pod
metadata:
 name: sample-pod
spec:
 containers:
   - name: nginx-container
     image: nginx:1.12
EOF
pi@raspi001:~ $ kubectl apply -f sample-pod.yaml
pod/sample-pod created

Kubernetes では、基本的にはマニフェストファイルを作成し、applyで適用するのが一般的のようです。それは、新規作成だけでなく、更新や削除も同様です。createreplace,deleteといった CLI もありますが、applyでも同様の操作ができるため、使い分ける必要はあまりありません。applyで登録したマニュフェストファイルは履歴として保存されています。

Kubernetes: kubectl apply の動作

2. set, get

pi@raspi001:~ $ kubectl set image pod sample-pod nginx-container=nginx:1.13
pod/sample-pod image updated
pi@raspi001:~ $ kubectl get pod sample-pod
NAME         READY   STATUS    RESTARTS   AGE
sample-pod   1/1     Running   1          13m

kubectl では、どのリソース種類(pod,service,etc)で、どのリソース名なのかを教えてあげる必要があります。 また、フィルタリングする機能としてlabelがあります。

# sample-pod-label.yaml
apiVersion: v1
kind: Pod
metadata:
 name: sample-pod
  labels:
   env: prod
   app: sample
spec:
 containers:
   - name: nginx-container
     image: nginx:1.12
pi@raspi001:~ $ kubectl get pod -l env=prod
No resources found.
pi@raspi001:~ $ kubectl apply -f sample-pod-label.yaml
pod/sample-pod configured
pi@raspi001:~ $ kubectl get pod -l env=prod
NAME         READY   STATUS    RESTARTS   AGE
sample-pod   1/1     Running   0          7m23s

更に詳細の情報が必要な場合は、describeを使います。

pi@raspi001:~ $ kubectl describe pod sample-pod
Name:               sample-pod
...

editという直接編集する方法もありますが、一時的な対応のみに利用するべきとのことです。 せっかくの宣言的ファイルが意味ないですよね。

余談ですが、servicesvcという風に省略できたりします。 ※ (備忘)kubectl コマンドでの短縮リソース名

3. debug

pi@raspi001:~ $ kubectl exec -it sample-pod /bin/sh
# exit
pi@raspi001:~ $ kubectl logs sample-pod
pi@raspi001:~ $ kubectl cp sample-pod.yaml sample-pod:/var/sample-pod.yaml
pi@raspi001:~ $ kubectl port-forward sample-pod 8888:80
Forwarding from 127.0.0.1:8888 -> 80
Forwarding from [::1]:8888 -> 80

どれもpodに対する操作なためリソース種類の指定はありません。どれも開発時に必要が迫られれば使う感じですね。

99. top

こちら、どうしても動作できませんでした... 😥😥 今はそこまで必要としないので、一旦見送ります。 calicoだかflannelとかが関係しているっぽいのですが、理解が浅いため未解決です。

お片付け

pi@raspi001:~ $ kubectl delete pod sample-pod
pod "sample-pod" deleted

複数の pod を扱っているなら、deleteよりもapply --pruneの方が良いですが、今回は単体 pod なので、直接deleteしました。

おわりに

入門当初は、どれほど覚えなくてはいけないのかと不安になっていたのですが、 蓋を開けてみると、そこまで多くはありませんでした。(まだ知らないものは多いと思いますが) 規則性として、 リソース種類とリソース名を指定する習慣にも徐々に慣れてきました。 面倒なときは、kubectl get allで全部出すという荒業も覚えました。(笑)

次回はこちらです。

役立ったら、☕でサポートしてね!

シェアしよう

関連するタグ