一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -では、RaspberryPi の環境に Kubernetes を導入しました。無事、動作確認ができたので、さっそく学習していきたいです。
「Kubernetes 完全ガイド」を読んで進めてみます。ソースコードはこちら。
以前の投稿では、入門 Kubernetesを参考にしていましたが、Kubernetes 完全ガイドの方が網羅的に学べて良かったで、そちらを使いました。
Kubectl is a command line interface for running commands against Kubernetes clusters
※ https://kubernetes.io/docs/reference/kubectl/overview/
kubernetes を操作するための CLI です。
よく使うものを私なりに整理し、入門時に最小限覚えておけば良いものをまとめました。
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 createdKubernetes では、基本的にはマニフェストファイルを作成し、applyで適用するのが一般的のようです。それは、新規作成だけでなく、更新や削除も同様です。createやreplace,deleteといった CLI もありますが、applyでも同様の操作ができるため、使い分ける必要はあまりありません。applyで登録したマニュフェストファイルは履歴として保存されています。
※ Kubernetes: kubectl apply の動作
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 13mkubectl では、どのリソース種類(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.12pi@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という直接編集する方法もありますが、一時的な対応のみに利用するべきとのことです。
せっかくの宣言的ファイルが意味ないですよね。
余談ですが、serviceをsvcという風に省略できたりします。
※ (備忘)kubectl コマンドでの短縮リソース名
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に対する操作なためリソース種類の指定はありません。どれも開発時に必要が迫られれば使う感じですね。
こちら、どうしても動作できませんでした... 😥😥
今はそこまで必要としないので、一旦見送ります。
calicoだかflannelとかが関係しているっぽいのですが、理解が浅いため未解決です。
pi@raspi001:~ $ kubectl delete pod sample-pod
pod "sample-pod" deleted複数の pod を扱っているなら、deleteよりもapply --pruneの方が良いですが、今回は単体 pod なので、直接deleteしました。
入門当初は、どれほど覚えなくてはいけないのかと不安になっていたのですが、
蓋を開けてみると、そこまで多くはありませんでした。(まだ知らないものは多いと思いますが)
規則性として、 リソース種類とリソース名を指定する習慣にも徐々に慣れてきました。
面倒なときは、kubectl get allで全部出すという荒業も覚えました。(笑)
次回はこちらです。
タグ「クラウドインフラ」の記事
Dockerイメージ内の構造や設定が期待通りかどうかを検証する `container-structure-test` を知りました。container-structure-test GitHub リポジトリ。せっかくなので、試してみました。
BigQuery、皆さん使っていますか? 私は、業務でBigQueryを使ったデータ構築をしています。品質担保のため、BigQueryのSQLに対してテストをしたいと考えています。本記事では、BigQueryだけで完結し、かつ、Mockデータを差し替え可能なユニットテスト手法について、紹介します。
TikTokへスクレイプするバッチをGCP上で構築しました。GCP構築のシステム設計話と、その構築時に、ハマったことを共有します。