27.3.
27.3.1. OVN-Kubernetes 네트워크 플러그인으로 마이그레이션
클러스터 관리자는 클러스터의 네트워크 플러그인을 OVN-Kubernetes로 변경할 수 있습니다. 마이그레이션하는 동안 클러스터의 모든 노드를 재부팅해야 합니다.
마이그레이션을 수행하는 동안 클러스터를 사용할 수 없으며 워크로드가 중단될 수 있습니다. 서비스 중단이 허용되는 경우에만 마이그레이션을 수행합니다.
사전 요구 사항
- 네트워크 정책 격리 모드에서 OpenShift SDN CNI 네트워크 플러그인으로 구성된 클러스터입니다.
-
OpenShift CLI(
oc)를 설치합니다. - etcd 데이터베이스의 최근 백업을 사용할 수 있습니다.
- 각 노드에 대해 재부팅을 수동으로 트리거할 수 있습니다.
- 클러스터가 오류 없이 알려진 정상 상태입니다.
프로세스
클러스터 네트워크의 구성을 백업하려면 다음 명령을 입력합니다.
$ oc get Network.config.openshift.io cluster -o yaml > cluster-openshift-sdn.yaml
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": { "networkType": "OVNKubernetes" } } }'참고이 단계는 OVN-Kubernetes를 즉시 배포하지 않습니다.
선택 사항: OVN-쿠버네티스에 대한 여러 OpenShift SDN 기능의 자동 마이그레이션을 비활성화할 수 있습니다.
- 송신 IP
- 송신 방화벽
- 멀티 캐스트
이전에 명시된 OpenShift SDN 기능에 대한 구성 자동 마이그레이션을 비활성화하려면 다음 키를 지정합니다.
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": { "networkType": "OVNKubernetes", "features": { "egressIP": <bool>, "egressFirewall": <bool>, "multicast": <bool> } } } }'다음과 같습니다.
기본값은
true입니다.선택 사항: OVN-Kubernetes에 대해 다음 설정을 사용자 정의하여 네트워크 인프라 요구 사항을 충족할 수 있습니다.
- 최대 전송 단위(MTU)
- Geneve(Generic Network Virtualization Encapsulation) 오버레이 네트워크 포트
- OVN-Kubernetes IPv4 내부 서브넷
- OVN-Kubernetes IPv6 내부 서브넷
이전에 명시된 설정 중 하나를 사용자 정의하려면 다음 명령을 입력하고 사용자 정의합니다. 기본값을 변경할 필요가 없는 경우 패치에서 키를 생략합니다.
$ oc patch Network.operator.openshift.io cluster --type=merge \ --patch '{ "spec":{ "defaultNetwork":{ "ovnKubernetesConfig":{ "mtu":<mtu>, "genevePort":<port>, "v4InternalSubnet":"<ipv4_subnet>", "v6InternalSubnet":"<ipv6_subnet>" }}}}'다음과 같습니다.
mtu- Geneve 오버레이 네트워크용 MTU입니다.
port- Geneve 오버레이 네트워크용 UDP 포트입니다. 이 포트는 OpenShift SDN에서 사용하는 VXLAN 포트와 같을 수 없습니다.
ipv4_subnet- OVN-Kubernetes에서 내부용으로 사용할 IPv4 주소 범위입니다. IP 주소 범위가 OpenShift Container Platform 설치에 사용된 다른 서브넷과 겹치지 않도록 해야 합니다. IP 주소 범위는 클러스터에 추가할 수 있는 최대 노드 수보다 커야 합니다.
ipv6_subnet- OVN-Kubernetes에서 내부용으로 사용할 IPv6 주소 범위입니다. IP 주소 범위가 OpenShift Container Platform 설치에 사용된 다른 서브넷과 겹치지 않도록 해야 합니다. IP 주소 범위는 클러스터에 추가할 수 있는 최대 노드 수보다 커야 합니다.
$ oc patch Network.operator.openshift.io cluster --type=merge \ --patch '{ "spec":{ "defaultNetwork":{ "ovnKubernetesConfig":{ "mtu":1200 }}}}'MCO는 각 머신 구성 풀의 머신을 업데이트할 때 각 노드를 하나씩 재부팅합니다. 모든 노드가 업데이트될 때까지 기다려야 합니다. 다음 명령을 입력하여 머신 구성 풀 상태를 확인합니다.
$ oc get mcp
참고기본적으로 MCO는 풀당 한 번에 하나의 시스템을 업데이트하므로 클러스터 크기에 따라 마이그레이션에 걸리는 총 시간이 증가합니다.
호스트의 새 머신 구성 상태를 확인합니다.
머신 구성 상태 및 적용된 머신 구성 이름을 나열하려면 다음 명령을 입력합니다.
$ oc describe node | egrep "hostname|machineconfig"
출력 예
kubernetes.io/hostname=master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/desiredConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/reason: machineconfiguration.openshift.io/state: Done
다음 구문이 올바른지 확인합니다.
머신 구성이 올바른지 확인하려면 다음 명령을 입력합니다.
$ oc get machineconfig <config_name> -o yaml | grep ExecStart
머신 구성은 다음 업데이트를 systemd 구성에 포함해야 합니다.
ExecStart=/usr/local/bin/configure-ovs.sh OVNKubernetes
포드를 나열하려면 다음 명령을 입력합니다.
$ oc get pod -n openshift-machine-config-operator
출력 예
NAME READY STATUS RESTARTS AGE machine-config-controller-75f756f89d-sjp8b 1/1 Running 0 37m machine-config-daemon-5cf4b 2/2 Running 0 43h machine-config-daemon-7wzcd 2/2 Running 0 43h machine-config-daemon-fc946 2/2 Running 0 43h machine-config-daemon-g2v28 2/2 Running 0 43h machine-config-daemon-gcl4f 2/2 Running 0 43h machine-config-daemon-l5tnv 2/2 Running 0 43h machine-config-operator-79d9c55d5-hth92 1/1 Running 0 37m machine-config-server-bsc8h 1/1 Running 0 43h machine-config-server-hklrm 1/1 Running 0 43h machine-config-server-k9rtx 1/1 Running 0 43h
다음 명령을 입력하여 이전 출력에 표시된 첫 번째 머신 구성 데몬 포드에 대한 포드 로그를 표시합니다.
$ oc logs <pod> -n openshift-machine-config-operator
- 이전 명령의 출력에 표시된 로그의 오류를 해결합니다.
마이그레이션을 시작하려면 다음 명령 중 하나를 사용하여 OVN-Kubernetes 네트워크 플러그인을 구성합니다.
클러스터 네트워크 IP 주소 블록을 변경하지 않고 네트워크 공급자를 지정하려면 다음 명령을 입력합니다.
$ oc patch Network.config.openshift.io cluster \ --type='merge' --patch '{ "spec": { "networkType": "OVNKubernetes" } }'다른 클러스터 네트워크 IP 주소 블록을 지정하려면 다음 명령을 입력합니다.
$ oc patch Network.config.openshift.io cluster \ --type='merge' --patch '{ "spec": { "clusterNetwork": [ { "cidr": "<cidr>", "hostPrefix": <prefix> } ], "networkType": "OVNKubernetes" } }'중요마이그레이션 중에 서비스 네트워크 주소 블록을 변경할 수 없습니다.
후속 단계를 계속 진행하기 전에 Multus 데몬 세트 롤아웃이 완료되었는지 확인합니다.
$ oc -n openshift-multus rollout status daemonset/multus
포드를 다시 시작하는 데 시간이 다소 걸릴 수 있습니다.
출력 예
Waiting for daemon set "multus" rollout to finish: 1 out of 6 new pods have been updated... ... Waiting for daemon set "multus" rollout to finish: 5 of 6 updated pods are available... daemon set "multus" successfully rolled out
#!/bin/bash readarray -t POD_NODES <<< "$(oc get pod -n openshift-machine-config-operator -o wide| grep daemon|awk '{print $1" "$7}')" for i in "${POD_NODES[@]}" do read -r POD NODE <<< "$i" until oc rsh -n openshift-machine-config-operator "$POD" chroot /rootfs shutdown -r +1 do echo "cannot reboot node $NODE, retry" && sleep 3 done done#!/bin/bash for ip in $(oc get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}') do echo "reboot node $ip" ssh -o StrictHostKeyChecking=no core@$ip sudo shutdown -r -t 3 done
마이그레이션이 성공했는지 확인합니다.
네트워크 플러그인이 OVN-Kubernetes인지 확인하려면 다음 명령을 입력합니다.
$ oc get network.config/cluster -o jsonpath='{.status.networkType}{"\n"}'$ oc get nodes
Pod가 오류 상태가 아닌지 확인하려면 다음 명령을 입력합니다.
$ oc get pods --all-namespaces -o wide --sort-by='{.spec.nodeName}'노드의 Pod가 오류 상태인 경우 해당 노드를 재부팅합니다.
모든 클러스터 Operator가 비정상적인 상태가 아닌지 확인하려면 다음 명령을 입력합니다.
$ oc get co
클러스터 Operator를 사용할 수 없거나 성능이 저하된 경우 자세한 내용은 클러스터 Operator의 로그를 확인합니다.
마이그레이션이 성공하고 클러스터가 양호한 상태인 경우에만 다음 단계를 완료합니다.
CNO 구성 오브젝트에서 마이그레이션 구성을 제거하려면 다음 명령을 입력합니다.
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "migration": null } }'OpenShift SDN 네트워크 제공자에 대한 사용자 정의 구성을 제거하려면 다음 명령을 입력합니다.
$ oc patch Network.operator.openshift.io cluster --type='merge' \ --patch '{ "spec": { "defaultNetwork": { "openshiftSDNConfig": null } } }'OpenShift SDN 네트워크 공급자 네임스페이스를 제거하려면 다음 명령을 입력합니다.
$ oc delete namespace openshift-sdn