OpenShiftのnodeSelector
OpenShiftのpodはnodeSelectorによって利用するノードが決まります。nodeSelectorにはざっくり2つのレベルがあり、projectのnodeSelectorとDeploymentConfigのnodeSelectorがあります。
上位のproject (namespace)レベルのnodeSelectorは、openshift.io/node-selector
アノテーションで指定されます。このプロジェクトのpodは全てこのregion=infra
ラベルの付与されたノード群にしかデプロイされません。
$ oc describe project default Name: default Created: 18 hours ago Labels: <none> Annotations: openshift.io/node-selector=region=infra openshift.io/sa.initialized-roles=true openshift.io/sa.scc.mcs=s0:c1,c0 openshift.io/sa.scc.supplemental-groups=1000000000/10000 openshift.io/sa.scc.uid-range=1000000000/10000 Display Name: <none> Description: <none> Status: Active Node Selector: region=infra Quota: <none>
アノテーションの付与にはoc annotate namespace
を利用します。projectはnamespaceのエイリアスでread-onlyなので、projectは更新できません。
oc annotate namespace default openshift.io/node-selector=region=infra
projectのnodeSelectorのデフォルトはmaster-config.xml
のprojectConfig: defaultNodeSelector
に定義できます。プロジェクトにこのopenshift.io/node-selector
アノテーションが付与されていない場合は、defaultNodeSelector
が暗黙で適用されます。
/etc/origin/master/master-config.xml
projectConfig: defaultNodeSelector: region=primary
project (namespace)の書き換えはOpenShift管理者の権限が必要で、ユーザはprojectレベルのnodeSelectorを超えてpodをデプロイすることはできません。これを利用して、OpenShift管理者は特定のプロジェクトに専用のノードを割り当てたりすることができます。
ユーザはDeploymentConfigに追加でnodeSelectorを指定できます。例えば地域ごとにノード群にzone=tokyo1
などのラベルを付与しておくことで、ユーザはnodeSelectorを指定してレイテンシの低いローカル地域のノード群にpodをデプロイ、というようなことが可能になります。
template: spec: nodeSelector: zone: tokyo1