Open8
k8s作って壊して学ぶ
本番環境のアプリケーションはDeploymentというリソースを使用してPodを冗長化している。
特定のPodだけがハングしてしまったというケースにはkubectl deleteを使用して削除するというケースもある。
Deploymentが効いてあるべきPod数に戻す。
podt単体で再起動するコマンドは存在しない
英語のハードル
これおすすめのログ管理用
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: httpserver
labels:
app: httpserver
spec:
replicas: 3
selector:
matchLabels:
app: httpserver
template:
metadata:
labels:
app: httpserver
spec:
containers:
- name: nginx
image: nginx:1.25.3
ReplicaSetがPodを冗長化する役割を果たしている。
.metadata.labelsはReplicaSetを識別するためのラベル。
.spec.selector.matchLabelsはどのPodをReplicaSetが管理しているかを表すためのラベル。
.template.metadata.labelsはPodのラベル。これが上記のmatchLabelsと一致していなければReplicaSetの管理対象とはならない。
$ k get pod -n default
NAME READY STATUS RESTARTS AGE
httpserver-87c24 1/1 Running 0 62s
httpserver-cvgz4 1/1 Running 0 62s
httpserver-mq4gk 1/1 Running 0 62s
ReplicaSetは同じPodを複製し、Nameの末にはsuffixがつけられる。
$ k get rs -n default
NAME DESIRED CURRENT READY AGE
httpserver 3 3 3 2m26s
理想状態と現実状態
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.24.0
ports:
- containerPort: 80
Deploymentで作成したリソースにアクセスするためにはIPアドレスが割り振られているPodにアクセスしなければならないが消えたりしたらアクセスできなくなるので複数podへのアクセスをいい感じにルーティングするServiceという概念が存在する
ConfigMap
- コンテナ内のコマンドの引数として
- コンテナ環境変数
- volume
コンテナの環境変数として読み込む場合は変更した後にコンテナの再起動が必要になる