bmctl
로 클러스터를 만든 후 해당 클러스터의 커스텀 리소스를 업데이트할 수 있습니다. 예를 들어 노드 풀에서 노드를 추가하거나 삭제할 수 있습니다. 다른 위치를 지정하지 않는 한 구성 파일이 bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml
로 저장됩니다.
이 문서에서는 클러스터를 추가한 후 업데이트할 수 있는 클러스터 구성 옵션(예: 노드 추가 또는 삭제)을 보여줍니다.
클러스터에서 노드 추가 또는 삭제
Anthos clusters on bare metal에서는 클러스터의 노드 풀 정의를 수정하여 클러스터의 노드를 추가하거나 삭제할 수 있습니다. 노드의 IP 주소를 사용하여 노드 풀에서 추가하거나 삭제합니다. bmctl
명령어를 사용하면 이러한 정의를 변경할 수 있습니다.
Anthos clusters on bare metal에는 제어 영역, 부하 분산기, 워커 노드 풀과 같은 3가지 종류의 노드 풀이 있습니다.
노드 상태 보기
kubectl get
명령어를 사용하면 노드 및 각 노드 풀의 상태를 확인할 수 있습니다.
예를 들어 다음 명령어는 클러스터 네임스페이스 my-cluster
의 노드 풀 상태를 보여줍니다.
kubectl -n my-cluster get nodepools.baremetal.cluster.gke.io
시스템에서 다음과 비슷한 결과를 반환합니다.
NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN
my-cluster 3 0 0 0 0
my-cluster-lb 2 0 0 0 0
np1 3 0 0 0 0
클러스터 진단에 대한 자세한 내용은 클러스터 진단을 위한 스냅샷 만들기를 참조하세요.
노드 변경
대부분의 노드 변경사항은 클러스터 구성 파일에 지정된 후 클러스터에 적용됩니다. 클러스터를 업로드하기 위한 기본 소스로 클러스터 구성 파일을 사용하는 것이 좋습니다. 문제 해결 목적으로 변경사항을 추적하기 위해 버전 제어 시스템에 구성 파일을 저장하는 것이 가장 좋습니다. 모든 클러스터 유형에 대해 bmctl update
명령어를 사용하여 클러스터에 노드 변경사항을 업데이트합니다.
베어메탈용 Anthos 클러스터의 클러스터 구성 파일에는 사용자 인증 정보가 있는 헤더 섹션이 포함되어 있습니다. 사용자 인증 정보 항목 및 나머지 구성 파일이 유효한 YAML이지만, 사용자 인증 정보 항목은 클러스터 리소스에 대해 유효하지 않습니다. 사용자 인증 정보 업데이트에 대해 bmctl update credentials
를 사용합니다.
클러스터에서 노드를 삭제하면 먼저 모든 포드에서 드레이닝됩니다. 포드를 다른 노드에서 다시 예약할 수 없는 경우 클러스터에서 노드가 삭제되지 않습니다. bmctl update
명령어는 클러스터 구성 파일을 파싱하고 파싱된 결과에 따라 커스텀 리소스를 적용합니다.
다음은 2개 노드가 포함된 샘플 구성입니다.
---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
name: nodepool1
namespace: cluster-cluster1
spec:
clusterName: cluster1
nodes:
- address: 172.18.0.5
- address: 172.18.0.6
IP 주소 항목을 삭제하여 노드 풀에서 노드를 삭제할 수 있습니다.
---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
name: nodepool1
namespace: cluster-cluster1
spec:
clusterName: cluster1
nodes:
- address: 172.18.0.5
클러스터를 업데이트하려면 관리자 및 독립형 클러스터와 같은 자체 관리 클러스터에 대해 다음 명령어를 실행합니다.
bmctl update cluster -c CLUSTER_NAME \
--kubeconfig=KUBECONFIG
bmctl update
명령어가 성공적으로 실행된 다음 machine-init
또는 machine-reset
포드를 완료하는 데 다소 시간이 걸립니다.
다음 섹션에서는 특정 노드 유형을 업데이트할 때 몇 가지 중요한 차이를 설명합니다.
제어 영역 및 부하 분산기 노드
베어메탈용 Anthos 클러스터의 제어 영역 및 부하 분산기 노드 풀 사양이 특별합니다. 해당 사양으로 중요한 클러스터 리소스를 선언하고 제어합니다. 이 리소스는 클러스터 구성 파일에서 해당하는 섹션을 표준 소스로 사용합니다.
spec.controlPlane.nodePoolSpec
spec.LoadBalancer.nodePoolSpec
클러스터 구성 파일의 해당 섹션에서 nodes
아래의 주소 배열을 수정하여 제어 영역 또는 부하 분산기 노드를 추가하거나 삭제합니다.
고가용성(HA) 구성에서는 제어 영역에 오류가 발생하면 다른 제어 영역에서 인계하도록 쿼럼을 설정하는 데 홀수 수의 제어 영역 노드 풀(3개 이상)이 필요합니다. 유지보수 또는 교체를 위해 노드를 추가 또는 삭제하는 동안 일시적으로 노드 수가 짝수인 경우 쿼럼이 충분하면 배포에서 HA를 유지합니다.
워커 노드
bmctl
명령어를 사용하여 워커 노드를 직접 추가하거나 삭제할 수 있습니다. 워커 노드 풀에는 원하는 노드가 하나 이상 있어야 합니다. 하지만 전체 노드 풀을 삭제하려면 kubectl
명령어를 사용합니다. 다음 예시에서 명령어는 클러스터 네임스페이스의 변수가 my-cluster
인 np1
이라는 노드 풀을 삭제합니다.
kubectl -n my-cluster delete nodepool np1
기타 변경 가능한 필드
노드 추가 및 삭제 외에도 bmctl update
명령어를 사용하여 클러스터 구성의 특정 요소를 수정할 수도 있습니다. 일반적으로 클러스터 리소스를 업데이트하려면 클러스터 구성 파일의 로컬 버전을 수정하고 bmctl update
를 사용하여 변경사항을 적용합니다. bmctl update
명령어는 kubectl apply
명령어와 비슷합니다.
다음 섹션에서는 필드 값을 변경하거나 관련 커스텀 리소스를 수정하여 기존 클러스터를 업데이트하는 몇 가지 일반적인 예시를 설명합니다.
loadBalancer.addressPools
addressPools
섹션에는 번들 부하 분산기의 부하 분산 풀을 지정할 수 있는 필드가 포함되어 있습니다. 언제든지 부하 분산 주소 풀을 추가할 수 있지만 기존 주소 풀을 삭제하거나 수정할 수는 없습니다.
addressPools:
- name: pool1
addresses:
- 192.168.1.0-192.168.1.4
- 192.168.1.240/28
- name: pool2
addresses:
- 192.168.1.224/28
bypassPreflightCheck
bypassPreflightCheck
필드의 기본값은 false
입니다. 클러스터 구성 파일에서 이 필드를 true
로 설정하면 기존 클러스터에 리소스를 적용할 때 내부 실행 전 검사가 무시됩니다.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
baremetal.cluster.gke.io/private-mode: "true"
spec:
bypassPreflightCheck: true
loginUser
노드 액세스 구성에서 loginUser
필드를 설정할 수 있습니다. 이 필드에서는 머신 로그인의 비밀번호가 없는 sudo
기능을 지원합니다.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
baremetal.cluster.gke.io/private-mode: "true"
spec:
nodeAccess:
loginUser: abm
NetworkGatewayGroup
NetworkGatewayGroup
커스텀 리소스는 이그레스 NAT 게이트웨이나 BGP를 사용하는 번들 부하 분산 기능과 같은 고급 네트워킹 기능의 유동 IP 주소를 제공하는 데 사용됩니다.
NetworkGatewayGroup
커스텀 리소스와 관련 네트워킹 기능을 사용하려면 클러스터를 만들 때 clusterNetwork.advancedNetworking
을 true
로 설정해야 합니다.
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
name: default
namespace: cluster-bm
spec:
floatingIPs:
- 10.0.1.100
- 10.0.2.100
BGPLoadBalancer
BGP로 번들 부하 분산기를 구성하면 데이터 영역 부하 분산은 기본적으로 제어 영역 피어링에 지정된 피어와 동일한 외부 피어를 사용합니다. 또는 BGPLoadBalancer
커스텀 리소스(및 BGPPeer
커스텀 리소스)를 사용하여 데이터 영역 부하 분산을 개별적으로 구성할 수 있습니다. 자세한 내용은 BGP로 번들 부하 분산기 구성을 참조하세요.
apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
name: default
namespace: cluster-bm
spec:
peerSelector:
cluster.baremetal.gke.io/default-peer: "true"
BGPPeer
BGP로 번들 부하 분산기를 구성하면 데이터 영역 부하 분산은 기본적으로 제어 영역 피어링에 지정된 피어와 동일한 외부 피어를 사용합니다. 또는 BGPPeer
커스텀 리소스(및 BGPLoadBalancer
커스텀 리소스)를 사용하여 데이터 영역 부하 분산을 개별적으로 구성할 수 있습니다. 자세한 내용은 BGP로 번들 부하 분산기 구성을 참조하세요.
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm
labels:
cluster.baremetal.gke.io/default-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
NetworkAttachmentDefinition
bmctl update
명령어를 사용하여 네트워크에 해당하는 NetworkAttachmentDefinition
커스텀 리소스를 수정할 수 있습니다.
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: gke-network-1
namespace: cluster-my-cluster
spec:
config: '{
"type": "ipvlan",
"master": "enp2342",
"mode": "l2",
"ipam": {
"type": "whereabouts",
"range": "172.120.0.0/24"
구성 파일을 수정한 후 bmctl update
명령어를 실행하여 클러스터를 업데이트할 수 있습니다. 클러스터 구성 파일을 파싱하고 파싱된 결과를 기반으로 커스텀 리소스를 적용합니다.
관리자 및 독립형 클러스터와 같은 자체 관리 클러스터에 대해 다음을 실행합니다.
bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG
사용자 클러스터의 경우 다음을 실행합니다.
bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=ADMIN_KUBECONFIG