10.2. 클러스터 MTU 변경
클러스터 관리자는 클러스터의 최대 전송 단위(MTU)를 변경할 수 있습니다. 마이그레이션이 중단되고 MTU 업데이트가 롤아웃되므로 클러스터의 노드를 일시적으로 사용할 수 없게 될 수 있습니다.
다음 절차에서는 머신 구성, DHCP 또는 ISO를 사용하여 클러스터 MTU를 변경하는 방법을 설명합니다. DHCP 또는 ISO 접근법을 사용하는 경우 절차를 완료하기 위해 클러스터를 설치한 후 보관한 구성 아티팩트를 참조해야 합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 클러스터에 로그인합니다. 클러스터의 대상 MTU를 확인했습니다. 올바른 MTU는 클러스터가 사용하는 클러스터 네트워크 공급자에 따라 다릅니다.
-
OVN-Kubernetes: 클러스터 MTU는 클러스터의 가장 낮은 하드웨어 MTU 값보다
100
미만으로 설정되어야 합니다. -
OpenShift SDN: 클러스터 MTU는 클러스터에서 가장 낮은 하드웨어 MTU 값보다
50
미만으로 설정되어야 합니다.
-
OVN-Kubernetes: 클러스터 MTU는 클러스터의 가장 낮은 하드웨어 MTU 값보다
절차
클러스터 네트워크의 MTU를 늘리거나 줄이려면 다음 절차를 완료합니다.
클러스터 네트워크의 현재 MTU를 가져오려면 다음 명령을 입력합니다.
$ oc describe network.config cluster
출력 예
... Status: Cluster Network: Cidr: 10.217.0.0/22 Host Prefix: 23 Cluster Network MTU: 1400 Network Type: OpenShiftSDN Service Network: 10.217.4.0/23 ...
하드웨어 MTU 설정을 준비합니다.
DHCP를 사용하여 하드웨어 MTU를 지정하는 경우 다음 dnsmasq 구성과 같은 DHCP 구성을 업데이트합니다.
dhcp-option-force=26,<mtu>
다음과 같습니다.
<mtu>
- 알릴 DHCP 서버의 하드웨어 MTU를 지정합니다.
- PXE로 커널 명령줄을 사용하여 하드웨어 MTU를 지정하는 경우 그에 따라 해당 구성을 업데이트합니다.
NetworkManager 연결 구성에 하드웨어 MTU를 지정하는 경우 다음 단계를 완료합니다. 이 방법은 DHCP, 커널 명령줄 또는 기타 방법으로 네트워크 구성을 명시적으로 지정하지 않은 경우 OpenShift Container Platform의 기본값입니다. 다음 절차에서는 클러스터 노드에서 모두 동일한 기본 네트워크 구성을 사용하여 수정되지 않은 상태로 작동해야 합니다.
기본 네트워크 인터페이스를 찾습니다.
OpenShift SDN 클러스터 네트워크 공급자를 사용하는 경우 다음 명령을 입력합니다.
$ oc debug node/<node_name> -- chroot /host ip route list match 0.0.0.0/0 | awk '{print $5 }'
다음과 같습니다.
<node_name>
- 클러스터의 노드 이름을 지정합니다.
OVN-Kubernetes 클러스터 네트워크 공급자를 사용하는 경우 다음 명령을 입력합니다.
$ oc debug node/<node_name> -- chroot /host nmcli -g connection.interface-name c show ovs-if-phys0
다음과 같습니다.
<node_name>
- 클러스터의 노드 이름을 지정합니다.
이전 명령에서 반환된 인터페이스 이름에 대해 NetworkManager가 생성한 연결 프로필을 찾으려면 다음 명령을 입력합니다.
$ oc debug node/<node_name> -- chroot /host nmcli c | grep <interface>
다음과 같습니다.
<interface>
- 기본 네트워크 인터페이스의 이름을 지정합니다.
OpenShift SDN의 출력 예
Wired connection 1 46da4a6a-xxxx-xxxx-xxxx-ac0ca900f213 ethernet ens3
원래 연결 구성이 없는 OVN-Kubernetes의 출력 예
ovs-if-phys0 353774d3-0d3d-4ada-b14e-cd4d8824e2a8 ethernet ens4 ovs-port-phys0 332ef950-b2e5-4991-a0dc-3158977c35ca ovs-port ens4
OVN-Kubernetes 클러스터 네트워크 공급자의 경우 2개 또는 3개의 연결 관리자 프로필이 반환됩니다.
- 이전 명령에서 두 개의 프로필만 반환하는 경우 기본 NetworkManager 연결 구성을 템플릿으로 사용해야 합니다.
-
이전 명령에서 세 개의 프로필을 반환하는 경우 다음 수정 사항에 대한 템플릿으로
ovs-if-phys0
또는ovs-port-phys0
이라는 프로필을 사용합니다.
기본 네트워크 인터페이스에 대한 NetworkManager 연결 구성의 파일 이름을 가져오려면 다음 명령을 입력합니다.
$ oc debug node/<node_name> -- chroot /host nmcli -g UUID,FILENAME c show | grep <uuid> | cut -d: -f2
다음과 같습니다.
<node_name>
- 클러스터의 노드 이름을 지정합니다.
<uuid>
- NetworkManager 연결 프로필의 UUID를 지정합니다.
출력 예
/run/NetworkManager/system-connections/Wired connection 1.nmconnection
노드에서 NetworkManager 연결 구성을 복사하려면 다음 명령을 입력합니다.
$ oc debug node/<node_name> -- chroot /host cat "<profile_path>" > config.nmconnection
다음과 같습니다.
<node_name>
- 클러스터의 노드 이름을 지정합니다.
<profile_path>
- 이전 단계에서 NetworkManager 연결의 파일 시스템 경로를 지정합니다.
NetworkManager 연결 구성 예
[connection] id=Wired connection 1 uuid=3e96a02b-xxxx-xxxx-ad5d-61db28678130 type=ethernet autoconnect-priority=-999 interface-name=enp1s0 permissions= timestamp=1644109633 [ethernet] mac-address-blacklist= [ipv4] dns-search= method=auto [ipv6] addr-gen-mode=stable-privacy dns-search= method=auto [proxy] [.nmmeta] nm-generated=true
이전 단계에서
config.nmconnection
파일에 저장된 NetworkManager 구성 파일을 편집합니다.다음 값을 설정합니다.
-
802-3-Ethernet.mtu
: 시스템의 기본 네트워크 인터페이스에 대한 MTU를 지정합니다. -
connection.interface-name
: 선택 사항: 이 구성이 적용되는 네트워크 인터페이스 이름을 지정합니다. -
connection.autoconnect-priority
: 선택 사항:0
이상의 정수 우선 순위 값을 지정하여 이 프로필이 동일한 인터페이스에 대해 다른 프로필에서 사용되는지 확인하는 것이 좋습니다. OVN-Kubernetes 클러스터 네트워크 공급자를 사용하는 경우 이 값은100
보다 작아야 합니다.
-
-
connection.uuid
필드를 제거합니다. 다음 값을 변경합니다.
-
connection.id
: 선택 사항: 다른 NetworkManager 연결 프로필 이름을 지정합니다.
-
NetworkManager 연결 구성 예
[connection] id=Primary network interface type=ethernet autoconnect-priority=10 interface-name=enp1s0 [802-3-ethernet] mtu=8051
컨트롤 플레인 노드 및 클러스터의 작업자 노드에 대해 하나씩 두 개의
MachineConfig
오브젝트를 생성합니다.control-plane-interface.bu
파일에 다음 Butane 구성을 생성합니다.variant: openshift version: 4.11.0 metadata: name: 01-control-plane-interface labels: machineconfiguration.openshift.io/role: master storage: files: - path: /etc/NetworkManager/system-connections/<connection_name> 1 contents: local: config.nmconnection 2 mode: 0600
worker-interface.bu
파일에 다음 Butane 구성을 생성합니다.variant: openshift version: 4.11.0 metadata: name: 01-worker-interface labels: machineconfiguration.openshift.io/role: worker storage: files: - path: /etc/NetworkManager/system-connections/<connection_name> 1 contents: local: config.nmconnection 2 mode: 0644
다음 명령을 실행하여 Butane 구성에서
MachineConfig
오브젝트를 생성합니다.$ for manifest in control-plane-interface worker-interface; do butane --files-dir . $manifest.bu > $manifest.yaml done
MTU 마이그레이션을 시작하려면 다음 명령을 입력하여 마이그레이션 구성을 지정합니다. Machine Config Operator는 MTU 변경을 준비하기 위해 클러스터에서 노드 롤링 재부팅을 수행합니다.
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": <overlay_from>, "to": <overlay_to> } , "machine": { "to" : <machine_to> } } } } }'
다음과 같습니다.
<overlay_from>
- 현재 클러스터 네트워크 MTU 값을 지정합니다.
<overlay_to>
-
클러스터 네트워크의 대상 MTU를 지정합니다. 이 값은 <
machine_to
> 값을 기준으로 설정되며 OVN-Kubernetes의 값은100
미만이어야 하며 OpenShift SDN은50
미만이어야 합니다. <machine_to>
- 기본 호스트 네트워크의 기본 네트워크 인터페이스의 MTU를 지정합니다.
클러스터 MTU를 늘리는 예
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": 1400, "to": 9000 } , "machine": { "to" : 9100} } } } }'
MCO는 각 머신 구성 풀의 머신을 업데이트할 때 각 노드를 하나씩 재부팅합니다. 모든 노드가 업데이트될 때까지 기다려야 합니다. 다음 명령을 입력하여 머신 구성 풀 상태를 확인합니다.
$ oc get mcp
업데이트된 노드의 상태가
UPDATED=true
,UPDATING=false
,DEGRADED=false
입니다.참고기본적으로 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
다음 구문이 올바른지 확인합니다.
-
machineconfiguration.openshift.io/state
필드의 값은Done
입니다. -
machineconfiguration.openshift.io/currentConfig
필드의 값은machineconfiguration.openshift.io/desiredConfig
필드의 값과 동일합니다.
-
머신 구성이 올바른지 확인하려면 다음 명령을 입력합니다.
$ oc get machineconfig <config_name> -o yaml | grep ExecStart
여기서
<config_name>
은machineconfiguration.openshift.io/currentConfig
필드에서 머신 구성의 이름입니다.머신 구성은 다음 업데이트를 systemd 구성에 포함해야 합니다.
ExecStart=/usr/local/bin/mtu-migration.sh
기본 네트워크 인터페이스 MTU 값을 업데이트합니다.
NetworkManager 연결 구성으로 새 MTU를 지정하는 경우 다음 명령을 입력합니다. MachineConfig Operator는 클러스터의 노드 롤링 재부팅을 자동으로 수행합니다.
$ for manifest in control-plane-interface worker-interface; do oc create -f $manifest.yaml done
- DHCP 서버 옵션 또는 커널 명령줄 및 PXE로 새 MTU를 지정하는 경우 인프라에 필요한 변경을 수행합니다.
MCO는 각 머신 구성 풀의 머신을 업데이트할 때 각 노드를 하나씩 재부팅합니다. 모든 노드가 업데이트될 때까지 기다려야 합니다. 다음 명령을 입력하여 머신 구성 풀 상태를 확인합니다.
$ oc get mcp
업데이트된 노드의 상태가
UPDATED=true
,UPDATING=false
,DEGRADED=false
입니다.참고기본적으로 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
다음 구문이 올바른지 확인합니다.
-
machineconfiguration.openshift.io/state
필드의 값은Done
입니다. -
machineconfiguration.openshift.io/currentConfig
필드의 값은machineconfiguration.openshift.io/desiredConfig
필드의 값과 동일합니다.
-
머신 구성이 올바른지 확인하려면 다음 명령을 입력합니다.
$ oc get machineconfig <config_name> -o yaml | grep path:
여기서
<config_name>
은machineconfiguration.openshift.io/currentConfig
필드에서 머신 구성의 이름입니다.머신 구성이 성공적으로 배포된 경우 이전 출력에
/etc/NetworkManager/system-connections/<connection_name
> 파일 경로가 포함됩니다.머신 구성에는
ExecStart=/usr/local/bin/mtu-migration.sh
행이 포함되어 있지 않아야 합니다.
MTU 마이그레이션을 완료하려면 다음 명령 중 하나를 입력합니다.
OVN-Kubernetes 클러스터 네트워크 공급자를 사용하는 경우 다음을 수행합니다.
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": null, "defaultNetwork":{ "ovnKubernetesConfig": { "mtu": <mtu> }}}}'
다음과 같습니다.
<mtu>
-
<
overlay_to>로 지정한 새 클러스터 네트워크 MTU를 지정합니다
.
OpenShift SDN 클러스터 네트워크 공급자를 사용하는 경우:
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": null, "defaultNetwork":{ "openshiftSDNConfig": { "mtu": <mtu> }}}}'
다음과 같습니다.
<mtu>
-
<
overlay_to>로 지정한 새 클러스터 네트워크 MTU를 지정합니다
.
검증
클러스터의 노드가 이전 프로세스에서 지정한 MTU를 사용하는지 확인할 수 있습니다.
클러스터 네트워크의 현재 MTU를 가져오려면 다음 명령을 입력합니다.
$ oc describe network.config cluster
노드의 기본 네트워크 인터페이스에 대한 현재 MTU를 가져옵니다.
클러스터의 노드를 나열하려면 다음 명령을 입력합니다.
$ oc get nodes
노드의 기본 네트워크 인터페이스의 현재 MTU 설정을 가져오려면 다음 명령을 입력합니다.
$ oc debug node/<node> -- chroot /host ip address show <interface>
다음과 같습니다.
<node>
- 이전 단계의 출력에서 노드를 지정합니다.
<interface>
- 노드의 기본 네트워크 인터페이스 이름을 지정합니다.
출력 예
ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8051