#chiroito ’s blog

Java を中心とした趣味の技術について

OpenShift の Router が Infra ノードで動くようにする

Infraノードを足しても OpenShift のインフラである Router が Infra ノードに移らなかったので、移るようにするメモです。

ノードは以下の様になっています。

$ oc get nodes -n openshift-machine-api
NAME                                         STATUS   ROLES          AGE   VERSION
ip-10-0-129-22.us-east-2.compute.internal    Ready    infra,worker   20h   v1.16.2
ip-10-0-132-220.us-east-2.compute.internal   Ready    master         21h   v1.16.2
ip-10-0-141-130.us-east-2.compute.internal   Ready    infra,worker   20h   v1.16.2
ip-10-0-145-141.us-east-2.compute.internal   Ready    master         21h   v1.16.2
ip-10-0-165-220.us-east-2.compute.internal   Ready    master         21h   v1.16.2
ip-10-0-166-143.us-east-2.compute.internal   Ready    worker         20h   v1.16.2
ip-10-0-169-180.us-east-2.compute.internal   Ready    worker         20h   v1.16.2

ルータのポッドを見てみます。worker ノードで動いているのが分かります。

$ oc get pods -o wide -n openshift-ingress | grep router
router-default-859fd5d9df-5vfdr  1/1   Running    0   20h   10.130.2.11   ip-10-0-166-143.us-east-2.compute.internal   <none>  <none>
router-default-859fd5d9df-8rpqs  1/1   Running    0   20h   10.129.2.12   ip-10-0-169-180.us-east-2.compute.internal   <none>  <none>

設定を見てみます。以下の様に replicas が 2 になっているため router が 2 行出力されていました。

$ oc get -n openshift-ingress-operator ingresscontrollers/default -o yaml
apiVersion: operator.openshift.io/v1
kind: IngressController
metadata:
(略)
spec:
  replicas: 2
status:
  availableReplicas: 2
(略)

インフラノードで router が動くように、oc editでこの設定を変更します。

$ oc edit -n openshift-ingress-operator ingresscontrollers/default

spec に以下を足します。

  nodePlacement:
    nodeSelector:
      matchLabels:
        node-role.kubernetes.io/infra: ""

変更後の全体像は以下の感じです。

$ oc get -n openshift-ingress-operator ingresscontrollers/default -o yaml
apiVersion: operator.openshift.io/v1
kind: IngressController
metadata:
(略)
spec:
  nodePlacement:
    nodeSelector:
      matchLabels:
        node-role.kubernetes.io/infra: ""
  replicas: 2
status:
  availableReplicas: 2
(略)

Router が再起動するので、それが落ち着くと以下の様に Infra ノードで動くようになります

$ oc get pods -o wide -n openshift-ingress | grep router
router-default-859fd5d9df-5vfdr  1/1   Running    0   20h   10.130.2.11   ip-10-0-129-22.us-east-2.compute.internal   <none>  <none>
router-default-859fd5d9df-8rpqs  1/1   Running    0   20h   10.129.2.12   ip-10-0-141-130.us-east-2.compute.internal  <none>  <none>