LoginSignup
1
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-05-02

ストーリー

  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で全部出すという荒業も覚えました。(笑)

次回はこちらです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1