사용자 클러스터 만들기(기본)

이 페이지에서는 사용자 클러스터를 만드는 방법을 보여줍니다.

이 주제의 단계에서는 gkeadm을 사용하여 관리자 워크스테이션을 만들었다고 가정합니다. gkeadm을 사용하지 않고 고정 IP 주소로 관리자 워크스테이션 만들기의 단계를 따른 경우 이 주제에 설명된 대로 몇 가지 항목을 조정해야 할 수 있습니다. 필요한 조정은 개별 단계마다 기술되어 있습니다.

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

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

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

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

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

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

다음은 호스트가 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 검색 도메인 배열입니다. 이러한 도메인은 도메인 검색 목록의 일부로 사용됩니다.

구성 파일에서 채워진 필드

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

gkeadm이 관리자 워크스테이션을 만들 때 user-cluster.yaml이라는 또 다른 구성 파일이 생성되었습니다. 관리자 워크스테이션에 있는 이 구성 파일은 사용자 클러스터를 만들기 위한 것입니다.

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

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

stackdriver:
  projectID:
  serviceAccountKeyPath:
gkeConnect:
  projectID:
  registerServiceAccountKeyPath:
  agentServiceAccountKeyPath:

나머지 구성 파일 작성

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

name

문자열. 사용자 클러스터의 이름입니다. 예를 들면 다음과 같습니다.

name: "my-user-cluster"

gkeOnPremVersion

문자열. 사용자 클러스터의 GKE On-Prem 버전입니다. 예를 들면 다음과 같습니다.

gkeOnPremVersion: "1.5.0-gke.27"

network.ipMode.type

문자열. "static"으로 설정합니다.

network:
  ipMode:
    type: "static"

network.ipBlockFilePath

문자열. 고정 IP 주소를 사용 중이므로 고정 IP 구성의 설명대로 호스트 구성 파일이 있어야 합니다. network.ipBlockFilePath를 호스트 구성 파일의 경로로 설정합니다. 예를 들면 다음과 같습니다.

network:
  ipBlockFilePath: "/my-config-directory/admin-hostconfig.yaml"

network.serviceCIDRnetwork.podCiDR

문자열. 사용자 클러스터에는 서비스에 사용할 IP 주소 범위와 pod에 사용할 IP 주소 범위가 있어야 합니다. 이러한 범위는 network.serviceCIDRnetwork.podCIDR 필드로 지정됩니다. 이러한 필드는 기본값으로 채워집니다. 필요에 따라 채워진 값을 원하는 값으로 변경할 수 있습니다.

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

예:

network:
  ...
  serviceCIDR: "10.96.232.0/24"
  podCIDR: "192.168.0.0/16"

network.vCenter.networkName

문자열. 클러스터 노드의 vSphere 네트워크 이름입니다.

이름에 특수문자가 포함되어 있으면 이스케이프 시퀀스를 사용해야 합니다.

특수문자 이스케이프 시퀀스
슬래시(/) %2f
백슬래시(\) %5c
퍼센트 기호(%) %25

네트워크 이름이 고유하지 않은 경우 네트워크 경로를 지정할 수 있습니다(예: /DATACENTER/network/NETWORK_NAME).

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

network:
  vCenter:
    networkName: "MY-CLUSTER-NETWORK"

loadBalancer.vips

문자열. loadBalancer.vips.controlPlaneVIP의 값을 사용자 클러스터의 Kubernetes API 서버에 대해 부하 분산기에 구성하도록 선택한 IP 주소로 설정합니다. loadBalancer.vips.ingressVIP의 값을 부하 분산기에서 사용자 클러스터의 인그레스 컨트롤러에 대해 구성한 IP 주소로 설정합니다. 예를 들면 다음과 같습니다.

loadBalancer:
  ...
  vips:
    controlplaneVIP: "203.0.113.5"
    ingressVIP: "203.0.113.6"

loadBalancer.kind

문자열. "Seesaw"로 설정합니다. 예를 들면 다음과 같습니다.

loadBalancer:
  kind: "Seesaw"

loadBalancer.seesaw.ipBlockFilePath

문자열. Seesaw VM의 hostconfig 파일 경로로 설정합니다. 예를 들면 다음과 같습니다.

loadbalancer:
  ...
  seesaw:
    ipBlockFilePath: "user-seesaw-hostconfig.yaml"

loadBalancer.seesaw.vird

정수. Seesaw VM의 가상 라우터 식별자입니다. 이 ID는 VLAN 내에서 고유해야 합니다. 유효한 범위는 1~255입니다. 예를 들면 다음과 같습니다.

loadBalancer:
  seesaw:
    vrid: 126

loadBalancer.seesaw.masterIP

문자열. Seesaw VM의 제어 영역 IP 주소입니다. 예를 들면 다음과 같습니다.

loadBalancer:
  seesaw:
    masterIP: "203.0.113.7"

loadBalancer.seesaw.cpus

정수. Seesaw VM의 CPU 수입니다. 예를 들면 다음과 같습니다.

loadBalancer:
  seesaw:
    cpus: 8

loadBalancer.seesaw.memoryMB

정수. Seesaw VM의 메모리 용량(MB)입니다. 예를 들면 다음과 같습니다.

loadBalancer:.
  seesaw:
    memoryMB: 8192

loadBalancer.seesaw.enableHA

부울. false로 설정합니다. 예를 들면 다음과 같습니다.

loadBalancer:.
  seesaw:
    enableHA: false

nodePools.name

문자열. 선택한 노드 풀의 이름입니다. 예를 들면 다음과 같습니다.

nodePools:
- name: "my-user-pool"

nodePools.replicas

정수. 노드 풀의 VM 수입니다. 3으로 설정합니다.

nodePools:
- name: "my-user-pool"
  replicas: 3

stackdriver.clusterLocation

문자열. 로그를 저장할 Google Cloud 리전입니다. 온프렘 데이터 센터와 가까운 리전을 선택하는 것이 좋습니다.

stackdriver.enablevpc

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

stackdriver.enableVPC

부울. 클러스터의 네트워크가 VPC로 제어되는 경우 stackdriver.enableVPCtrue로 설정합니다. 이렇게 하면 모든 원격 분석이 Google의 제한된 IP 주소를 통해 이동합니다. 그렇지 않으면 false로 설정합니다. 예를 들면 다음과 같습니다.

stackdriver:
  enableVPC: false

구성 파일의 추가 필드

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

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

구성 파일 유효성 검사

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

gkectl check-config --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [CONFIG_FILE]

각 항목의 의미는 다음과 같습니다.

  • [ADMIN_CLUSTER_KUBECONFIG]는 관리자 클러스터의 kubeconfig 파일 경로입니다.

  • [CONFIG_FILE]은 사용자 클러스터 구성 파일의 경로입니다.

명령어로 FAILURE 메시지가 반환될 경우 문제를 해결하고 파일을 다시 검사해야 합니다.

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

부하 분산기 만들기

Seesaw 부하 분산기의 VM을 만들고 구성합니다.

gkectl create loadbalancer --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [CONFIG_FILE]

각 항목의 의미는 다음과 같습니다.

  • [ADMIN_CLUSTER_KUBECONFIG]는 관리자 클러스터의 kubeconfig 파일 경로입니다.

  • [CONFIG_FILE]은 사용자 클러스터 구성 파일의 경로입니다.

사용자 클러스터 만들기

사용자 클러스터를 만듭니다.

gkectl create cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [CONFIG_FILE]

각 항목의 의미는 다음과 같습니다.

  • [ADMIN_CLUSTER_KUBECONFIG]는 관리자 클러스터의 kubeconfig 파일 경로입니다.

  • [CONFIG_FILE]은 사용자 클러스터 구성 파일의 경로입니다.