Pod
k8s におけるコンテナ管理の基本(最小)単位
同じ実行環境上で動作するアプリケーションコンテナとストレージボリュームの集まり
1 コンテナ 1 プロセスの原則を維持しつつ、kubernetes 管理下でセットでの配置を実現する
Pod は同一マシン上に配置される
ポッドは一時的な存在
コンテナが新規に立ち上がる場合には常に初期化
IP アドレスも可変
=> サービス名の利用
作成のポイント
コンテナはそれぞれ違うマシンに配置されても常に動作するかどうかの点で考える
マニュフェスト
kubernetes オブジェクトをテキストファイルで表現したもの
Kubernetes API サーバは Pod マニフェストを受け入れ、その後 etcd に保存する 作成
コマンド
code:shell
$ kubectl run kuard --image=grc.io/kuar-demo/kuard-adm64:1
削除
code:shell
$ kubectl delete deployments/kuard
Pod 取得
namespace 指定
code:shell
$ kubectl get pods -n test-name-space
サンプル
マニフェスト
code:yaml
apiVersion: v1
kind: Pod
metadata:
name: kuard
spec:
containers:
- image: kuard-amd64:1
imagePullPolicy: IfNotPresent
name: kuard
ports:
- containerPort: 8080
name: http
protocol: TCP
apply
code:shell
$ kubectl apply -f kuard-prod.yml
詳細情報表示
code:shell
$ kubectl describe pods kuard
delete
code:shell
$ kubectl delete -f kuard-prod.yml
pod "kuard" deleted
即削除されるわけではなく 30 秒程度の猶予期間がある
新規のリクエストを受け付けず、既存のリクエストの処理時間
データの永続化が必要なら PersistentVolume を使用する必要がある
アクセス
Kubernetes のマスターを経由してローカルマシンとワーカーノード間のトンネル作成
code:shell
$ kubectl port-forward kuard 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from ::1:8080 -> 8080 http://localhost:8080/ で接続
リソース管理
リソース要求(resource request)
アプリケーションを動かすのに最低限必要なリソースを指定
例 : 1 CPU の半分が空いていて、 128 MB のメモリを割り当てられるマシンへの配置
code:yaml
apiVersion: v1
kind: Pod
metadata:
name: kuard
spec:
containers:
- image: kuard-amd64:1
imagePullPolicy: IfNotPresent
name: kuard
requests:
cpu: "500m"
memory: "128Mi"
livenessProbe:
httpGet:
path: /healthy
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 10
failureThreshold: 3
ports:
- containerPort: 8080
name: http
protocol: TCP
リソース要求はコンテナごとに設定
リソース制限(resource limit)
アプリケーションが使用する可能性がある最大リソース量を指定
例 : 1 CPU コア、 256 MB メモリの上限の追加
code:yaml
apiVersion: v1
kind: Pod
metadata:
name: kuard
spec:
containers:
- image: kuard-amd64:1
imagePullPolicy: IfNotPresent
name: kuard
requests:
cpu: "500m"
memory: "128Mi"
limits:
cpu: "1000m"
memory: "256Mi"
livenessProbe:
httpGet:
path: /healthy
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 10
failureThreshold: 3
ports:
- containerPort: 8080
name: http
protocol: TCP
CPU がアイドル状態であっても limits が 1 core はそれ以上利用することができない