16.2. 클러스터에서 IP 페일오버 구성
클러스터 관리자는 레이블 선택기에 정의된 대로 전체 클러스터 또는 노드의 하위 집합에서 IP 페일오버를 구성할 수 있습니다. 클러스터에서 여러 IP 페일오버 배포를 구성할 수도 있습니다. 여기서 각 배포는 서로 독립적입니다.
IP 페일오버 배포를 사용하면 제약 조건 또는 사용된 라벨과 일치하는 각 노드에서 페일오버 Pod가 실행됩니다.
이 Pod는 Keepalived를 실행하여 엔드포인트를 모니터링하고 VRRP(Virtual Router Redundancy Protocol)를 사용하여 첫 번째 노드가 서비스 또는 엔드포인트에 연결할 수 없는 경우 한 노드에서 다른 노드로의 가상 IP(VIP)를 페일오버할 수 있습니다.
프로덕션 용도의 경우 두 개 이상의 노드를 선택하는 selector
를 설정하고 선택한 노드 수와 동일한 replicas
를 설정합니다.
사전 요구 사항
-
cluster-admin
권한이 있는 사용자로 클러스터에 로그인합니다. - 풀 시크릿을 생성했습니다.
RHOSP(Red Hat OpenStack Platform)만 해당:
- 대상 환경에 RHCOS(RHOSP 클라이언트) 를 설치했습니다.
-
RHOSP
openrc.sh
rc 파일(RHCOS 문서) 도 다운로드했습니다.
프로세스
IP 페일오버 서비스 계정을 생성합니다.
$ oc create sa ipfailover
hostNetwork
의 SCC(보안 컨텍스트 제약 조건)를 업데이트합니다.$ oc adm policy add-scc-to-user privileged -z ipfailover
$ oc adm policy add-scc-to-user hostnetwork -z ipfailover
RHOSP(Red Hat OpenStack Platform)만 해당: RHOSP 포트에서 장애 조치 VIP 주소에 연결할 수 있도록 다음 단계를 완료합니다.
RHOSP CLI를 사용하여 RHOSP 클러스터의
allowed_address_pairs
매개변수에 기본 RHOSP API 및 VIP 주소를 표시합니다.$ 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'
IP 페일오버 배포의 다른 VIP 주소를 설정하고 RHOSP CLI에 다음 명령을 입력하여 RHOSP 포트에서 주소에 연결할 수 있도록 합니다. 기본 RHOSP API 및 VIP 주소를 IP 페일오버 배포의 페일오버 VIP 주소로 설정하지 마십시오.
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
- 배포 YAML 파일을 생성하여 배포에 대한 IP 페일오버를 구성합니다. 이후 단계에서 "IP 페일오버 구성용 배포 YAML 예"를 참조하십시오.
장애 조치(failover) VIP 주소를
OPENSHIFT_HA_VIRTUAL_IPS
환경 변수에 전달하도록 IP 페일오버 배포에서 다음 사양을 지정합니다.OPENSHIFT_HA_VIRTUAL_IPS
에1.1.1.1
VIP 주소를 추가하는 예apiVersion: apps/v1 kind: Deployment metadata: name: ipfailover-keepalived # ... spec: env: - name: OPENSHIFT_HA_VIRTUAL_IPS value: "1.1.1.1" # ...
배포 YAML 파일을 생성하여 IP 페일오버를 구성합니다.
참고RHOSP(Red Hat OpenStack Platform)의 경우 배포 YAML 파일을 다시 생성할 필요가 없습니다. 이전 명령의 일부로 이 파일을 이미 생성하셨습니다.
IP 페일오버 구성을 위한 배포 YAML의 예
apiVersion: apps/v1 kind: Deployment metadata: name: ipfailover-keepalived 1 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.17 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 2 value: "1.1.1.1-2" - name: OPENSHIFT_HA_VIP_GROUPS 3 value: "10" - name: OPENSHIFT_HA_NETWORK_INTERFACE 4 value: "ens3" #The host interface to assign the VIPs - name: OPENSHIFT_HA_MONITOR_PORT 5 value: "30060" - name: OPENSHIFT_HA_VRRP_ID_OFFSET 6 value: "0" - name: OPENSHIFT_HA_REPLICA_COUNT 7 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 8 value: "INPUT" #- name: OPENSHIFT_HA_NOTIFY_SCRIPT 9 # value: /etc/keepalive/mynotifyscript.sh - name: OPENSHIFT_HA_CHECK_SCRIPT 10 value: "/etc/keepalive/mycheckscript.sh" - name: OPENSHIFT_HA_PREEMPTION 11 value: "preempt_delay 300" - name: OPENSHIFT_HA_CHECK_INTERVAL 12 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 13
- 1
- IP 페일오버 배포의 이름입니다.
- 2
- 복제할 IP 주소 범위 목록입니다. 이 정보를 제공해야 합니다. 예:
1.2.3.4-6,1.2.3.9
. - 3
- VRRP에 대해 생성할 그룹 수입니다. 설정하지 않으면
OPENSHIFT_HA_VIP_GROUPS
변수로 지정된 각 가상 IP 범위에 대해 그룹이 생성됩니다. - 4
- IP 페일오버가 VRRP 트래픽을 보내는 데 사용하는 인터페이스 이름입니다. 기본적으로
eth0
이 사용됩니다. - 5
- IP 페일오버 pod는 각 VIP에서 이 포트에 대한 TCP 연결을 열려고 합니다. 연결이 설정되면 서비스가 실행 중인 것으로 간주됩니다. 이 포트가
0
으로 설정되면 테스트가 항상 통과합니다. 기본값은80
입니다. - 6
- 가상 라우터 ID를 설정하는 데 사용되는 오프셋 값입니다. 다른 오프셋 값을 사용하면 동일한 클러스터 내에 여러 IP 페일오버 구성이 존재할 수 있습니다. 기본 오프셋은
0
이며 허용되는 범위는0
에서255
사이입니다. - 7
- 생성할 복제본 수입니다. 이는 IP 페일오버 배포 구성의
spec.replicas
값과 일치해야 합니다. 기본값은2
입니다. - 8
- VRRP 트래픽을 허용하는
iptables
규칙을 자동으로 추가하는iptables
체인의 이름입니다. 값을 설정하지 않으면iptables
규칙이 추가되지 않습니다. 체인이 존재하지 않으면 이 체인이 생성되지 않으며 Keepalived는 유니캐스트 모드로 작동합니다. 기본값은INPUT
입니다. - 9
- 상태가 변경될 때마다 실행되는 스크립트의 Pod 파일 시스템의 전체 경로 이름입니다.
- 10
- 애플리케이션이 작동하는지 확인하기 위해 정기적으로 실행되는 스크립트의 Pod 파일 시스템에 있는 전체 경로 이름입니다.
- 11
- 더 높은 우선 순위의 호스트를 처리하는 전략입니다. 기본값은
preempt_delay 300
으로, 우선순위가 낮은 마스터가 VIP를 보유하는 경우 Keepalived 인스턴스가 5분 후에 VIP를 넘겨받습니다. - 12
- 확인 스크립트가 실행되는 기간(초)입니다. 기본값은
2
입니다. - 13
- 배포를 만들기 전에 풀 시크릿을 생성합니다. 그렇지 않으면 배포를 생성할 때 오류가 발생합니다.