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

Google Distributed Cloud는 OpenStack을 프라이빗 클라우드 플랫폼으로 사용할 수 있도록 지원합니다. 이 가이드에서는 외부 클라우드 제공업체와 함께 작동하도록 Google Distributed Cloud 클러스터를 구성하는 방법을 설명합니다. OpenStack에서 Google 분산 클라우드 클러스터를 실행하면 다음 OpenStack 서비스를 사용할 수 있습니다.

  • Infrastructure as a Service(IaaS)

  • Load balancing as a Service(LBaaS)

  • 스토리지

OpenStack에서 작동하도록 클러스터를 구성하는 과정으로 구성됩니다.

  • 클러스터를 만들 때 baremetal.cluster.gke.io/external-cloud-provider 주석을 추가합니다.

  • 이 주석은 Google Distributed Cloud가 kubelet 플래그 cloud-provider=external을 추가하도록 합니다.

  • 그런 다음 kubelet은 node.cloudprovider.kubernetes.io/uninitialized:NoSchedule taint를 클러스터 노드에 추가합니다.

이 구성을 사용하면 사용자와 OpenStack이 노드 초기화 프로세스를 소유할 수 있습니다. 예를 들어 OpenStack에 Google Distributed Cloud를 배포하여 OpenStack Load Balancing as a Service(LBaaS) 리소스를 자동으로 프로비저닝하거나 다른 OpenStack 기능을 사용할 수 있습니다. LBaaS 리소스는 MetalLB 리소스를 바꿔서 Google Distributed Cloud 클러스터에서 실행되는 서비스를 다른 OpenStack 테넌트 또는 OpenStack 네트워크 외부에 노출시킬 수 있습니다. OpenStack 기능과 이점에 대한 자세한 내용은 OpenStack 문서를 참조하세요.

이 문서에서는 OpenStack에서 사용할 클러스터를 구성하는 방법만 설명합니다. 다음 가이드에서는 배포 예시를 안내합니다.

  • OpenStack에 Google Distributed Cloud 클러스터 배포에서는 OpenStack 가상 머신(VM)에 Google Distributed Cloud 하이브리드 클러스터의 샘플 배포를 안내합니다. 이 배포에서는 스크립트를 사용하여 설치를 간소화합니다. 또한 이 가이드는 Load Balancing as a Service(LBaaS)를 사용 설정하는 한 가지 방법을 보여줍니다.

  • Kubernetes용 OpenStack 클라우드 제공업체 구성에서는 OpenStack에 배포된 Google Distributed Cloud 클러스터에 OpenStack 클라우드 제공업체를 설치하는 방법을 보여줍니다. OpenStack 클라우드 제공업체는 Google Distributed Cloud를 OpenStack과 함께 사용할 필요가 없습니다.

시작하기 전에

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

    OpenStack LBaaS 리소스를 사용하도록 구성된 클러스터를 만든 후에는 MetalLB 리소스로 전환하도록 구성을 변경할 수 없습니다. 올바른 클라우드 제공업체 구성으로 클러스터를 초기화해야 합니다.

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

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

클러스터 구성 파일 변경

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

cloud-provider: "external"

GKE 클러스터가 이 요구사항을 충족하도록 하려면 클러스터를 만들기 전에 메타데이터 섹션에서 클러스터 구성 파일에 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에 특별한 형식이 필요합니다. Google Distributed Cloud는 노드 머신마다 baremetal://MACHINE_ADDRESS와 같은 형식의 providerID를 생성합니다. 다른 providerID가 필요하면 각 노드마다 ID를 하나씩 IP 주소와 함께 지정할 수 있습니다.

다음 샘플 클러스터 구성 파일에서는 클러스터 노드에 providerID를 지정하는 방법을 보여줍니다.

 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-cluster1
 spec:
   clusterName: cluster1
   nodes:
   - address: 172.18.0.2
+    providerID: some-prefix3://unique-string3

클러스터 만들기

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

bmctl create cluster -c cluster1

클러스터 만들기에 대한 자세한 내용은 클러스터 만들기 개요를 참조하세요.

노드 구성

OpenStack에 구성된 클러스터를 만들면 클러스터 노드가 다음과 같이 변경됩니다.

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

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

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

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

  • kubelet는 클러스터 구성 파일에 지정한 providerID로 실행됩니다.

다음 단계