설치 계획

이 페이지는 베어메탈용 GDCV의 소규모 개념 증명 설치를 안내하는 가이드의 첫 번째 부분입니다. 이 문서에서는 최소 하드웨어 환경을 설정하고 IP 주소를 계획하는 방법을 보여줍니다. 후속 기본 클러스터 만들기에서는 관리자 클러스터와 사용자 클러스터를 만드는 방법을 보여줍니다. 이 가이드를 사용하여 설정한 인프라는 실제 프로덕션 요구사항 및 사용 사례에 적합하지 않을 수 있습니다. 프로덕션 설치에 대한 자세한 내용은 배포 모델 선택을 참조하세요.

시작하기 전에

  1. 베어메탈용 GKE 정보를 읽습니다.
  2. 프로젝트, IAM 권한, 서비스 계정을 포함한 몇 가지 기본 Google Cloud 개념을 숙지합니다.
  3. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. 나중에 필요하므로 Google Cloud 프로젝트 ID를 기록해 둡니다.

절차 개요

최소 인프라 설정은 다음과 같은 기본 단계로 구성됩니다.

  1. 관리자 워크스테이션 설정. 온프레미스 관리 작업을 위한 Linux 관리자 워크스테이션을 설정합니다. 여러 클러스터를 관리할 수 있는 기존 머신 또는 전용 머신을 설정할 수 있습니다.

  2. 클러스터 노드 머신 설정. 노드를 위한 머신을 적어도 3개(관리자 클러스터 노드 1개, 사용자 클러스터 제어 영역 노드 1개, 사용자 클러스터 워커 노드 1개) 설정합니다.

  3. 네트워킹 계획. 노드 머신, 가상 IP 주소(VIP), 서비스 및 포드 CIDR 범위의 IP 주소를 계획합니다.

  4. 필수 Google Cloud 리소스 검토. 클러스터를 만들려면 Google Cloud 프로젝트에 특정 Google API 및 서비스 계정이 필요합니다.

1. 관리자 워크스테이션 설정

관리자 워크스테이션은 클러스터를 만들고 작업하는 도구와 구성 파일을 호스팅합니다.

하드웨어 요구사항

관리 스테이션을 사용하려면 도구를 실행하고 클러스터 생성 및 관리와 관련된 리소스를 저장할 수 있는 상당한 컴퓨팅 성능, 메모리, 스토리지가 필요합니다.

관리자 워크스테이션에서 다음 하드웨어 요구사항을 충족하는지 확인합니다.

  • CPU 코어 2개 이상
  • 4GiB 이상의 RAM
  • 128GiB 이상의 스토리지

운영체제 및 소프트웨어 구성

관리자 워크스테이션에 다음을 설치하고 구성합니다.

  • Ubuntu 구성

  • gcloud CLI 설치

  • kubectl 설치

  • bmctl 설치

운영체제 구성

bmctl을 실행하고 클러스터를 만들기 위해 관리자 워크스테이션에는 노드와 동일한 운영체제(OS) 요구사항이 있습니다. 각 머신은 Ubuntu 20.04와 같이 지원되는 Ubuntu 버전을 실행해야 합니다.

다음 명령어를 실행하여 방화벽 설정을 업데이트하고 Docker를 설치 및 구성하며 각 머신에서 시간 동기화를 사용하는지 확인합니다.

  1. Uncomplicated Firewall(UFW)을 사용 중지하고 상태를 확인합니다.

    sudo ufw disable
    sudo ufw status
    
  2. 이전 Docker 버전을 삭제하고 패키지 관리자를 업데이트하며 최신 버전의 Docker를 설치합니다.

    sudo apt-get remove docker docker-engine docker.io containerd runc
    sudo apt-get update
    sudo apt-get install \
      apt-transport-https \
      ca-certificates \
      curl \
      gnupg-agent \
      software-properties-common \
      docker.io
    
  3. 현재 Docker 버전 19.03 이상이 실행 중인지 확인합니다.

    sudo docker version
    

    다음 샘플 응답에 표시된 대로, 클라이언트 버전과 서버 버전 모두 19.03 이상이어야 합니다.

    Client:
     Version:           20.10.21
     API version:       1.41
     Go version:        go1.18.1
     ...
    
    Server:
     Engine:
      Version:          20.10.21
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.18.1
      ...
    
  4. docker 그룹을 만듭니다.

    sudo groupadd docker
    
  5. 사용자 자신을 Docker 그룹에 추가합니다.

    sudo usermod -aG docker $USER
    
  6. 다음 명령어를 실행하여 그룹 변경사항을 활성화합니다.

    newgrp docker
    
  7. 다음 명령어를 실행하여 시스템 클록이 동기화되었는지 확인합니다.

    timedatectl
    

    timedatectl의 출력에는 다음 상태가 포함되어야 합니다.

    System clock synchronized: yes
    

Google Cloud CLI 설치

Ubuntu에 Google Cloud CLI를 설치하려면 이 설치 가이드의 안내를 따릅니다.

관리자 워크스테이션에서 다음 단계를 수행하여 gcloud CLI를 구성합니다.

  1. 로그인하여 gcloud CLI account 속성을 설정합니다.

    gcloud auth login
    
  2. gcloud CLI project 속성을 설정합니다.

    gcloud config set project PROJECT_ID
    

    PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

  3. accountproject 속성이 올바르게 설정되었는지 확인합니다.

    gcloud config list
    

    출력에 accountproject 속성의 값이 표시됩니다. 예를 들면 다음과 같습니다.

    [core]
    account = my-name@google.com
    disable_usage_reporting = False
    project = my-project-1234
    Your active configuration is: [default]
    

kubectl 설치

kubectl을 설치하려면 다음 안내를 따르세요.

  1. 관리자 워크스테이션에서 다음 명령어를 실행합니다.

    gcloud components install kubectl
    

bmctl 설치

bmctl은 클러스터 생성 및 관리에 사용할 수 있는 베어메탈용 GKE의 독점 명령줄 도구입니다.

관리자 워크스테이션에 bmctl을 설치하려면 다음 안내를 따르세요.

  1. baremetal 디렉터리를 만들어 경로에 추가합니다. 홈 디렉터리에 있는 경우 명령어는 다음과 같습니다.

    mkdir baremetal
    export PATH="$HOME/baremetal:$PATH"
    
  2. 다음 명령어를 실행하여 최신 버전의 bmctl 바이너리 파일을 다운로드하고 실행합니다.

    gsutil cp gs://anthos-baremetal-release/bmctl/1.16.7/linux-amd64/bmctl .
    chmod +x ./bmctl
    
  3. bmctl이 설치되어 있고 실행 가능한지 확인합니다.

    bmctl version
    

    응답은 다음 출력과 같이 표시됩니다.

    [2023-05-12 17:36:16+0000] bmctl version: 1.14.2-gke.11, git commit: 4ff1347446a93925a079000b50437d4ecebcdf3a, build date: Mon Feb 27 14:07:30 PST 2023
    

연결

관리자 워크스테이션에서 Google Cloud 및 모든 클러스터 노드에 액세스해야 합니다.

Google Cloud에 액세스

관리자 워크스테이션은 Google Cloud에 액세스하여 도구와 이미지 다운로드 및 설치, 승인 요청 처리, 서비스 계정 생성, 로깅 및 모니터링 관리 등을 수행합니다. Google Cloud에 대한 액세스 권한이 없는 클러스터를 만들 수 없습니다.

관리자 워크스테이션에서 액세스

관리자 워크스테이션에서 클러스터를 만들고 관리하려면 노드 머신에 대한 다음 액세스 권한이 필요합니다.

  • 모든 클러스터 노드 머신에 대한 Layer 3 연결
  • 제어 영역 VIP에 대한 액세스 권한입니다.
  • SSH를 통해 모든 클러스터 노드 머신에 비밀번호가 없는 root 액세스. 직접 또는 sudo를 통해 SSH 액세스가 가능합니다.

다음 섹션에는 관리자 워크스테이션과 노드 머신에서 SSH를 설정하는 방법에 대한 안내가 포함되어 있습니다.

2. 클러스터 노드 머신 설정

고가용성이 아닌 단일 관리자 클러스터와 고가용성이 아닌 단일 사용자 클러스터를 최소한으로 설치하려면 머신 세 개가 필요합니다.

  • 제어 영역 노드가 1개인 관리자 클러스터용 머신

  • 제어 영역 노드 1개와 워커 노드 1개가 있는 사용자 클러스터용 머신 2개

하드웨어 요구사항

각 노드 머신에서 다음 하드웨어 요구사항을 충족해야 합니다.

  • CPU 코어 2개 이상
  • 4GiB 이상의 RAM
  • 128GiB 이상의 스토리지

Ubuntu 구성

관리자 워크스테이션에 사용된 안내와 동일한 안내를 따라 각 노드에서 Ubuntu를 구성합니다.

노드에 대한 SSH 액세스 설정

관리자 워크스테이션에는 SSH를 통해 모든 클러스터 노드 머신에 비밀번호가 없는 root 액세스 권한이 필요합니다. 직접 또는 sudo를 통해 root 액세스가 가능합니다.

다음은 베어메탈용 GKE에 SSH를 설정하는 개략적인 단계입니다.

  1. 모든 머신에 SSH 설치 및 구성

  2. SSH 키를 만들고 공개 키를 각 노드 머신에 복사

  3. 노드 머신에서 비밀번호 인증 중지

  4. 관리자 워크스테이션과 노드 머신 간의 SSH 액세스 확인

모든 머신에 SSH 설치 및 구성

베어메탈용 GKE에는 관리자 워크스테이션과 클러스터 노드 간에 비밀번호가 없는 SSH 통신이 필요합니다. 관리자 워크스테이션과 각 노드 머신에서 다음 단계를 수행해야 합니다.

Ubuntu를 실행하는 머신에서 SSH를 구성하려면 다음 안내를 따르세요.

  1. 아직 SSH 서버가 실행되고 있지 않으면 지금 설치합니다.

    sudo apt update
    sudo apt install openssh-server
    sudo systemctl status ssh
    
  2. /etc/ssh/sshd_config 파일에서 PermitRootLoginPasswordAuthentication 줄의 주석 처리를 삭제하거나 추가하고 값을 yes로 설정하여 root SSH 비밀번호 인증을 사용 설정합니다.

    # Authentication:
    
    #LoginGraceTime 2m
    PermitRootLogin yes
    #StrictModes yes
    #MaxAuthTries 6
    #MaxSessions 10
    ...
    PasswordAuthentication yes
    
  3. 루트 비밀번호를 설정합니다.

    sudo passwd root
    
  4. SSH 구성 변경사항을 적용하려면 SSH 서비스를 다시 시작합니다.

    sudo systemctl restart ssh.service
    
  5. 시스템을 다시 시작합니다.

  6. 다른 머신에서 SSH 연결을 설정하여 SSH가 작동하는지 확인합니다.

SSH 키를 만들고 공개 키를 각 노드 머신에 복사

관리자 워크스테이션과 노드 간의 안전하고 비밀번호 없는 연결을 위해 관리자 워크스테이션에 SSH 키를 만들고 공개 키를 노드와 공유합니다.

  1. 관리자 워크스테이션에서 비공개 및 공개 키 쌍을 생성합니다. 키에 암호를 설정하지 마세요.

    ssh-keygen -t rsa
    
  2. 관리자 워크스테이션에서 생성된 공개 키를 각 노드 머신에 복사합니다.

    ssh-copy-id -i PUBLIC_KEY root@CLUSTER_NODE_IP
    

    다음을 바꿉니다.

    • PUBLIC_KEY: SSH 공개 키가 포함된 파일의 경로. 기본적으로 경로는 /home/USERNAME/.ssh/id_rsa.pub입니다.
    • CLUSTER_NODE_IP: 노드 머신의 IP 주소
노드 머신에서 비밀번호 인증 중지

이 시점에서는 더 이상 비밀번호 인증을 사용 설정할 필요가 없습니다.

노드 머신마다 다음을 수행합니다.

  1. /etc/ssh/sshd_config를 열어 PasswordAuthenticationno로 설정하고 파일을 저장합니다.

  2. SSH 서비스를 다시 시작합니다.

    sudo systemctl restart ssh.service
    
관리자 워크스테이션과 노드 머신 간의 SSH 액세스 확인

SSH가 올바르게 구성되면 비밀번호 없이 관리자 워크스테이션(루트)에서 노드 머신에 SSH 연결을 설정할 수 있습니다.

관리자 워크스테이션과 클러스터 노드 간에 공개 키 인증이 작동하는지 확인하려면 다음 안내를 따르세요.

  1. 관리자 워크스테이션에서 노드 머신마다 다음 명령어를 실행합니다.

    ssh -o IdentitiesOnly=yes -i PRIVATE_KEY root@CLUSTER_NODE_IP
    

    다음을 바꿉니다.

    • PRIVATE_KEY: SSH 비공개 키가 포함된 파일의 경로. 기본적으로 경로는 /home/USERNAME/.ssh/id_rsa입니다.
    • CLUSTER_NODE_IP: 노드 머신의 IP 주소

3. 네트워킹 계획

클러스터를 설치할 때 주소 충돌을 일으키지 않도록 IP 주소를 계획하는 것이 중요합니다. 간단한 설치더라도 구성에 적절한 주소를 찾으려면 네트워크 관리자가 필요할 수 있습니다. 포드 및 서비스 CIDR 수를 계산하지 않으려면 최소 관리자 클러스터 및 사용자 클러스터 설치를 위해 고유한 IP 주소가 최소 15개 이상 필요합니다.

다음 클러스터 구성요소의 IP 주소를 계획하고 지정합니다.

  • 클러스터 노드: 각 노드 머신의 IP 주소가 필요합니다.
  • 가상 IP 주소(VIP): Kubernetes API 서버, 인그레스 프록시, LoadBalancer 유형의 서비스에 액세스하려면 VIP가 필요합니다.
  • 포드 및 서비스: 클러스터에서 실행되는 모든 포드와 서비스를 수용하려면 CIDR 주소 범위가 필요합니다.

이 섹션의 나머지 부분에서는 가상의 네트워크에서 이 설치에 작동하는 값의 예시를 보여줍니다. 실제 값은 예시와 다릅니다.

이 소규모 설치의 경우 관리자 워크스테이션, 관리자 클러스터 노드, 사용자 클러스터 노드를 동일한 레이어 2 도메인에 배치합니다. 예를 들어 172.16.20.0/24 범위의 모든 IP 주소가 특정 레이어 2 도메인으로 라우팅된다고 가정해 보겠습니다. 또한 네트워크 관리자에 의해 노드 머신 주소에 172.16.20.10 - 172.16.20.12를 사용하고 VIP에 172.16.0.13 - 172.16.20.24를 사용할 수 있다고 가정합니다.

다음 다이어그램은 관리자 워크스테이션, 관리자 클러스터, 사용자 클러스터가 있는 레이어 2 도메인을 보여줍니다.

관리자 클러스터 및 사용자 클러스터의에 대한 IP 주소입니다.
관리자 클러스터 및 사용자 클러스터의 IP 주소(확대하려면 클릭)

클러스터 노드 IP 주소 예시

다음 표에서는 클러스터 노드에 IP 주소를 사용할 수 있는 방법에 대한 예시를 보여줍니다.

머신 설명 IP 주소
관리자 클러스터 제어 영역 노드 관리자 클러스터의 제어 영역 노드 역할을 하는 물리적 머신 172.16.20.10
사용자 클러스터 제어 영역 노드 사용자 클러스터의 제어 영역 노드 역할을 하는 물리적 머신 172.16.20.11
사용자 클러스터 워커 노드 사용자 워크로드를 실행하는 물리적 머신 172.16.20.12

가상 IP 주소(VIP) 예시

다음 표에서는 클러스터의 VIP를 지정하는 방법의 예시를 보여줍니다.

VIP 설명 IP 주소
관리자 클러스터 제어 영역 VIP 주소 관리자 클러스터 제어 영역 VIP 주소(관리자 클러스터 Kubernetes API 서버) 172.16.20.13
사용자 클러스터 제어 영역 VIP 주소 사용자 클러스터 제어 영역 VIP 주소(사용자 클러스터 Kubernetes API 서버) 172.16.20.14
인그레스 VIP 주소 인그레스 VIP(MetalLB 주소 풀 범위에 포함됨) 172.16.20.15
서비스 VIP 주소 LoadBalancer 유형의 서비스에 대해 외부 IP 주소로 사용할 주소 10개 주소는 필요에 따라 사용자 클러스터 노드에 할당됩니다.

이 범위에는 인그레스 VIP가 포함됩니다. 이 IP 주소 중복은 기본 번들 부하 분산기인 MetalLB에 대한 요구사항입니다.

172.16.20.15 - 172.16.20.24

포드 및 서비스용 IP 주소

클러스터 노드와 VIP에 지정한 IP 주소 외에도 포드 및 서비스의 주소를 지정해야 합니다. 포드 IP 주소에 사용할 CIDR 범위와 Kubernetes 서비스의 ClusterIP 주소에 사용할 다른 CIDR 범위를 지정합니다. RFC 1918의 설명대로 비공개 주소 공간에서 IP 주소를 사용합니다. 이 주소는 이 가이드의 다음 부분에서 설명했듯이 클러스터 구성의 일부로 지정됩니다.

IP 계획의 일부로 포드 및 서비스에 사용할 CIDR 범위를 결정합니다. 특별한 이유가 없는 한 다음 추천 범위를 사용하세요.

목적 자동 입력된 CIDR 범위
관리자 클러스터 포드 192.168.0.0/16
관리자 클러스터 서비스 10.96.0.0/20
사용자 클러스터 포드 192.168.0.0/16
사용자 클러스터 서비스 10.96.0.0/20

추천 범위는 다음과 같은 사항을 보여줍니다.

  • 포드 CIDR 범위는 기본 섬(island) 모드 네트워크 모델의 여러 클러스터에서 같을 수 있습니다.

  • 서비스 CIDR 범위는 여러 클러스터에서 동일할 수 있습니다.

  • 일반적으로 클러스터에 있는 서비스보다 더 많은 포드가 필요하므로 서비스 CIDR 범위보다 큰 포드 CIDR 범위가 필요할 수 있습니다. 예를 들어 사용자 클러스터의 추천 포드 범위에는 2(32-16)=216개의 주소가 있지만, 사용자 클러스터의 추천 서비스 범위에는 주소가 2(32-20) = 212개만 있습니다.

겹침 방지

네트워크에서 연결할 수 있는 IP 주소와 겹치지 않도록 이전 추천과 다른 CIDR 범위를 사용해야 할 수도 있습니다. 서비스 범위와 포드 범위는 클러스터 내부에서 연결하려는 클러스터 외부의 주소와 겹치지 않아야 합니다.

예를 들어 서비스 범위가 10.96.232.0/24이고 포드 범위가 192.168.0.0/16이라고 가정해 보겠습니다. 포드에서 이러한 범위 중 하나의 주소로 전송되는 트래픽은 클러스터 내 트래픽으로 처리되며 클러스터 외부의 대상에 도달할 수 없습니다.

특히 서비스 범위와 포드 범위는 다음과 겹치지 않아야 합니다.

  • 모든 클러스터에 있는 노드의 IP 주소

  • 부하 분산기 머신에서 사용하는 IP 주소

  • 제어 영역 노드 및 부하 분산기에서 사용하는 VIP

  • DNS 서버 또는 NTP 서버의 IP 주소

4. 필수 Google Cloud 리소스 검토

클러스터를 만들려면 먼저 베어메탈용 GKE에서 연결된 Google Cloud 프로젝트에서 특정 Google API 집합을 사용 설정해야 합니다. Google API를 사용하려면 베어메탈용 GKE에 연결된 Google Cloud 프로젝트의 특정 IAM 역할로 구성된 서비스 계정이 필요합니다.

이 가이드의 다음 부분인 기본 클러스터 만들기에서 클러스터를 만드는 프로세스는 API를 사용 설정하고 서비스 계정을 자동으로 만듭니다.

자동으로 사용 설정되는 Google API는 다음과 같습니다.

  • anthos.googleapis.com
  • anthosaudit.googleapis.com
  • anthosgke.googleapis.com
  • cloudresourcemanager.googleapis.com
  • connectgateway.googleapis.com
  • container.googleapis.com
  • gkeconnect.googleapis.com
  • gkehub.googleapis.com
  • gkeonprem.googleapis.com
  • iam.googleapis.com
  • logging.googleapis.com
  • monitoring.googleapis.com
  • opsconfigmonitoring.googleapis.com
  • serviceusage.googleapis.com
  • stackdriver.googleapis.com
  • storage.googleapis.com

다음 표에서는 자동으로 생성되는 서비스 계정을 설명합니다.

서비스 계정 목적 역할
anthos-baremetal-gcr 베어메탈용 GDCV는 이 서비스 계정을 사용하여 Container Registry에서 컨테이너 이미지를 다운로드합니다. 없음
anthos-baremetal-connect Connect Agent는 이 서비스 계정을 사용하여 클러스터와 Google Cloud 간의 연결을 유지합니다. 이렇게 하면 클러스터와 워크로드 관리 기능(Google Cloud 콘솔 및 connect 게이트웨이 포함)에 액세스하여 클러스터와 상호작용할 수 있습니다. roles/gkehub.connect
anthos-baremetal-register Connect Agent는 이 서비스 계정을 사용하여 Fleet에 클러스터를 등록합니다. roles/gkehub.admin
anthos-baremetal-cloud-ops Stackdriver Agent는 이 서비스 계정을 사용하여 클러스터의 로그와 측정항목을 Cloud LoggingCloud Monitoring으로 내보냅니다. roles/logging.logWriter
roles/monitoring.metricWriter
roles/stackdriver.resourceMetadata.writer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/monitoring.dashboardEditor

다음 단계

기본 클러스터 만들기