4.2. クラスター内の IP フェイルオーバーの設定
OpenShift Container Platform クラスターで IP フェイルオーバーを設定し、仮想 IP アドレスの高可用性を実現するには、選択したノードで Keepalived を実行するデプロイメントを作成し、サービスを監視して、ノードが利用不能になった場合に VIP をフェイルオーバーさせることができます。
IP フェイルオーバーのデプロイメントにより、使用される制約またはラベルに一致する各ノードでフェイルオーバー Pod が実行されるようになります。Keepalived を実行する Pod は、エンドポイントを監視し、最初のノードがサービスまたはエンドポイントに到達できない場合に、Virtual Router Redundancy Protocol (VRRP) を使用して仮想 IP(仮想 IP) をあるノードから別のノードにフェイルオーバーすることができます。
実稼働環境で使用する場合は、少なくとも 2 つのノードを選択し、選択したノードの数に相当する replicas を設定する selector を設定します。
前提条件
-
cluster-admin特権を持つユーザーとしてクラスターにログインしました。 - プルシークレットを作成しました。
Red Hat OpenStack Platform (RHOSP) のみ:
- 対象環境に RHOSP クライアント (RHCOS のドキュメントを参照) をインストールしました。
-
RHOSP
openrc.shrc ファイル (RHCOS ドキュメント) をダウンロードしました。
手順
IP フェイルオーバーのサービスアカウントを作成します。
$ oc create sa ipfailoverhostNetworkの Security Context Constraints (SCC) を更新します。$ oc adm policy add-scc-to-user privileged -z ipfailover$ oc adm policy add-scc-to-user hostnetwork -z ipfailoverRed Hat OpenStack Platform (RHOSP) のみ: フェイルオーバー仮想 IP アドレスが RHOSP ポートに到達できるように、次の手順を実行します。
RHOSP CLI を使用して、RHOSP クラスターの
allowed_address_pairsパラメーターのデフォルトの RHOSP API および仮想 IP アドレスを表示します。$ openstack port show <cluster_name> -c allowed_address_pairs出力例
*Field* *Value* allowed_address_pairs ip_address='192.168.0.5', mac_address='fa:16:3e:31:f9:cb' ip_address='192.168.0.7', mac_address='fa:16:3e:31:f9:cb'RHOSP CLI で次のコマンドを入力して、IP フェイルオーバーのデプロイメントに別の仮想 IP アドレスを設定し、RHOSP のポートでそのアドレスに到達できるようにします。デフォルトの RHOSP API および仮想 IP アドレスを、IP フェイルオーバーのデプロイメントのフェイルオーバー仮想 IP アドレスとして設定しないでください。
1.1.1.1フェイルオーバー IP アドレスを RHOSP ポートの許可されたアドレスとして追加する例$ openstack port set <cluster_name> --allowed-address ip-address=1.1.1.1,mac-address=fa:fa:16:3e:31:f9:cb- デプロイメントの IP フェイルオーバーを設定するためのデプロイメント YAML ファイルを作成します。後の手順の「IP フェイルオーバー設定のデプロイメント YAML の例」を参照してください。
IP フェイルオーバーのデプロイメントで次の仕様を指定して、フェイルオーバー仮想 IP アドレスを
OPENSHIFT_HA_VIRTUAL_IPS環境変数に渡します。OPENSHIFT_HA_VIRTUAL_IPSに1.1.1.1仮想 IP アドレスを追加する例apiVersion: apps/v1 kind: Deployment metadata: name: ipfailover-keepalived # ... spec: env: - name: OPENSHIFT_HA_VIRTUAL_IPS value: "1.1.1.1" # ...
IP フェイルオーバーを設定するためのデプロイメント YAML ファイルを作成します。
注記Red Hat OpenStack Platform (RHOSP) の場合、デプロイメント YAML ファイルを再作成する必要はありません。このファイルは、以前の手順ですでに作成されています。
IP フェイルオーバー設定のデプロイメント YAML の例
apiVersion: apps/v1 kind: Deployment metadata: name: ipfailover-keepalived labels: ipfailover: hello-openshift spec: strategy: type: Recreate replicas: 2 selector: matchLabels: ipfailover: hello-openshift template: metadata: labels: ipfailover: hello-openshift spec: serviceAccountName: ipfailover privileged: true hostNetwork: true nodeSelector: node-role.kubernetes.io/worker: "" containers: - name: openshift-ipfailover image: registry.redhat.io/openshift4/ose-keepalived-ipfailover-rhel9:v4.20 ports: - containerPort: 63000 hostPort: 63000 imagePullPolicy: IfNotPresent securityContext: privileged: true volumeMounts: - name: lib-modules mountPath: /lib/modules readOnly: true - name: host-slash mountPath: /host readOnly: true mountPropagation: HostToContainer - name: etc-sysconfig mountPath: /etc/sysconfig readOnly: true - name: config-volume mountPath: /etc/keepalive env: - name: OPENSHIFT_HA_CONFIG_NAME value: "ipfailover" - name: OPENSHIFT_HA_VIRTUAL_IPS value: "1.1.1.1-2" - name: OPENSHIFT_HA_VIP_GROUPS value: "10" - name: OPENSHIFT_HA_NETWORK_INTERFACE value: "ens3" #The host interface to assign the VIPs - name: OPENSHIFT_HA_MONITOR_PORT value: "30060" - name: OPENSHIFT_HA_VRRP_ID_OFFSET value: "10" - name: OPENSHIFT_HA_REPLICA_COUNT value: "2" #Must match the number of replicas in the deployment - name: OPENSHIFT_HA_USE_UNICAST value: "false" #- name: OPENSHIFT_HA_UNICAST_PEERS #value: "10.0.148.40,10.0.160.234,10.0.199.110" - name: OPENSHIFT_HA_IPTABLES_CHAIN value: "INPUT" #- name: OPENSHIFT_HA_NOTIFY_SCRIPT # value: /etc/keepalive/mynotifyscript.sh - name: OPENSHIFT_HA_CHECK_SCRIPT value: "/etc/keepalive/mycheckscript.sh" - name: OPENSHIFT_HA_PREEMPTION value: "preempt_delay 300" - name: OPENSHIFT_HA_CHECK_INTERVAL value: "2" livenessProbe: initialDelaySeconds: 10 exec: command: - pgrep - keepalived volumes: - name: lib-modules hostPath: path: /lib/modules - name: host-slash hostPath: path: / - name: etc-sysconfig hostPath: path: /etc/sysconfig # config-volume contains the check script # created with `oc create configmap keepalived-checkscript --from-file=mycheckscript.sh` - configMap: defaultMode: 0755 name: keepalived-checkscript name: config-volume imagePullSecrets: - name: openshift-pull-secretここでは、以下のようになります。
IP フェイルオーバーキープ- IP フェイルオーバーデプロイメントの名前を指定します。
OPENSHIFT_HA_VIRTUAL_IPS-
複製する IP アドレス範囲のリストを指定します。これは指定する必要があります。例:
1.2.3.4-6,1.2.3.9 OPENSHIFT_HA_VIP_GROUPS-
VRRP 用に作成するグループ数を指定します。これが設定されていない場合、グループは
OPENSHIFT_HA_VIP_GROUPS変数で指定されている仮想 IP 範囲ごとに作成されます。 OPENSHIFT_HA_NETWORK_INTERFACE-
IP フェイルオーバーが VRRP トラフィックを送信するために使用するインターフェイス名を指定します。デフォルトで
eth0が使用されます。 OPENSHIFT_HA_MONITOR_PORT-
IP フェイルオーバー Pod が、各仮想 IP 上のこのポートへの TCP 接続を開こうとすることを指定します。接続が設定されると、サービスは実行中であると見なされます。このポートが
0に設定される場合、テストは常にパスします。デフォルト値は80です。 OPENSHIFT_HA_VRRP_ID_OFFSET-
仮想ルーター ID を設定する際に使用するオフセット値を指定します。異なるオフセット値を使用すると、複数の IP フェイルオーバー設定が同じクラスター内に存在できるようになります。デフォルトのオフセットは
10で、許可される範囲は0から255までです。 OPENSHIFT_HA_REPLICA_COUNT-
作成するレプリカの数を指定します。これは、IP フェイルオーバー設定の
spec.replicas の値と一致する必要があります。デフォルト値は2です。 OPENSHIFT_HA_USE_UNICAST-
VRRP でユニキャストモードを使用するかどうかを指定します。デフォルト値は
falseです。 OPENSHIFT_HA_UNICAST_PEERS-
ユニキャストピアの IP アドレスのリストを指定します。
OPENSHIFT_HA_USE_UNICASTがtrueに設定されている場合は、これを提供する必要があります。 OPENSHIFT_HA_IPTABLES_CHAIN-
VRRP トラフィックを許可するための
iptablesルールを自動的に追加するiptablesチェーンの名前を指定します。この値が設定されていない場合、iptablesルールは追加されません。チェーンが存在しない場合は作成されず、Keepalived はユニキャストモードで動作します。デフォルトはINPUTです。 OPENSHIFT_HA_NOTIFY_SCRIPT- 状態が変化するたびに実行されるスクリプトの、Pod ファイルシステム内の完全なパス名を指定します。
OPENSHIFT_HA_CHECK_SCRIPT- アプリケーションが正常に動作していることを確認するために定期的に実行されるスクリプトの、Pod ファイルシステム内の完全なパス名を指定します。
OPENSHIFT_HA_PREEMPTION-
優先度の高い新しいホストを処理するためのストラテジーを指定します。デフォルト値は
preempt_delay 300で、優先順位の低いマスターが VIP を保持する場合に、Keepalived インスタンスが VIP を 5 分後に引き継ぎます。 OPENSHIFT_HA_CHECK_INTERVAL-
チェックスクリプトが実行される期間を秒単位で指定します。デフォルト値は
2です。 openshift-pull-secret- IP フェイルオーバーデプロイメントに使用するプルシークレットの名前を指定します。デプロイメントを作成する前にプルシークレットを作成します。作成しない場合には、デプロイメントの作成時にエラーが発生します。