1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

OpenShiftのRouterをzone単位に散らす

Last updated at Posted at 2021-09-06

マルチゾーンに散らしたい


せっかくマルチゾーンのクラスターなのだから、Podはマルチゾーンに散らしたいものですよね。
ユーザー側で作成したPodはいくらでも散らせますが、OpenShiftデフォルトでデプロイされているPodを散らすには小技が必要です。Operatorで管理されているので、Operatorが知らないうちにコトを済ませる必要があったりするのです。(本末転倒感がありますが)

Router Podを散らすぞ

ユーザー側で作成したPodをマルチゾーンに散らしたのに、その手前に存在するRouter Podが片方のゾーンに寄ってしまっている…なんてことがあります。

$oc get po -owide -n openshift-ingress
NAME                              READY   STATUS    RESTARTS   AGE   IP               NODE          NOMINATED NODE   READINESS GATES
router-default-6bf85d74d8-klps5   1/1     Running   0          10d   172.17.150.225   10.244.4.41   <none>           <none>
router-default-6bf85d74d8-qtbjt   1/1     Running   0          10d   172.17.174.124   10.244.4.39   <none>           <none>

topologySpreadConstraintsを利用して散らしたいものです。
しかし、RouterはOperatorで管理しているので、Deploymentの定義を修正してももとに戻されてしまいます。
この場合、Operatorを一旦停止し、その間にDeploymentを修正することでOperatorに勝手に定義を戻されずに修正が可能です。

さっそく

$oc -n openshift-ingress-operator get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
ingress-operator   1/1     1            1           32d

このDeploymentのレプリカ数を0にします。

~ $oc -n openshift-ingress-operator scale deploy/ingress-operator --replicas=0
deployment.apps/ingress-operator scaled
~ $
~ $oc -n openshift-ingress-operator get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
ingress-operator   0/0     0            0           32d

この状態で、RouterのDeploymentを修正します。

$ oc -n openshift-ingress edit deploy/router-default

spec.containerと同列に以下を追記してみます。

      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: failure-domain.beta.kubernetes.io/zone
        whenUnsatisfiable: ScheduleAnyway

試しに、Router Podをスケールアウトしてみます。
ちゃんとゾーンに散らかっていることが分かります。

$oc -n openshift-ingress scale deploy router-default --replicas=4
deployment.apps/router-default scaled

$oc -n openshift-ingress get po -owide
NAME                              READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
router-default-69bdf79f44-58qhh   1/1     Running   0          111s    172.17.57.75    10.244.128.4   <none>           <none>
router-default-69bdf79f44-99qqx   1/1     Running   0          7m59s   172.17.54.199   10.244.64.20   <none>           <none>
router-default-69bdf79f44-gmrvk   1/1     Running   0          7m59s   172.17.10.52    10.244.128.8   <none>           <none>
router-default-69bdf79f44-qwf2n   1/1     Running   0          111s    172.17.11.207   10.244.0.5     <none>           <none>

ところで、さきほど停止したingress-operator は自動的に再起動します。

$oc -n openshift-ingress-operator get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
ingress-operator   1/1     1            1           32d

さきほど設定した散らし設定は生きています。

$oc -n openshift-ingress get deploy router-default -oyaml | grep -A5 topologySpreadConstraints
            f:topologySpreadConstraints:
              .: {}
              k:{"topologyKey":"failure-domain.beta.kubernetes.io/zone","whenUnsatisfiable":"ScheduleAnyway"}:
                .: {}
                f:maxSkew: {}
                f:topologyKey: {}
---
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: failure-domain.beta.kubernetes.io/zone
        whenUnsatisfiable: ScheduleAnyway
      volumes:
      - name: default-certificate
      

以上でございます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?