Kubernetes基礎(4):Pod-Container, Label, Node Schedule
1. Containerの特徴
Podの中で、1つの独立したサービスとして駆動することができます。
単一のContainerはPortを1つ以上持つことはできますが、1つのPod内でContainer同士Portが重複してはなりません。
図のようにContainer1からContaner2(localhost:8080)へのアクセスは可能だが、Container2(localhost:8000)へのアクセスは出来ません。アクセスができないのではなくそもそも8000 Portを持っているContainerが既にPodの中に存在しているので作成すらできません。
Podが生成がされた時に固有IPアドレスが割り当てられるがこのIPアドレスはKubernetes Cluster内でのみアクセスできるIPアドレスであって、外部からはこのIPアドレスにアクセスすることができません。
Podに問題が発生した場合、システムがPodの削除及び再生成をしますがPodが再生成されると既存のIPアドレスが変わるので外部からの連携では使えません。
Yaml:Pod Create
apiVersion: v1
kind: Pod
metadata:
name: pod-1
spec:
containers:
- name: container1
image: <image file name>
ports:
- containerPort: 8000
- name: container2
image: <image file name>
ports:
- containerPort: 8080
2. Labelの属性
LabelはPodだけでなく、全てのObjectに付与することができます。
Podで最も多く使われています。
Labelを使う理由は、目的に応じてObjectを分類し、分類されたObjectだけ繋げることができるからです。
Labelの構成はkey:valueになります。
1つのPodに複数のLabelを付与することができます。
上の図では、type:webのPodがdev環境、prod環境で2つありますが、type:db、serverも同じく2つあります。
このように定義されたLabelをServiceを生成するYamlファイルに指定することでPodとServiceの連携ができます。
使用目的に応じてLabelをよく設定して置くと使いたいPodの組み合わせなどが簡単にできます。
2-1 Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-2
labels:
type: web
lo: dev
spec:
containers:
- name: container
image: <image file name>
2-2 Service
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
selector:
type: web
ports:
- port: 8080
3. Node Scheduler
Podは複数のNodeの中で必ず1つのNodeに属する。
Pod生成時、Nodeを選択する手動選択方法と、Kubernetes schedulerが自動に選択する自動選択方法があります。
直接選択
[3-1]のようにNodeにLabelを付与して、Podを生成するYamlファイルで「nodeSelector」属性にNodeに付与したLabelを設定します。
3-1 Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-3
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
containers:
- name: container
image: <image file name>
自動選択
Nodeは利用可能なResource(Memory, CPU)とResourceのSizeを設定できます。
Node1は2つのPodがあって、Memoryが1Gが残っています。
Node2はPodがなく、3.7GのMemoryがあります。
Podを生成するときにPodで使うResourceとResourceのsizeを設定することができますが、[3-2]のPodは3GのMemoryを必要としているので
Kubernetes Schedulerが自動にNode2に属するよう設定をします。
ResourceのSizeを設定する大きな理由は、Pod内のApplicationで負荷が発生したとき、設定がないと無限にNodeのResourceを使用しようとするため、Node内の他のPodはresourceがなくPending状態になってしまいます。
3-2 Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-4
spec:
containers:
- name: container
image: <image file name>
resources:
requests:
memory: 2Gi
limits:
memory: 3Gi
Yaml:request & limits
Memoryはlimitを超えてしまうとすぐにPodを終了させます。
Cpuの場合は、limitを超えてもRequest数値まで下げるけどPodを終了させません。
このようにMemoryとCpuが異なる動作する理由は、各Resourceの特徴があるからです。
Referenece
- Kubernetes Pod Overview : https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/
- Labels and Selectors : https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
- Assigning Pods to Nodes : https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
Author And Source
この問題について(Kubernetes基礎(4):Pod-Container, Label, Node Schedule), 我々は、より多くの情報をここで見つけました https://qiita.com/umkyungil/items/bda9ad7a249853177eda著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .