이 페이지는 Google Distributed Cloud 소프트웨어(이전 명칭: Google Distributed Cloud)를 사용하여 베어메탈 하드웨어에서 GKE 클러스터의 소규모 개념 증명 설치를 만드는 방법을 안내하는 가이드의 첫 번째 부분입니다. 이 문서에서는 최소 하드웨어 환경을 설정하고 IP 주소를 계획하는 방법을 보여줍니다. 후속 기본 클러스터 만들기에서는 관리자 클러스터와 사용자 클러스터를 만드는 방법을 보여줍니다.
이 페이지는 기본 기술 인프라의 수명 주기를 설정, 모니터링, 관리하는 관리자, 설계자, 운영자를 위해 작성되었습니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 작업에 대해 자세히 알아보려면 일반 GKE 기업 사용자 역할 및 작업을 참조하세요.
이 가이드를 사용하여 설정한 인프라는 실제 프로덕션 요구사항 및 사용 사례에 적합하지 않을 수 있습니다. 프로덕션 설치에 대한 자세한 내용은 배포 모델 선택을 참조하세요.
시작하기 전에
- Google Distributed Cloud 정보를 읽어보세요.
- 프로젝트, IAM 권한, 서비스 계정을 포함한 몇 가지 기본 Google Cloud 개념을 숙지합니다.
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 나중에 필요하므로 Google Cloud 프로젝트 ID를 기록해 둡니다.
절차 개요
최소 인프라 설정은 다음과 같은 기본 단계로 구성됩니다.
관리자 워크스테이션 설정. 온프레미스 관리 작업을 위한 Linux 관리자 워크스테이션을 설정합니다. 여러 클러스터를 관리할 수 있는 기존 머신 또는 전용 머신을 설정할 수 있습니다.
클러스터 노드 머신 설정. 노드를 위한 머신을 적어도 3개(관리자 클러스터 노드 1개, 사용자 클러스터 제어 영역 노드 1개, 사용자 클러스터 워커 노드 1개) 설정합니다.
네트워킹 계획. 노드 머신, 가상 IP 주소(VIP), 서비스 및 포드 CIDR 범위의 IP 주소를 계획합니다.
필수 Google Cloud 리소스 검토. 클러스터를 만들려면 Google Cloud 프로젝트에 특정 Google API 및 서비스 계정이 필요합니다.
1. 관리자 워크스테이션 설정
관리자 워크스테이션은 클러스터를 만들고 작업하는 도구와 구성 파일을 호스팅합니다.
하드웨어 요구사항
관리 스테이션을 사용하려면 도구를 실행하고 클러스터 생성 및 관리와 관련된 리소스를 저장할 수 있는 상당한 컴퓨팅 성능, 메모리, 스토리지가 필요합니다.
관리자 워크스테이션에서 다음 하드웨어 요구사항을 충족하는지 확인합니다.
- CPU 코어 2개 이상
- 4GiB 이상의 RAM
- 128GiB 이상의 스토리지
운영체제 요구사항
bmctl
을 실행하고 클러스터를 만들기 위해 관리자 워크스테이션에는 노드와 동일한 운영체제(OS) 요구사항이 있습니다. 각 머신은 지원되는 Ubuntu 버전을 실행해야 합니다.
운영체제 및 소프트웨어 구성
관리자 워크스테이션에 다음을 설치하고 구성합니다.
Ubuntu 구성
gcloud CLI 설치
kubectl
설치bmctl
설치
운영체제 구성
다음 명령어를 실행하여 방화벽 설정을 업데이트하고 Docker를 설치 및 구성하며 각 머신에서 시간 동기화를 사용하는지 확인합니다.
Uncomplicated Firewall(UFW)을 사용 중지하고 상태를 확인합니다.
sudo ufw disable sudo ufw status
이전 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
현재 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 ...
docker
그룹을 만듭니다.sudo groupadd docker
사용자 자신을 Docker 그룹에 추가합니다.
sudo usermod -aG docker $USER
다음 명령어를 실행하여 그룹 변경사항을 활성화합니다.
newgrp docker
다음 명령어를 실행하여 시스템 클록이 동기화되었는지 확인합니다.
timedatectl
timedatectl
의 출력에는 다음 상태가 포함되어야 합니다.System clock synchronized: yes
Google Cloud CLI 설치
Ubuntu에 Google Cloud CLI를 설치하려면 이 설치 가이드의 안내를 따릅니다.
관리자 워크스테이션에서 다음 단계를 수행하여 gcloud CLI를 구성합니다.
로그인하여 gcloud CLI
account
속성을 설정합니다.gcloud auth login
gcloud CLI
project
속성을 설정합니다.gcloud config set project PROJECT_ID
PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.account
및project
속성이 올바르게 설정되었는지 확인합니다.gcloud config list
출력에
account
및project
속성의 값이 표시됩니다. 예를 들면 다음과 같습니다.[core] account = my-name@google.com disable_usage_reporting = False project = my-project-1234 Your active configuration is: [default]
kubectl
설치
kubectl
을 설치하려면 다음 안내를 따르세요.
관리자 워크스테이션에서 다음 명령어를 실행합니다.
gcloud components install kubectl
bmctl
설치
bmctl
은 클러스터 생성 및 관리에 사용할 수 있는 Google Distributed Cloud용 독점 명령줄 도구입니다.
관리자 워크스테이션에 bmctl
을 설치하려면 다음 안내를 따르세요.
baremetal
디렉터리를 만들어 경로에 추가합니다. 홈 디렉터리에 있는 경우 명령어는 다음과 같습니다.mkdir baremetal export PATH="$HOME/baremetal:$PATH"
다음 명령어를 실행하여 최신 버전의
bmctl
바이너리 파일을 다운로드하고 실행합니다.gcloud storage cp gs://anthos-baremetal-release/bmctl/1.30.100-gke.96/linux-amd64/bmctl . chmod +x ./bmctl
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에 대한 액세스
root
또는 비밀번호 없는sudo
권한이 있는 사용자로 모든 클러스터 노드 머신에 대한 비밀번호 없는 SSH 액세스
다음 섹션에는 관리자 워크스테이션과 노드 머신에서 SSH를 설정하는 방법에 대한 안내가 포함되어 있습니다.
2. 클러스터 노드 머신 설정
고가용성이 아닌 단일 관리자 클러스터와 고가용성이 아닌 단일 사용자 클러스터를 최소한으로 설치하려면 머신 세 개가 필요합니다.
제어 영역 노드가 1개인 관리자 클러스터용 머신
제어 영역 노드 1개와 워커 노드 1개가 있는 사용자 클러스터용 머신 2개
하드웨어 요구사항
각 노드 머신에서 다음 하드웨어 요구사항을 충족해야 합니다.
- CPU 코어 2개 이상
- 4GiB 이상의 RAM
- 128GiB 이상의 스토리지
운영체제 요구사항
각 노드 머신은 지원되는 Ubuntu 버전을 실행해야 합니다.
Ubuntu 구성
관리자 워크스테이션에 사용된 안내와 동일한 안내를 따라 각 노드에서 Ubuntu를 구성합니다.
노드에 대한 SSH 액세스 설정
관리자 워크스테이션에는 모든 클러스터 노드 머신에 대한 비밀번호 없는 SSH 액세스 권한이 필요합니다. SSH를 root
로 설정하거나 비밀번호 없는 sudo
권한이 있는 사용자로 설정할 수 있습니다.
다음은 Google Distributed Cloud에 SSH를 설정하는 대략적인 단계입니다.
모든 머신에 SSH 설치 및 구성
SSH 키를 만들고 공개 키를 각 노드 머신에 복사
노드 머신에서 비밀번호 인증 중지
관리자 워크스테이션과 노드 머신 간의 SSH 액세스 확인
모든 머신에 SSH 설치 및 구성
Google Distributed Cloud에는 관리자 워크스테이션과 클러스터 노드 간에 비밀번호가 없는 SSH 통신이 필요합니다. 관리자 워크스테이션과 각 노드 머신에서 다음 단계를 수행해야 합니다.
Ubuntu를 실행하는 머신에서 SSH를 구성하려면 다음 안내를 따르세요.
아직 SSH 서버가 실행되고 있지 않으면 지금 설치합니다.
sudo apt update sudo apt install openssh-server sudo systemctl status ssh
/etc/ssh/sshd_config
파일에서PermitRootLogin
및PasswordAuthentication
줄의 주석 처리를 삭제하거나 추가하고 값을yes
로 설정하여root
SSH 비밀번호 인증을 사용 설정합니다.# Authentication: #LoginGraceTime 2m PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 ... PasswordAuthentication yes
루트 비밀번호를 설정합니다.
sudo passwd root
SSH 구성 변경사항을 적용하려면 SSH 서비스를 다시 시작합니다.
sudo systemctl restart ssh.service
시스템을 다시 시작합니다.
다른 머신에서 SSH 연결을 설정하여 SSH가 작동하는지 확인합니다.
SSH 키를 만들고 공개 키를 각 노드 머신에 복사
관리자 워크스테이션과 노드 간의 안전하고 비밀번호 없는 연결을 위해 관리자 워크스테이션에 SSH 키를 만들고 공개 키를 노드와 공유합니다.
관리자 워크스테이션에서 비공개 및 공개 키 쌍을 생성합니다. 키에 암호를 설정하지 마세요.
ssh-keygen -t rsa
관리자 워크스테이션에서 생성된 공개 키를 각 노드 머신에 복사합니다.
ssh-copy-id -i PUBLIC_KEY root@CLUSTER_NODE_IP
다음을 바꿉니다.
PUBLIC_KEY
: SSH 공개 키가 포함된 파일의 경로. 기본적으로 경로는/home/USERNAME/.ssh/id_rsa.pub
입니다.CLUSTER_NODE_IP
: 노드 머신의 IP 주소
노드 머신에서 비밀번호 인증 중지
이 시점에서는 더 이상 비밀번호 인증을 사용 설정할 필요가 없습니다.
노드 머신마다 다음을 수행합니다.
/etc/ssh/sshd_config
를 열어PasswordAuthentication
을no
로 설정하고 파일을 저장합니다.SSH 서비스를 다시 시작합니다.
sudo systemctl restart ssh.service
관리자 워크스테이션과 노드 머신 간의 SSH 액세스 확인
SSH가 올바르게 구성되면 비밀번호 없이 관리자 워크스테이션(루트)에서 노드 머신에 SSH 연결을 설정할 수 있습니다.
관리자 워크스테이션과 클러스터 노드 간에 공개 키 인증이 작동하는지 확인하려면 다음 안내를 따르세요.
관리자 워크스테이션에서 노드 머신마다 다음 명령어를 실행합니다.
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 주소를 사용할 수 있는 방법에 대한 예시를 보여줍니다.
Machine | 설명 | 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 리소스 검토
클러스터를 만들려면 먼저 Google Distributed Cloud에서 연결된 Google Cloud 프로젝트에서 특정 Google API 집합을 사용 설정해야 합니다. Google API를 사용하려면 Google Distributed Cloud에 연결된 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 | Google Distributed Cloud는 이 서비스 계정을 사용하여 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 Logging 및 Cloud Monitoring으로 내보냅니다. |
roles/logging.logWriter roles/monitoring.metricWriter roles/stackdriver.resourceMetadata.writer roles/opsconfigmonitoring.resourceMetadata.writer roles/monitoring.dashboardEditor |