OpenStack을 사용하도록 클러스터 구성

베어메탈용 GKE는 OpenStack Kubernetes 클라우드 제공업체를 지원합니다. 이 기능을 사용하면 OpenStack Load Balancing as a Service(LBaaS) 리소스를 자동으로 프로비저닝할 수 있습니다. 이러한 리소스는 MetalLB 리소스를 바꿔서 베어메탈용 Anthos 클러스터에서 실행되는 서비스를 다른 OpenStack 테넌트 또는 OpenStack 네트워크 외부에 쉽게 노출시킬 수 있습니다.

시작하기 전에

OpenStack LBaaS 리소스를 사용해야 하는 Anthos 클러스터를 결정합니다.

구성하려는 머신에 대해 액세스 권한이 있는지 확인합니다.

Kubernetes 문서에서 cloud-controller-manager 실행에 대해 자세히 알아보세요.

클러스터의 구성 파일 변경

OpenStack Kubernetes 클라우드 제공업체에서는 kubelet이 다음 인수를 사용하여 모든 노드에서 실행되어야 합니다.

cloud-provider: "external"

Anthos 클러스터가 이 요구사항을 쉽게 충족하도록 하려면 baremetal.cluster.gke.io/external-cloud-provider: "true" 주석을 초기화하기 전 메타데이터 섹션 아래에 있는 클러스터의 구성 파일에 추가합니다.

구성 파일의 항목은 다음 예시와 비슷하게 표시됩니다.

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    baremetal.cluster.gke.io/external-cloud-provider: "true"
spec:
  ..

다른 클라우드 플랫폼의 일부 클라우드 제공업체는 providerID에 특별한 형식이 필요합니다. 베어메탈용 GKE는 각 머신에 대해 providerID를 생성합니다. 형식은 baremetal://MACHINE_ADDRESS와 같습니다. 다른 providerID가 필요하면 IP 주소와 함께 각 노드에 대해 항목을 지정할 수 있습니다. 구성은 다음과 같습니다.

 apiVersion: baremetal.cluster.gke.io/v1
 kind: Cluster
 metadata:
   name: cluster1
   namespace: cluster-cluster1
 spec:
   clusterNetwork:
     pods:
       cidrBlocks:
       - 192.168.0.0/16
     services:
       cidrBlocks:
       - 10.96.0.0/20
   controlPlane:
     nodePoolSpec:
       nodes:
       - address: 10.200.0.1
+        providerID: some-prefix://unique-string
       - address: 10.200.0.2
+        providerID: some-prefix2://unique-string2
  ...

---
 apiVersion: baremetal.cluster.gke.io/v1
 kind: NodePool
 metadata:
   name: nodepool1
   namespace: cluster-admin1
 spec:
   clusterName: admin1
   nodes:
   - address: 172.18.0.2
+    providerID: some-prefix3://unique-string3

구성 파일을 수정한 후 다음 명령어를 사용하여 클러스터를 초기화합니다.

bmctl create cluster -c cluster1

이제 cluster1의 모든 노드가 필요한 인수 cloud-provider: "external"로 실행됩니다.

또한 모든 노드에서 다음 필드가 해당 구성 파일에 추가됩니다.

taints:
- effect: NoSchedule
  key: node.cloudprovider.kubernetes.io/uninitialized
  value: "true"

이러한 필드는 이 클러스터에서 클라우드 제공업체를 초기화한 후에 삭제됩니다.

kubelet은 제공된 providerID(이 노드에 지정된 경우)로 실행됩니다.