관리 및 사용자 클러스터 만들기

기본 구성으로 관리자 클러스터와 사용자 클러스터를 만드는 방법을 알아보세요.

이 주제의 단계에서는 gkeadm을 사용하여 관리 워크스테이션을 만들었다고 가정합니다. gkeadm을 사용하지 않고 고급 주제인 고정 IP 주소로 관리자 워크스테이션 만들기를 따랐다면 각 개별 단계에서 설명한 대로 조정해야 할 수 있습니다. DHCP 관리자 워크스테이션의 경우 해당 DHCP 설치 가이드를 사용해야 합니다.

프록시를 사용하는 경우 관리 워크스테이션의 인터넷 요청에 대해 구성 파일에 설정한 것과 동일한 프록시가 모든 gkectl 명령어에 자동으로 사용됩니다. 관리자 워크스테이션이 동일한 프록시 뒤에 있지 않은 경우 관리자 워크스테이션 만들기의 고급 주제인 고정 IP | DHCP에서 '수동 프록시 옵션'을 참조하세요.

관리 워크스테이션에 SSH를 통해 연결

관리 워크스테이션에 SSH를 통해 연결에 나온 안내에 따라 관리 워크스테이션에 SSH를 통해 연결합니다.

허용 목록에 포함된 서비스 계정이 관리자 워크스테이션에서 활성화됩니다. 관리자 워크스테이션에서 이 주제의 나머지 단계를 모두 수행합니다.

관리자 클러스터의 고정 IP 구성

관리자 클러스터에 사용할 고정 IP 주소를 지정하려면 admin-hostconfig.yaml이라는 호스트 구성 파일을 만듭니다. 이 실습에서는 관리자 클러스터에서 사용할 5개의 IP 주소를 지정해야 합니다.

다음은 호스트가 5개인 호스트 구성 파일의 예시입니다.

hostconfig:
  dns: 172.16.255.1
  tod: 216.239.35.0
  otherdns:
  - 8.8.8.8
  - 8.8.4.4
  othertod:
  - ntp.ubuntu.com
  searchdomainsfordns:
  - "my.local.com"
blocks:
  - netmask: 255.255.252.0
    gateway: 172.16.23.254
    ips:
    - ip: 172.16.20.10
      hostname: admin-host1
    - ip: 172.16.20.11
      hostname: admin-host2
    - ip: 172.16.20.12
      hostname: admin-host3
    - ip: 172.16.20.13
      hostname: admin-host4
    - ip: 172.16.20.14
      hostname: admin-host5

ips 필드는 IP 주소와 호스트 이름의 배열입니다. 이러한 주소는 GKE On-Prem이 관리자 클러스터 노드에 할당할 IP 주소와 호스트 이름입니다.

호스트 구성 파일에서 관리자 클러스터 노드가 사용할 DNS 서버, 시간 서버, 기본 게이트웨이의 주소도 지정합니다.

searchdomainsfordns 필드는 클러스터에서 사용할 DNS 검색 도메인 배열입니다. 이러한 도메인은 도메인 검색 목록의 일부로 사용됩니다.

사용자 클러스터의 고정 IP 구성

사용자 클러스터에 사용할 고정 IP 주소를 지정하려면 user-hostconfig.yaml이라는 호스트 구성 파일을 만듭니다.

다음은 호스트가 3개인 호스트 구성 파일의 예시입니다.

hostconfig:
  dns: 172.16.255.1
  tod: 216.239.35.0
  otherdns:
  - 8.8.8.8
  - 8.8.4.4
  othertod:
  - ntp.ubuntu.com
  searchdomainsfordns:
  - "my.local.com"
blocks:
  - netmask: 255.255.252.0
    gateway: 172.16.23.254
    ips:
    - ip: 172.16.20.15
      hostname: user-host1
    - ip: 172.16.20.16
      hostname: user-host2
    - ip: 172.16.20.17
      hostname: user-host3

ips 필드는 IP 주소와 호스트 이름의 배열입니다. 이러한 주소는 GKE On-Prem이 사용자 클러스터 노드에 할당할 IP 주소와 호스트 이름입니다.

호스트 구성 파일에서 사용자 클러스터 노드가 사용할 DNS 서버, 시간 서버, 기본 게이트웨이의 주소도 지정합니다.

searchdomainsfordns 필드는 클러스터에서 사용할 DNS 검색 도메인 배열입니다. 이러한 도메인은 도메인 검색 목록의 일부로 사용됩니다.

GKE On-Prem 구성 파일에서 채워진 필드

관리자 워크스테이션을 만들 때 admin-ws-config.yaml이라는 구성 파일을 입력했습니다. gkeadm 명령줄 도구에서 admin-ws-config.yaml 파일을 사용하여 관리자 워크스테이션을 만들었습니다.

gkeadm이 관리자 워크스테이션을 만들 때 config.yaml이라는 두 번째 구성 파일을 생성했습니다. 관리자 워크스테이션에 있는 이 구성 파일은 GKE On-Prem 클러스터를 만들기 위한 것입니다.

admin-ws-config.yamlconfig.yaml 파일에는 공통된 필드가 여러 개 있습니다. 이러한 공통 필드의 값은 이미 config.yaml 파일에 입력되어 있습니다.

다음은 관리 워크스테이션을 만들 때 제공한 값으로 이미 채워진 필드입니다.

vcenter:
  credentials:
    address:
    username:
    password:
  datacenter:
  datastore:
  cluster:
  network:
  resourcepool:
  cacertpath:
gkeconnect:
  projectid:
  registerserviceaccountkeypath:
  agentserviceaccountkeypath:
stackdriver:
  projectid:
  serviceaccountkeypath:
gcrkeypath:

GKE On-Prem 구성 파일의 남은 부분 작성

그런 다음 config.yaml 파일의 남은 필드를 작성해야 합니다.

bundlepath

GKE On-Prem 번들 파일에는 GKE On-Prem의 특정 출시 버전에 있는 모든 구성요소가 포함되어 있습니다. bundlepath의 값을 관리자 워크스테이션 번들 파일의 경로로 설정합니다.

bundlepath: /var/lib/gke/bundles/gke-onprem-vsphere-1.3.2-gke.1-full.tgz

vcenter.datadisk

GKE On-Prem은 관리자 클러스터의 Kubernetes 객체 데이터를 저장할 가상 머신 디스크(VMDK)를 만듭니다. 설치 프로그램에서 자동으로 VMDK를 만들지만 vcenter.datadisk 필드에 VMDK 이름을 제공해야 합니다. 예를 들면 다음과 같습니다.

vcenter:
  ...
  datadisk: "my-disk.vmdk"
vSAN Datastore: VMDK에 폴더 만들기

vSAN Datastore를 사용하는 경우 VMDK를 폴더에 두어야 합니다. 폴더는 수동으로 미리 만들어야 합니다. 이렇게 하려면 govc를 사용하여 폴더를 만들면 됩니다.

govc datastore.mkdir -namespace=true my-gke-on-prem-folder

그런 다음 vcenter.datadisk를 폴더가 포함된 VMDK 경로로 설정합니다. 예를 들면 다음과 같습니다.

vcenter:
...
datadisk: "my-gke-on-prem-folder/my-disk.vmdk"

버전 1.1.1에서는 알려진 문제로 인해 해당 파일 경로 대신 폴더의 범용 고유 식별자(UUID) 경로를 제공해야 합니다.

proxy

네트워크가 프록시 서버 뒤에 있는 경우 프록시 주소와 프록시 서버를 거쳐서는 안 되는 임의의 주소를 지정해야 합니다.

proxy.url을 설정하여 프록시 서버의 HTTP 주소를 지정합니다. 포트 번호가 스킴의 기본 포트와 동일하더라도 포함해야 합니다. 여기에서 지정하는 프록시 서버는 GKE On-Prem 클러스터에서 사용됩니다. 또한 관리자 워크스테이션에서 HTTPS_PROXY 환경 변수를 설정하지 않는 한 관리자 워크스테이션은 동일한 프록시 서버를 사용하도록 자동으로 구성됩니다.

proxy.noproxy를 설정하여 프록시 서버를 거쳐서는 안 되는 IP 주소, IP 주소 범위, 호스트 이름, 도메인 이름의 목록을 정의합니다. GKE On-Prem이 이러한 주소, 호스트 또는 도메인 중 하나에 요청을 보내면 해당 요청이 직접 전송됩니다.

예를 들면 다음과 같습니다.

proxy:
  url: "http://my-proxy.example.local:80"
  noproxy: "10.151.222.0/24, my-host.example.local,10.151.2.1"

admincluster.ipblockfilepath

고정 IP 주소를 사용 중이므로 고정 IP 구성에 설명된 대로 호스트 구성 파일이 있어야 합니다. 호스트 구성 파일의 경로를 admincluster.ipblockfilepath 필드에 입력합니다. 예를 들면 다음과 같습니다.

admincluster:
  ipblockfilepath: "/my-config-directory/admin-hostconfig.yaml"

admincluster.bigip.credentials

GKE On-Prem에는 F5 BIG-IP 부하 분산기의 IP 주소 또는 호스트 이름, 사용자 이름, 비밀번호가 필요합니다. 이 정보를 제공하려면 admincluster.bigip 아래에서 값을 설정하세요. 앵커&bigip-credentialscredentials 다음에 놓으세요. 그러면 usercluster 섹션에서 이 정보를 반복하지 않아도 됩니다. 예를 들면 다음과 같습니다.

admincluster:
  ...
  bigip:
    credentials: &bigip-credentials
      address: "203.0.113.2"
      username: "my-admin-f5-name"
      password: "rJDlm^%7aOzw"

admincluster.bigip.partition

앞에서 관리자 클러스터의 BIG-IP 파티션을 만들었습니다. admincluster.bigip.partition을 파티션 이름으로 설정합니다. 예를 들면 다음과 같습니다.

admincluster:
  ...
  bigip:
    partition: "my-admin-f5-partition"

admincluster.vips

admincluster.vips.controlplanevip의 값을 관리자 클러스터의 Kubernetes API 서버에 부하 분산기에서 구성한 IP 주소로 설정합니다. ingressvip의 값을 부하 분산기에서 관리자 클러스터의 인그레스 서비스에 대해 구성한 IP 주소로 설정합니다. 예를 들면 다음과 같습니다.

admincluster:
  ...
  vips:
    controlplanevip: 203.0.113.3
    ingressvip: 203.0.113.4

admincluster.serviceiprangeadmincluster.podiprange

관리자 클러스터에는 서비스에 사용할 IP 주소 범위와 pod에 사용할 IP 주소 범위가 있어야 합니다. 이러한 범위는 admincluster.serviceiprangeadmincluster.podiprange 필드로 지정됩니다. 이러한 필드는 gkectl create-config를 실행할 때 채워집니다. 필요에 따라 채워진 값을 원하는 값으로 변경할 수 있습니다.

서비스 및 포드 범위는 겹치지 않아야 합니다. 또한 서비스 및 포드 범위는 클러스터의 노드에 사용되는 IP 주소와 겹치지 않아야 합니다.

예를 들면 다음과 같습니다.

admincluster:
  ...
  serviceiprange: 10.96.232.0/24
  podiprange: 192.168.0.0/16

usercluster.ipblockfilepath

고정 IP 주소를 사용 중이므로 고정 IP 구성에 설명된 대로 호스트 구성 파일이 있어야 합니다. 호스트 구성 파일의 경로를 usercluster.ipblockfilepath 필드에 입력합니다. 예를 들면 다음과 같습니다.

usercluster:
  ipblockfilepath: "/my-config-directory/user-hostconfig.yaml"

usercluster.bigip.credentials

admincluster.bigip.credentials에서 지정한 것과 동일한 address, username, password를 사용하려면 참조*bigip-credentialsusercluster.bigip.credentials 뒤에 놓으세요. 예를 들면 다음과 같습니다.

usercluster:
  ...
  bigip:
    credentials: *bigip-credentials

usercluster.bigip.partition

앞에서 사용자 클러스터의 BIG-IP 파티션을 만들었습니다. usercluster.bigip.partition을 파티션 이름으로 설정합니다. 예를 들면 다음과 같습니다.

usercluster:
  ...
  bigip:
    partition: "my-user-f5-partition"
  ...

usercluster.vips

usercluster.vips.controlplanevip 값을 사용자 클러스터의 Kubernetes API 서버에 부하 분산기에서 구성한 IP 주소로 설정합니다. ingressvip의 값을 부하 분산기에서 사용자 클러스터의 인그레스 서비스에 대해 구성한 IP 주소로 설정합니다. 예를 들면 다음과 같습니다.

usercluster:
  ...
  vips:
    controlplanevip: 203.0.113.6
    ingressvip: 203.0.113.7

usercluster.serviceiprangeusercluster.podiprange

사용자 클러스터에는 서비스에 사용할 IP 주소 범위와 pod에 사용할 IP 주소 범위가 있어야 합니다. 이러한 범위는 usercluster.serviceiprangeusercluster.podiprange 필드로 지정됩니다. 이러한 필드는 gkectl create-config를 실행할 때 채워집니다. 필요에 따라 채워진 값을 원하는 값으로 변경할 수 있습니다.

서비스 및 pod 범위는 겹치지 않아야 합니다. 또한 서비스 및 포드 범위는 클러스터의 노드에 사용되는 IP 주소와 겹치지 않아야 합니다.

예를 들면 다음과 같습니다.

usercluster:
  ...
  serviceiprange: 10.96.233.0/24
  podiprange: 172.16.0.0/12

VMware DRS 안티어피니티 규칙 사용 중지

GKE On-Prem은 사용자 클러스터 노드에 대해 VMware Distributed Resource Scheduler(DRS) 안티어피니티 규칙을 자동으로 만들어 데이터 센터에 있는 최소 3개 이상의 물리적 호스트에 분산되도록 합니다.

이 기능을 사용하려면 vSphere 환경이 다음 조건을 충족해야 합니다.

  • VMware DRS가 사용 설정되어 있습니다. VMware DRS에는 vSphere Enterprise Plus 라이선스 버전이 필요합니다. DRS를 사용 설정하는 방법은 클러스터에서 VMware DRS 사용 설정을 참조하세요.
  • vcenter 필드에 제공된 vSphere 사용자 계정에는 Host.Inventory.EditCluster 권한이 포함됩니다.
  • 사용 가능한 물리적 호스트가 3개 이상입니다.

vSphere Standard 라이선스가 있으면 VMware DRS를 사용 설정할 수 없습니다.

DRS가 사용 설정되지 않았거나 vSphere VM을 예약할 수 있는 호스트가 3개 이상이 아니라면 구성 파일에 usercluster.antiaffinitygroups.enabled: false를 추가합니다. 예를 들면 다음과 같습니다.

usercluster:
  ...
  antiaffinitygroups:
    enabled: false

자세한 내용은 1.1.0-gke.6 버전의 출시 노트를 참조하세요.

lbmode

lbmode"Integrated"로 설정합니다. 예를 들면 다음과 같습니다.

lbmode: "Integrated"

stackdriver.clusterlocation

stackdriver.clusterlocation을 로그를 저장하려는 Google Cloud 리전으로 설정합니다. 온프렘 데이터 센터와 가까운 리전을 선택하는 것이 좋습니다.

stackdriver.enablevpc

클러스터의 네트워크가 VPC로 제어되는 경우 stackdriver.enablevpctrue로 설정합니다. 이렇게 하면 모든 원격 분석이 Google의 제한된 IP 주소를 통해 이동합니다.

구성 파일의 추가 필드

GKE On-Prem 구성 파일에는 이 주제에 나와 있는 필드 외에도 여러 필드가 있습니다. 예를 들어 manuallbspec 필드를 사용하여 수동 부하 분산 모드에서 실행되도록 GKE On-Prem을 구성할 수 있습니다.

구성 파일의 필드에 대한 자세한 설명은 DHCP를 사용하여 설치고정 IP 주소를 사용하여 설치를 참조하세요.

구성 파일 유효성 검사

구성 파일을 수정한 후에는 gkectl check-config를 실행하여 파일이 올바르고 설치에 사용될 수 있는지 확인합니다.

gkectl check-config --config config.yaml

명령어가 FAILURE 메시지를 반환하면 문제를 해결하고 파일 유효성을 다시 검사합니다.

시간이 오래 걸리는 검사를 건너뛰려면 --fast 플래그를 전달합니다. 개별 검사를 건너뛰려면 --skip-validation-xxx 플래그를 사용합니다. check-config 명령어에 대해 자세히 알아보려면 실행 전 검사 실행을 참조하세요.

gkectl prepare 실행

gkectl prepare를 실행하여 vSphere 환경을 초기화합니다.

gkectl prepare --config config.yaml --skip-validation-all

관리자 및 사용자 클러스터 만들기

  1. gkectl create cluster 명령어를 실행하여 관리자 클러스터와 사용자 클러스터를 만듭니다.

    gkectl create cluster --config config.yaml --skip-validation-all

    gkectl create cluster 명령어는 현재 디렉터리에 [CLUSTER_NAME]-kubeconfig라는 kubeconfig 파일을 만듭니다. 여기서 [CLUSTER_NAME]cluster에 설정한 이름입니다. 예를 들면 MY-CLUSTER-kubeconfig입니다.

    GKE On-Prem 문서에서는 다음과 같은 자리표시자를 사용하여 이러한 kubeconfig 파일을 나타냅니다.

    • 관리자 클러스터: [ADMIN_CLUSTER_KUBECONFIG]
    • 사용자 클러스터: [USER_CLUSTER_KUBECONFIG]
  2. 클러스터가 생성되었고 실행 중인지 확인합니다.

    1. 관리자 클러스터를 확인하려면 다음 명령어를 실행합니다.

      kubectl get nodes --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]

      출력에 관리자 클러스터 노드가 표시됩니다.

    2. 사용자 클러스터를 확인하려면 다음 명령어를 실행합니다.

      kubectl get nodes --kubeconfig [USER_CLUSTER_KUBECONFIG]

      출력에 사용자 클러스터 노드가 표시됩니다. 예를 들면 다음과 같습니다.

      NAME                        STATUS   ROLES    AGE   VERSION
      xxxxxx-1234-ipam-15008527   Ready    <none>   12m   v1.14.7-gke.24
      xxxxxx-1234-ipam-1500852a   Ready    <none>   12m   v1.14.7-gke.24
      xxxxxx-1234-ipam-15008536   Ready    <none>   12m   v1.14.7-gke.24
      

다음 섹션으로 이동하여 애플리케이션을 사용자 클러스터에 배포하는 방법을 알아봅니다.