入門Kubernetes
https://gyazo.com/3fab07a25337b52dde1a605cd30370ac
一回読んだけどそこそこ忘れているので読み直す
5章あたりから
code:sh
22:40:15 ⎈ minikube ~ dotfiles master 4.76 130
$ kubectl run kuard --image=gcr.io/kuar-demo/kuard-amd64:1
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/kuard created
22:40:39 ⎈ minikube ~ dotfiles master 4.54
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kuard-65f966f9df-l7csl 1/1 Running 0 23s
すでにコマンドは古いよって言われた
kubectl apply Podマニフェストを適用してインスタンスを作る
kubectl get pods Podの一覧を表示する
kubectl desctribe pods {name} Podの詳細を表示する`
Podの基本情報
Podで動いているコンテナの情報
Podの作成日時、再起動などのイベント情報
kubectl port-forward {name} port:portkube ポートフォワーディングじゃ
kubectl exec -it {name} {command} Docker Compose同様にコンテナ内でコマンド動かせる
kubectl cp {name}:/path/to/file /local/path/ コンテナにファイルコピーできる
アンチパターンだけど、障害復旧で一番早いのはこいつ
やるなら忘れずにイメージ作ってね
ヘルスチェック
liveness probe をマニフェストに記述することでコンテナの再起動する条件を定義できる
code:txt
13 │ livenessProbe:
14 │ httpGet:
15 │ path: /healthy
16 │ port: 8080
17 │ initialDelaySeconds: 7
18 │ timeoutSeconds: 1
19 │ periodSeconds: 10
20 │ failureThreshold: 3
httpでの死活監視とか
200-399のときに良さそう〜と判断する
それ以外のとき、ダメそうと判断して自動的にコンテナを再起動させる
initialDelaySeconds で起動してから監視を始めるまでの遅延、periodSeconds でアクセスの間隔を設定できる
http以外にもコマンドの実行結果やtcpソケットなどうも監視できる
再起動がかかると以下のように describe コマンドのEventに再起動がされた記録が残る
code:sh
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m23s default-scheduler Successfully assigned default/kuard to minikube
Normal Pulled 22s (x2 over 3m22s) kubelet, minikube Container image "gcr.io/kuar-demo/kuard-amd64:1" already present on machine
Normal Created 22s (x2 over 3m22s) kubelet, minikube Created container kuard
Normal Started 22s (x2 over 3m22s) kubelet, minikube Started container kuard
Warning Unhealthy 22s (x5 over 2m22s) kubelet, minikube Liveness probe failed: HTTP probe failed with statuscode: 500
Normal Killing 22s kubelet, minikube Container kuard failed liveness probe, will be restarted
Readiness probe というのもあるっぽい
リソースの割当
resources:
requests でコンテナに対する要求スペックをリクエストできる
cpu-shares という機能がLinuxカーネルにあるっぽい
CPU, memory以外にもGPUも制御できるっぽい
5.7までやった
Volumes
永続化するためのvolumeももちろん設定できる
書籍では hostPath を使っているけど、これはどこのPath?
minikubeを動かしているホストのpathということで良いんかな
LabelとAnnotation
code:sh
10:03:02 ⎈ minikube ~ src … 05_Pod master 2.78
$ kubectl run alpaca-prod --image=gcr.io/kuar-demo/kuard-amd64:1 --replicas=2 --labels="ver=1,app=alpaca,env=prod"
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/alpaca-prod created
10:20:32 ⎈ minikube ~ src … 05_Pod master 2.35
$ kubectl run alpaca-test --image=gcr.io/kuar-demo/kuard-amd64:1 --replicas=2 --labels="ver=2,app=alpaca,env=test"
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/alpaca-test created
10:21:33 ⎈ minikube ~ src … 05_Pod master 2.42
$ kubectl run bandicoot-prod --image=gcr.io/kuar-demo/kuard-amd64:1 --replicas=2 --labels="ver=2,app=bandicoot,env=prod"
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/bandicoot-prod created
10:22:07 ⎈ minikube ~ src … 05_Pod master 2.56
$ kubectl run bandicoot-staging --image=gcr.io/kuar-demo/kuard-amd64:1 --replicas=2 --labels="ver=2,app=bandicoot,env=staging"
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/bandicoot-staging created
10:22:21 ⎈ minikube ~ src … 05_Pod master 2.60
$ kubectl get deployments --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
alpaca-prod 2/2 2 2 117s app=alpaca,env=prod,ver=1
alpaca-test 2/2 2 2 56s app=alpaca,env=test,ver=2
bandicoot-prod 2/2 2 2 22s app=bandicoot,env=prod,ver=2
bandicoot-staging 2/2 2 2 8s app=bandicoot,env=staging,ver=2
$ kubectl get deployments -L ver,env
NAME READY UP-TO-DATE AVAILABLE AGE VER ENV
alpaca-prod 2/2 2 2 3m 1 prod
alpaca-test 2/2 2 2 119s 2 test
bandicoot-prod 2/2 2 2 85s 2 prod
bandicoot-staging 2/2 2 2 71s 2 staging
なるほどねー
--show-labels オプションでラベルを確認できる
-Lオプションで列表示ができる
code:sh
10:25:26 ⎈ minikube ~ src … 05_Pod master 2.40
$ kubectl get pods --selector="ver=2"
NAME READY STATUS RESTARTS AGE
alpaca-test-795b59d47d-4jrhq 1/1 Running 0 4m12s
alpaca-test-795b59d47d-6tq52 1/1 Running 0 4m12s
bandicoot-prod-669d4bc4f8-7vqbk 1/1 Running 0 3m38s
bandicoot-prod-669d4bc4f8-l9bs9 1/1 Running 0 3m38s
bandicoot-staging-68c95df8c4-8hmxf 1/1 Running 0 3m24s
bandicoot-staging-68c95df8c4-f5bzt 1/1 Running 0 3m24s
10:25:45 ⎈ minikube ~ src … 05_Pod master 2.32
$ kubectl get pods --selector="ver=2,app=bandicoot"
NAME READY STATUS RESTARTS AGE
bandicoot-prod-669d4bc4f8-7vqbk 1/1 Running 0 3m52s
bandicoot-prod-669d4bc4f8-l9bs9 1/1 Running 0 3m52s
bandicoot-staging-68c95df8c4-8hmxf 1/1 Running 0 3m38s
bandicoot-staging-68c95df8c4-f5bzt 1/1 Running 0 3m38s
10:25:59 ⎈ minikube ~ src … 05_Pod master 2.31
$ kubectl get pods --selector="app in (alpaca,bandicoot)"
NAME READY STATUS RESTARTS AGE
alpaca-prod-7bd97fbb5c-28szl 1/1 Running 0 5m48s
alpaca-prod-7bd97fbb5c-gn4rs 1/1 Running 0 5m48s
alpaca-test-795b59d47d-4jrhq 1/1 Running 0 4m47s
alpaca-test-795b59d47d-6tq52 1/1 Running 0 4m47s
bandicoot-prod-669d4bc4f8-7vqbk 1/1 Running 0 4m13s
bandicoot-prod-669d4bc4f8-l9bs9 1/1 Running 0 4m13s
bandicoot-staging-68c95df8c4-8hmxf 1/1 Running 0 3m59s
bandicoot-staging-68c95df8c4-f5bzt 1/1 Running 0 3m59s
--selector オプションで条件指定ができる
table:演算子
key=value key = value
key!=value key != value
key in (value1,value2) key の中にvalue1かvalue2が含まれる
key notin (values) keyの中にvaluesが含まれない
key keyが設定されている
!key keyが設定されていない
Labelはクラスタ内のオブジェクトグルーピング等に使うとよさそう。
Annotationはメタデータの保存、設定に使うとよさそう。
7.2までよんだ