7.12. 사용자 프로비저닝 인프라가 있는 제한된 네트워크에서 GCP에 클러스터 설치
OpenShift Container Platform 4.9 버전에서는 사용자가 제공하는 인프라 및 설치 릴리스 콘텐츠의 내부 미러를 사용하는 GCP(Google Cloud Platform)에 클러스터를 설치할 수 있습니다.
미러링된 설치 릴리스 콘텐츠를 사용하여 OpenShift Container Platform 클러스터를 설치할 수는 있지만 GCP API를 사용하려면 여전히 클러스터에 인터넷 액세스가 필요합니다.
사용자 제공 인프라 설치 단계가 여기에 요약되어 있습니다. 안내된 단계를 수행하거나 자체 모델링에 유용한 몇 가지 Deployment Manager 템플릿이 제공됩니다. 여러 다른 방법을 통해 필요한 리소스를 자유롭게 생성할 수도 있습니다.
사용자가 프로비저닝한 인프라 설치를 수행하는 단계는 예시용으로만 제공됩니다. 사용자가 제공하는 인프라를 사용하여 클러스터를 설치하려면 클라우드 공급자 및 OpenShift Container Platform 설치 프로세스에 대한 정보가 필요합니다. 안내된 단계를 수행하거나 자체 모델링에 유용한 몇 가지 Deployment Manager 템플릿이 제공됩니다. 여러 다른 방법을 통해 필요한 리소스를 자유롭게 생성할 수도 있습니다. 템플릿은 예시일 뿐입니다.
7.12.1. 사전 요구 사항
- OpenShift Container Platform 설치 및 업데이트 프로세스에 대한 세부 사항을 검토합니다.
- 클러스터 설치 방법 선택 및 사용자를 위한 준비에 대한 문서를 읽습니다.
미러 호스트에 레지스트리를 생성하고 사용 중인 OpenShift Container Platform 버전의
imageContentSources
데이터를 가져옵니다.중요미러 호스트에 설치 미디어가 있으므로 해당 컴퓨터를 사용하여 모든 설치 단계를 완료하십시오.
-
방화벽을 사용하는 경우 클러스터가 액세스해야 하는 사이트를 허용하도록 방화벽을 구성해야 합니다. 액세스 권한을 부여해야 할 사이트가 더 있을지도 모르지만
*.googleapis.com
과accounts.google.com
에 액세스 권한은 반드시 부여해야 합니다. -
사용자의 환경에서 클라우드 ID 및 액세스 관리(IAM) API에 액세스할 수 없거나
kube-system
네임스페이스에 관리자 수준의 인증 정보 시크릿을 저장하지 않으려면 IAM 인증 정보 수동 생성 및 유지 관리를 참조하십시오.
7.12.2. 네트워크가 제한된 환경에서의 설치 정보
OpenShift Container Platform 4.9에서는 소프트웨어 구성 요소를 받기 위한 인터넷 접속이 필요하지 않은 설치를 수행할 수 있습니다. 제한된 네트워크 설치는 클러스터를 설치하는 클라우드 플랫폼에 따라 설치 관리자 프로비저닝 인프라 또는 사용자 프로비저닝 인프라를 사용하여 완료할 수 있습니다.
클라우드 플랫폼에 제한된 네트워크 설치를 수행하는 방법을 선택해도 클라우드 API에 액세스는 가능해야 합니다. Amazon Web Service의 Route 53 DNS 및 IAM 서비스와 같은 일부 클라우드 기능에는 인터넷 액세스가 필요합니다. 사용 중인 네트워크에 따라 베어메탈 하드웨어 또는 VMware vSphere에 설치하기 위해 필요한 인터넷 액세스가 줄어들 수 있습니다.
제한된 네트워크 설치를 완료하려면 OpenShift Container Platform 레지스트리의 내용을 미러링하고 설치 미디어를 포함할 레지스트리를 생성해야 합니다. 인터넷과 폐쇄 네트워크에 모두 액세스하거나 제한 사항을 따르는 다른 방법을 통해 미러 호스트에 레지스트리를 생성할 수 있습니다.
사용자 프로비저닝 설치의 구성이 복잡하므로 사용자 프로비저닝 인프라를 사용하여 제한된 네트워크 설치를 시도하기 전에 표준 사용자 프로비저닝 인프라 설치를 완료하는 것이 좋습니다. 이 테스트 설치를 완료하면 제한된 네트워크에 설치하는 동안 발생할 수 있는 문제를 보다 쉽게 파악 및 해결할 수 있습니다.
7.12.2.1. 추가 제한
제한된 네트워크의 클러스터에는 다음과 같은 추가 제한이 있습니다.
-
ClusterVersion
상태에사용 가능한 업데이트를 검색할 수 없음
오류가 포함되어 있습니다. - 기본적으로 필요한 이미지 스트림 태그에 액세스할 수 없기 때문에 개발자 카탈로그의 내용을 사용할 수 없습니다.
7.12.3. OpenShift Container Platform 용 인터넷 액세스
OpenShift Container Platform 4.9에서 클러스터를 설치하기 위해 필요한 이미지를 받으려면 인터넷 액세스가 필요합니다.
다음의 경우 인터넷 액세스가 필요합니다.
- OpenShift Cluster Manager 에 액세스하여 설치 프로그램을 다운로드하고 서브스크립션 관리를 수행합니다. 클러스터가 인터넷에 액세스할 수 있고 Telemetry 서비스를 비활성화하지 않은 경우, 클러스터에 자동으로 권한이 부여됩니다.
- Quay.io에 액세스. 클러스터를 설치하는 데 필요한 패키지를 받을 수 있습니다.
- 클러스터 업데이트를 수행하는 데 필요한 패키지를 받을 수 있습니다.
클러스터가 직접 인터넷에 액세스할 수 없는 경우, 프로비저닝하는 일부 유형의 인프라에서 제한된 네트워크 설치를 수행할 수 있습니다. 이 프로세스 동안 필요한 콘텐츠를 다운로드하고 이를 사용하여 설치 패키지로 미러 레지스트리를 채웁니다. 설치 유형에 따라서는 클러스터를 설치하는 환경에 인터넷 액세스가 필요하지 않을 수도 있습니다. 클러스터를 업데이트하기 전에 미러 레지스트리의 내용을 업데이트합니다.
7.12.4. GCP 프로젝트 구성
OpenShift Container Platform을 설치하려면 먼저 호스팅할 GCP(Google Cloud Platform) 프로젝트를 구성해야 합니다.
7.12.4.1. GCP 프로젝트 생성
OpenShift Container Platform을 설치하려면 클러스터를 호스팅할 GCP(Google Cloud Platform) 계정에 프로젝트를 생성해야 합니다.
프로세스
OpenShift Container Platform 클러스터를 호스팅할 프로젝트를 생성합니다. GCP 문서의 프로젝트 생성 및 관리 단원을 참조하십시오.
중요설치 관리자 프로비저닝 인프라를 사용하는 경우 GCP 프로젝트는 Premium Network Service Tier를 사용해야 합니다. 설치 프로그램을 사용하여 설치된 클러스터의 Standard Network Service Tier는 지원되지 않습니다. 설치 프로그램은
api-int.<cluster_name>.<base_domain>
URL에 대한 내부 로드 밸런싱을 구성합니다.
7.12.4.2. GCP에서 API 서비스 활성화
GCP(Google Cloud Platform) 프로젝트에서 OpenShift Container Platform 설치를 완료하려면 여러 API 서비스에 액세스해야 합니다.
사전 요구 사항
- 클러스터를 호스팅할 프로젝트 생성을 완료했습니다.
프로세스
클러스터를 호스팅하는 프로젝트에서 다음과 같은 필수 API 서비스를 활성화합니다. GCP 문서의 서비스 활성화 단원을 참조하십시오.
표 7.51. 필수 API 서비스 API 서비스 콘솔 서비스 이름 컴퓨팅 엔진 API
compute.googleapis.com
Google 클라우드 API
cloudapis.googleapis.com
클라우드 리소스 관리자 API
cloudresourcemanager.googleapis.com
Google DNS API
dns.googleapis.com
IAM 서비스 계정 자격 증명 API
iamcredentials.googleapis.com
IAM(ID 및 액세스 관리) API
iam.googleapis.com
서비스 관리 API
servicemanagement.googleapis.com
서비스 사용량 API
serviceusage.googleapis.com
Google 클라우드 스토리지 JSON API
storage-api.googleapis.com
클라우드 스토리지
storage-component.googleapis.com
7.12.4.3. GCP용 DNS 구성
OpenShift Container Platform을 설치하려면 사용하는 GCP(Google Cloud Platform) 계정에 OpenShift Container Platform 클러스터를 호스팅하는 프로젝트와 동일한 프로젝트에 전용 퍼블릭 호스팅 영역이 있어야 합니다. 도메인에 대한 권한도 이 영역에 있어야 합니다. DNS 서비스는 클러스터와 외부 연결에 필요한 클러스터 DNS 확인 및 이름 조회 기능을 제공합니다.
프로세스
도메인 또는 하위 도메인과 등록 기관을 식별합니다. 기존 도메인 및 등록 기관을 이전하거나 GCP 또는 다른 소스를 통해 새 도메인과 등록 기관을 구할 수 있습니다.
참고새 도메인을 구입하는 경우, 관련 DNS 변경사항이 전파되는 데 시간이 걸릴 수 있습니다. Google을 통한 도메인 구매에 대한 자세한 내용은 Google 도메인을 참조하십시오.
GCP 프로젝트에서 도메인 또는 하위 도메인의 퍼블릭 호스팅 영역을 생성합니다. GCP 문서의 퍼블릭 영역 생성 단원을 참조하십시오.
적절한 루트 도메인(예:
openshiftcorp.com
) 또는 하위 도메인(예:clusters.openshiftcorp.com)
을 사용합니다.호스팅 영역 레코드에서 권한이 있는 새 이름 서버를 추출합니다. GCP 문서의 클라우드 DNS 이름 서버 조회 단원을 참조하십시오.
일반적으로 네 가지 이름 서버가 있습니다.
- 도메인에서 사용하는 이름 서버의 등록 기관 레코드를 업데이트합니다. 예를 들어, 사용자 도메인을 Google 도메인에 등록한 경우 Google 도메인 도움말의 사용자 지정 이름 서버로 전환하는 방법 항목을 참조하십시오.
- 루트 도메인을 Google Cloud DNS로 마이그레이션했으면 DNS 레코드를 마이그레이션합니다. GCP 문서의 클라우드 DNS로 마이그레이션을 참조하십시오.
- 하위 도메인을 사용하는 경우, 회사의 프로시저에 따라 상위 도메인에 위임 레코드를 추가합니다. 이 과정에 회사의 IT 부서 또는 회사의 루트 도메인 및 DNS 서비스를 제어하는 부서에 요청하는 일도 포함될 수 있습니다.
7.12.4.4. GCP 계정 제한
OpenShift Container Platform 클러스터는 여러 GCP(Google Cloud Platform) 구성 요소를 사용하지만 기본 할당량이 기본 OpenShift Container Platform 클러스터 설치가 가능할지 여부에 영향을 미치지 않습니다.
컴퓨팅 및 컨트롤 플레인 시스템 세 개가 포함된 기본 클러스터는 다음과 같은 리소스를 사용합니다. 일부 리소스는 부트스트랩 프로세스 중에만 필요하며 클러스터 배포 후 제거됩니다.
서비스 | 구성 요소 | 위치 | 필요한 총 리소스 | 부트스트랩 후 제거된 리소스 |
---|---|---|---|---|
서비스 계정 | IAM | 글로벌 | 5 | 0 |
방화벽 규칙 | 네트워킹 | 글로벌 | 11 | 1 |
전송 규칙 | 컴퓨팅 | 글로벌 | 2 | 0 |
상태 검사 | 컴퓨팅 | 글로벌 | 2 | 0 |
이미지 | 컴퓨팅 | 글로벌 | 1 | 0 |
네트워크 | 네트워킹 | 글로벌 | 1 | 0 |
라우터 | 네트워킹 | 글로벌 | 1 | 0 |
라우트 | 네트워킹 | 글로벌 | 2 | 0 |
서브네트워크 | 컴퓨팅 | 글로벌 | 2 | 0 |
대상 풀 | 네트워킹 | 글로벌 | 2 | 0 |
설치하는 동안 할당량이 충분하지 않으면 설치 프로그램에서 초과된 할당량과 리전을 모두 안내하는 오류 메시지를 표시합니다.
실제 클러스터 크기, 예상 클러스터 증가, 계정과 연결된 다른 클러스터의 사용량을 모두 고려해야 합니다. CPU, 고정 IP 주소, 영구 디스크 SSD(스토리지) 할당량이 가장 부족하기 쉬운 할당량입니다.
다음 리전 중 하나에서 클러스터를 배포하려는 경우, 최대 스토리지 할당량을 초과할 것이며, CPU 할당량 제한을 초과할 가능성도 있습니다.
-
asia-east2
-
asia-northeast2
-
asia-south1
-
australia-southeast1
-
europe-north1
-
europe-west2
-
europe-west3
-
europe-west6
-
northamerica-northeast1
-
southamerica-east1
-
us-west2
GCP 콘솔에서 리소스 할당량을 늘릴 수는 있지만 지원 티켓을 제출해야 할 수도 있습니다. OpenShift Container Platform 클러스터를 설치하기 전에 지원 티켓을 해결할 시간이 충분하도록 조기에 클러스터 크기를 계획해야 합니다.
7.12.4.5. GCP에서 서비스 계정 생성
OpenShift Container Platform에는 Google API의 데이터에 액세스하기 위한 인증 및 승인을 제공하는 GCP(Google Cloud Platform) 서비스 계정이 필요합니다. 프로젝트에 필요한 역할이 포함된 기존 IAM 서비스 계정이 없으면 새로 생성해야 합니다.
사전 요구 사항
- 클러스터를 호스팅할 프로젝트 생성을 완료했습니다.
프로세스
- OpenShift Container Platform 클러스터를 호스팅하는 데 사용하는 프로젝트에 서비스 계정을 생성합니다. GCP 문서의 서비스 계정 생성 단원을 참조하십시오.
서비스 계정에 적절한 권한을 부여합니다. 뒤따르는 개별 권한을 부여하거나
Owner
역할을 할당할 수 있습니다. 서비스 계정에 특정 리소스에 대한 역할 부여를 참조하십시오.참고서비스 계정을 프로젝트 소유자로 지정하는 것은 가장 쉽게 필요한 권한을 얻는 방법이며, 서비스 계정으로 프로젝트를 완전히 제어할 수 있음을 의미합니다. 해당 권한을 제공하는 데 따른 위험이 수용 가능한 수준인지 확인해봐야 합니다.
JSON 형식으로 서비스 계정 키를 생성합니다. GCP 문서의 서비스 계정 키 생성 단원을 참조하십시오.
클러스터를 생성하기 위해서는 서비스 계정 키가 필요합니다.
7.12.4.5.1. 필요한 GCP 권한
생성하는 서비스 계정에 Owner
역할을 연결하면 OpenShift Container Platform 설치에 필요한 권한을 포함하여 모든 권한이 해당 서비스 계정에 부여됩니다. OpenShift Container Platform 클러스터를 배포하려면 서비스 계정에 다음과 같은 권한이 필요합니다. 기존 VPC에 클러스터를 배포할 때는 다음 목록에 제시된 특정 네트워킹 권한이 서비스 계정에 필요하지 않습니다.
설치 프로그램에 필요한 역할
- 컴퓨팅 관리자
- 보안 관리자
- 서비스 계정 관리자
- 서비스 계정 사용자
- 스토리지 관리자
설치 과정에서 네트워크 리소스를 생성하는 데 필요한 역할
- DNS 관리자
사용자 프로비저닝 GCP 인프라에 필요한 역할
- 배포 관리자 편집자
- 서비스 계정 키 관리자
선택적 역할
운영자를 위한 제한적 자격 증명을 새로 생성하는 클러스터의 경우 다음 역할을 추가합니다.
- 서비스 계정 키 관리자
컨트롤 플레인 및 컴퓨팅 시스템이 사용하는 서비스 계정에 적용되는 역할입니다.
계정 | 역할 |
---|---|
컨트롤 플레인 |
|
| |
| |
| |
| |
컴퓨팅 |
|
|
7.12.4.6. 지원되는 GCP 리전
다음과 같은 GCP(Google Cloud Platform) 리전에 OpenShift Container Platform 클러스터를 배포할 수 있습니다.
-
asia-east1
(대만 장화현) -
asia-east2
(홍콩) -
asia-northeast1
(일본 도쿄) -
asia-northeast2
(일본 오사카) -
asia-northeast3
(한국 서울) -
asia-south1
(인도 뭄바이) -
asia-southeast1
(싱가포르 주롱 웨스트) -
asia-southeast2
(인도네시아 자카르타) -
australia-southeast1
(호주 시드니) -
europe-central2
(폴란드 바르샤바) -
europe-north1
(핀란드 하미나) -
europe-west1
(벨기에 생기슬랭) -
europe-west2
(영국 런던) -
europe-west3
(독일 프랑크푸르트) -
europe-west4
(네덜란드 엠스하벤) -
europe-west6
(스위스 취리히) -
northamerica-northeast1
(캐나다 퀘벡 주 몬트리올) -
southamerica-east1
(브라질 상파울루) -
us-central1
(미국 아이오와 주 카운실 블러프스) -
us-east1
(미국 사우스 캐롤라이나 주 몽크스 코너) -
us-east4
(미국 노던 버지니아 주 애쉬번) -
us-west1
(미국 오레곤 주 댈러스) -
us-west2
(미국 캘리포니아 주 로스앤젤레스) -
us-west3
(미국 유타 주 솔트레이크시티) -
us-west4
(미국 네바다 라스베거스)
7.12.4.7. GCP용 CLI 도구 설치 및 구성
사용자 프로비저닝 인프라를 사용하는 OpenShift Container Platform을 GCP(Google Cloud Platform)에 설치하려면 GCP용 CLI 도구를 설치하고 구성해야 합니다.
사전 요구 사항
- 클러스터를 호스팅할 프로젝트 생성을 완료했습니다.
- 서비스 계정 생성과 필요한 권한 부여 작업을 마쳤습니다.
프로세스
$PATH에
다음 바이너리를 설치합니다.-
gcloud
-
gsutil
GCP 문서의 최신 클라우드 SDK 버전 설치 단원을 참조하십시오.
-
구성된 서비스 계정과
gcloud
도구를 사용하여 인증합니다.GCP 문서의 서비스 계정 인증을 참조하십시오.
7.12.5. 사용자 프로비저닝 인프라를 포함한 클러스터의 시스템 요구사항
사용자 프로비저닝 인프라가 포함된 클러스터의 경우, 필요한 모든 시스템을 배포해야 합니다.
이 섹션에서는 사용자 프로비저닝 인프라에 OpenShift Container Platform을 배포해야 하는 요구 사항에 대해 설명합니다.
7.12.5.1. 클러스터 설치에 필요한 시스템
최소 OpenShift Container Platform 클러스터에 다음과 같은 호스트가 필요합니다.
호스트 | 설명 |
---|---|
임시 부트스트랩 시스템 한 개 | 컨트롤 플레인 시스템 세 개에 OpenShift Container Platform 클러스터를 배포하기 위한 부트스트랩 시스템이 클러스터에 필요합니다. 클러스터를 설치한 후 부트스트랩 시스템을 제거할 수 있습니다. |
컨트롤 플레인 시스템 세 개 | 컨트롤 플레인 시스템은 컨트롤 플레인을 구성하는 Kubernetes 및 OpenShift Container Platform 서비스를 실행합니다. |
두 개 이상의 컴퓨팅 시스템(작업자 시스템이라고도 함). | OpenShift Container Platform 사용자가 요청한 워크로드는 컴퓨팅 머신에서 실행됩니다. |
클러스터의 고가용성을 유지하려면 이러한 클러스터 시스템에 대해 별도의 물리적 호스트를 사용하십시오.
부트스트랩, 컨트롤 플레인 시스템은 운영 체제로 RHCOS (Red Hat Enterprise Linux CoreOS)를 사용해야 합니다. 그러나 컴퓨팅 머신은 RHCOS(Red Hat Enterprise Linux CoreOS), RHEL (Red Hat Enterprise Linux) 7.9 또는 RHEL 8.4 중에서 선택할 수 있습니다.
RHCOS는 RHEL 8(Red Hat Enterprise Linux)을 기반으로하며 모든 하드웨어 인증 및 요구사항을 모두 이어받습니다. Red Hat Enterprise Linux 기술 기능 및 제한을 참조하십시오.
7.12.5.2. 클러스터 설치를 위한 최소 리소스 요구 사항
각 클러스터 시스템이 다음과 같은 최소 요구사항을 충족해야 합니다.
시스템 | 운영 체제 | vCPU [1] | 가상 RAM | 스토리지 | IOPS [2] |
---|---|---|---|---|---|
부트스트랩 | RHCOS | 4 | 16GB | 100GB | 300 |
컨트롤 플레인 | RHCOS | 4 | 16GB | 100GB | 300 |
컴퓨팅 | RHCOS, RHEL 7.9 또는 RHEL 8.4 [3] | 2 | 8GB | 100GB | 300 |
- SMT(동시 멀티스레딩) 또는 하이퍼 스레딩이 활성화되지 않은 경우 하나의 vCPU는 하나의 물리적 코어와 동일합니다. 활성화하면 다음과 같은 공식을 사용하여 해당 비율을 계산합니다. (코어 당 스레드 수 × 코어 수) × 소켓 수 = vCPU 수
- OpenShift Container Platform 및 Kubernetes는 디스크 성능에 민감하며 특히 10ms p99 fsync 기간이 필요한 컨트롤 플레인 노드의 etcd에 더 빠른 스토리지가 권장됩니다. 많은 클라우드 플랫폼에서 스토리지 크기와 IOPS를 함께 확장되므로 충분한 성능을 얻으려면 스토리지 볼륨을 과도하게 할당해야 할 수 있습니다.
- 사용자가 프로비저닝한 모든 설치와 마찬가지로 클러스터에서 RHEL 컴퓨팅 머신을 사용하기로 선택한 경우 시스템 업데이트 수행, 패치 적용 및 기타 필요한 모든 작업 실행을 포함한 모든 운영 체제의 라이프 사이클 관리 및 유지 관리에 대한 책임이 있습니다. RHEL 7 컴퓨팅 머신 사용은 더 이상 사용되지 않으며 향후 OpenShift Container Platform 4 릴리스에서 제거될 예정입니다.
7.12.5.3. 사용자 정의 머신 유형 사용
OpenShift Container Platform 클러스터를 설치하기 위해 사용자 정의 머신 유형을 사용할 수 있습니다.
사용자 지정 머신 유형을 사용할 때는 다음을 고려하십시오.
- 사전 정의된 인스턴스 유형과 유사하게 사용자 정의 머신 유형은 컨트롤 플레인 및 컴퓨팅 시스템의 최소 리소스 요구 사항을 충족해야 합니다. 자세한 내용은 "클러스터 설치를 위한 최소 리소스 요구 사항"을 참조하십시오.
사용자 정의 머신 유형의 이름은 다음 구문을 준수해야 합니다.
custom-<number_of_cpus>-<amount_of_memory_in_mb>
예를 들면
custom-6-20480
입니다.
7.12.6. GCP용 설치 파일 생성
사용자 프로비저닝 인프라를 사용하는 OpenShift Container Platform을 GCP(Google Cloud Platform)에 설치하려면 설치 프로그램에서 클러스터를 배포하는 데 필요한 파일을 생성하고 클러스터가 사용할 시스템만을 생성하도록 파일을 수정해야 합니다. install-config.yaml
파일, Kubernetes 매니페스트 및 Ignition 구성 파일을 생성하고 사용자 지정합니다. 또한 설치 준비 단계에서 별도의 var
파티션을 먼저 설정할 수 있는 옵션이 있습니다.
7.12.6.1. 선택 사항: 별도의 /var
파티션 만들기
OpenShift Container Platform의 디스크 파티션 설정은 설치 프로그램에 맡기는 것이 좋습니다. 그러나 확장하려는 파일 시스템의 일부에 별도의 파티션을 생성해야 하는 경우가 있습니다.
OpenShift 컨테이너 플랫폼은 /var
파티션 또는 /var
의 하위 디렉터리 중 하나에 스토리지를 연결하는 단일 파티션의 추가를 지원합니다. 예를 들면 다음과 같습니다.
-
/var/lib/containers
: 시스템에 더 많은 이미지와 컨테이너가 추가됨에 따라 확장될 수 있는 컨테이너 관련 콘텐츠를 보관합니다. -
/var/lib/etcd
: etcd 스토리지의 성능 최적화와 같은 목적으로 별도로 보관할 데이터를 보관합니다. -
/var
: 감사 등의 목적에 맞게 별도로 분리하여 보관해야 하는 데이터를 보관합니다.
/var
디렉터리의 콘텐츠를 별도로 저장하면 필요에 따라 해당 영역에 대한 스토리지 확장을 보다 용이하게 하고 나중에 OpenShift Container Platform을 다시 설치하여 해당 데이터를 그대로 보존할 수 있습니다. 이 방법을 사용하면 모든 컨테이너를 다시 가져올 필요가 없으며 시스템을 업데이트할 때 대용량 로그 파일을 복사할 필요도 없습니다.
RHCOS(Red Hat Enterprise Linux CoreOS)를 새로 설치하기 전에 /var가
파티션을 설정합니다.
있어야
하므로 다음 절차에서는 OpenShift Container Platform 설치의 openshift-install
준비 단계 중에 삽입되는 머신 구성 매니페스트를 생성하여 별도의 /var
이 절차에서 별도의 /var
파티션을 생성하기 위해 단계에 따라 이 섹션의 뒷부분에서 설명한 대로 Kubernetes 매니페스트 및 Ignition 구성 파일을 다시 생성할 필요가 없습니다.
프로세스
OpenShift Container Platform 설치 파일을 저장할 디렉터리를 만듭니다.
$ mkdir $HOME/clusterconfig
openshift-install
을 실행하여manifest
및openshift
하위 디렉터리에 파일 세트를 만듭니다. 프롬프트가 표시되면 시스템 질문에 대답합니다.$ openshift-install create manifests --dir $HOME/clusterconfig
출력 예
? SSH Public Key ... INFO Credentials loaded from the "myprofile" profile in file "/home/myuser/.aws/credentials" INFO Consuming Install Config from target directory INFO Manifests created in: $HOME/clusterconfig/manifests and $HOME/clusterconfig/openshift
선택 사항: 설치 프로그램이
clusterconfig/openshift
디렉터리에 매니페스트를 생성했는지 확인합니다.$ ls $HOME/clusterconfig/openshift/
출력 예
99_kubeadmin-password-secret.yaml 99_openshift-cluster-api_master-machines-0.yaml 99_openshift-cluster-api_master-machines-1.yaml 99_openshift-cluster-api_master-machines-2.yaml ...
추가 파티션을 구성하는 Butane 구성을 생성합니다. 예를 들어 파일 이름을
$HOME/clusterconfig/98-var-partition.bu
로 지정하고, 디스크 장치 이름을worker
시스템의 스토리지 장치 이름으로 변경하고 스토리지 크기를 적절하게 설정합니다. 이 예에서는/var
디렉토리를 별도의 파티션에 배치합니다.variant: openshift version: 4.9.0 metadata: labels: machineconfiguration.openshift.io/role: worker name: 98-var-partition storage: disks: - device: /dev/<device_name> 1 partitions: - label: var start_mib: <partition_start_offset> 2 size_mib: <partition_size> 3 filesystems: - device: /dev/disk/by-partlabel/var path: /var format: xfs mount_options: [defaults, prjquota] 4 with_mount_unit: true
- 1
- 파티션을 설정해야하는 디스크 저장 장치 이름입니다.
- 2
- 데이터 파티션을 부트 디스크에 추가할 때 최소 25000MiB(메비 바이트)가 권장됩니다. 루트 파일 시스템은 지정된 오프셋까지 사용 가능한 모든 공간을 채우기 위해 자동으로 크기가 조정됩니다. 값이 지정되지 않거나 지정된 값이 권장 최소값보다 작으면 생성되는 루트 파일 시스템의 크기가 너무 작아지고 RHCOS를 나중에 다시 설치할 때 데이터 파티션의 첫 번째 부분을 덮어 쓸 수 있습니다.
- 3
- 데이터 파티션의 크기(MB)입니다.
- 4
- 컨테이너 스토리지에 사용되는 파일 시스템에
prjquota
마운트 옵션을 활성화해야 합니다.
참고별도의
/var
파티션을 만들 때 다른 인스턴스 유형에 동일한 장치 이름이 없는 경우 작업자 노드에 다른 인스턴스 유형을 사용할 수 없습니다.Butane 구성에서 매니페스트를 생성하여
clusterconfig/openshift
디렉터리에 저장합니다. 예를 들어 다음 명령을 실행합니다.$ butane $HOME/clusterconfig/98-var-partition.bu -o $HOME/clusterconfig/openshift/98-var-partition.yaml
openshift-install
을 다시 실행하여manifest
및openshift
하위 디렉터리의 파일 세트에서 Ignition 구성을 만듭니다.$ openshift-install create ignition-configs --dir $HOME/clusterconfig $ ls $HOME/clusterconfig/ auth bootstrap.ign master.ign metadata.json worker.ign
이제 Ignition 구성 파일을 설치 절차에 대한 입력으로 사용하여 RHCOS (Red Hat Enterprise Linux CoreOS) 시스템을 설치할 수 있습니다.
7.12.6.2. 설치 구성 파일 만들기
GCP(Google Cloud Platform)에 설치하는 OpenShift Container Platform 클러스터를 사용자 지정할 수 있습니다.
사전 요구 사항
- OpenShift Container Platform 설치 프로그램과 클러스터의 풀 시크릿을 받습니다. 제한된 네트워크 설치의 경우, 해당 파일은 미러 호스트에 있습니다.
-
미러 레지스트리 작성 중에 생성된
imageContentSources
값이 있어야 합니다. - 미러 레지스트리에 대한 인증서의 내용을 가져옵니다.
- 서브스크립션 수준에서 서비스 주체 권한을 획득합니다.
프로세스
install-config.yaml
파일을 생성합니다.설치 프로그램이 포함된 디렉터리로 변경하고 다음 명령을 실행합니다.
$ ./openshift-install create install-config --dir <installation_directory> 1
- 1
<installation_directory>
는 설치 프로그램이 생성하는 파일을 저장할 디렉터리 이름을 지정합니다.
중요비어 있는 디렉터리를 지정합니다. 부트스트랩 X.509 인증서와 같은 일부 설치 자산은 단기간에 만료되므로 설치 디렉터리를 재사용해서는 안 됩니다. 다른 클러스터 설치의 개별 파일을 재사용하려면 해당 파일을 사용자 디렉터리에 복사하면 됩니다. 그러나 설치 자산의 파일 이름은 릴리스간에 변경될 수 있습니다. 따라서 이전 OpenShift Container Platform 버전에서 설치 파일을 복사할 때는 주의하십시오.
화면에 나타나는 지시에 따라 클라우드에 대한 구성 세부 사항을 입력합니다.
선택사항: 클러스터 시스템에 액세스하는 데 사용할 SSH 키를 선택합니다.
참고설치 디버깅 또는 재해 복구를 수행하려는 프로덕션 OpenShift Container Platform 클러스터의 경우
ssh-agent
프로세스가 사용하는 SSH 키를 지정합니다.- 대상 플랫폼으로 gcp를 선택합니다.
- 사용자 컴퓨터에 GCP 계정의 서비스 계정 키가 구성되어 있지 않은 경우, GCP에서 해당 키를 가져와 파일의 내용을 붙여 넣거나 파일의 전체 경로를 입력해야 합니다.
- 클러스터를 프로비저닝할 프로젝트 ID를 선택합니다. 구성한 서비스 계정에 의해 기본값이 지정됩니다.
- 클러스터를 배포할 리전을 선택합니다.
- 클러스터를 배포할 기본 도메인을 선택합니다. 기본 도메인은 클러스터용으로 생성한 퍼블릭 DNS 영역에 해당합니다.
- 클러스터를 설명할 수 있는 이름을 입력합니다.
- Red Hat OpenShift Cluster Manager에서 풀 시크릿 을 붙여넣습니다.
제한된 네트워크에서의 설치에 필요한 추가 정보를 제공하려면
install-config.yaml
파일을 편집합니다.레지스트리의 인증 정보를 포함하도록
pullSecret
값을 업데이트합니다.pullSecret: '{"auths":{"<mirror_host_name>:5000": {"auth": "<credentials>","email": "you@example.com"}}}'
<mirror_host_name>
의 경우 미러 레지스트리의 인증서에 지정한 레지스트리 도메인 이름을 지정하고<credentials>
의 경우 미러 레지스트리에 base64로 인코딩된 사용자 이름 및 암호를 지정합니다.additionalTrustBundle
매개변수와 값을 추가합니다.additionalTrustBundle: | -----BEGIN CERTIFICATE----- ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ -----END CERTIFICATE-----
값은 미러 레지스트리에 사용한 인증서 파일의 내용이어야 하며, 신뢰할 수 있는 기존 인증 기관 또는 미러 레지스트리에 대해 생성한 자체 서명 인증서일 수 있습니다.
상위
platform.gcp
필드 아래에 클러스터를 설치할 VPC의 네트워크 및 서브넷을 정의합니다.network: <existing_vpc> controlPlaneSubnet: <control_plane_subnet> computeSubnet: <compute_subnet>
platform.gcp.network
의 경우 기존 Google VPC의 이름을 지정합니다.platform.gcp.controlPlaneSubnet
및platform.gcp.computeSubnet
의 경우 각각 컨트롤 플레인 시스템 및 컴퓨팅 시스템을 배포할 기존 서브넷을 지정합니다.다음과 같은 이미지 콘텐츠 리소스를 추가합니다.
imageContentSources: - mirrors: - <mirror_host_name>:5000/<repo_name>/release source: quay.io/openshift-release-dev/ocp-release - mirrors: - <mirror_host_name>:5000/<repo_name>/release source: registry.redhat.io/ocp/release
이러한 값을 완료하려면 미러 레지스트리 생성 중에 기록한
imageContentSources
를 사용하십시오.
-
필요한
install-config.yaml
파일을 수정합니다. 사용 가능한 매개변수에 대한 자세한 정보는 Installation configuration parameters 섹션에서 확인할 수 있습니다. 여러 클러스터를 설치하는 데 사용할 수 있도록
install-config.yaml
파일을 백업합니다.중요install-config.yaml
파일은 설치 과정에서 사용됩니다. 이 파일을 재사용하려면 지금 백업해야 합니다.
7.12.6.3. 설치 중 클러스터 단위 프록시 구성
프로덕션 환경에서는 인터넷에 대한 직접 액세스를 거부하고 대신 HTTP 또는 HTTPS 프록시를 사용할 수 있습니다. install-config.yaml
파일에서 프록시 설정을 구성하여 프록시가 사용되도록 새 OpenShift Container Platform 클러스터를 구성할 수 있습니다.
사전 요구 사항
-
기존
install-config.yaml
파일이 있습니다. 클러스터에서 액세스해야 하는 사이트를 검토하고 프록시를 바이패스해야 하는지 확인했습니다. 기본적으로 호스팅 클라우드 공급자 API에 대한 호출을 포함하여 모든 클러스터 발신(Egress) 트래픽이 프록시됩니다. 필요한 경우 프록시를 바이패스하기 위해
Proxy
오브젝트의spec.noProxy
필드에 사이트를 추가했습니다.참고Proxy
오브젝트의status.noProxy
필드는 설치 구성에 있는networking.machineNetwork[].cidr
,networking.clusterNetwork[].cidr
,networking.serviceNetwork[]
필드의 값으로 채워집니다.Amazon Web Services (AWS), Google Cloud Platform (GCP), Microsoft Azure 및 Red Hat OpenStack Platform (RHOSP)에 설치하는 경우
Proxy
오브젝트status.noProxy
필드도 인스턴스 메타데이터 끝점(169.254.169.254
)로 채워집니다.
절차
install-config.yaml
파일을 편집하고 프록시 설정을 추가합니다. 예를 들면 다음과 같습니다.apiVersion: v1 baseDomain: my.domain.com proxy: httpProxy: http://<username>:<pswd>@<ip>:<port> 1 httpsProxy: https://<username>:<pswd>@<ip>:<port> 2 noProxy: example.com 3 additionalTrustBundle: | 4 -----BEGIN CERTIFICATE----- <MY_TRUSTED_CA_CERT> -----END CERTIFICATE----- ...
- 1
- 클러스터 외부에서 HTTP 연결을 구축하는 데 사용할 프록시 URL입니다. URL 스키마는
http
여야 합니다. - 2
- 클러스터 외부에서 HTTPS 연결을 구축하는 데 사용할 프록시 URL입니다.
- 3
- 대상 도메인 이름, IP 주소 또는 프록시에서 제외할 기타 네트워크 CIDR로 이루어진 쉼표로 구분된 목록입니다. 하위 도메인과 일치하려면 도메인 앞에
.
을 입력합니다. 예를 들어,.y.com
은x.y.com
과 일치하지만y.com
은 일치하지 않습니다.*
를 사용하여 모든 대상에 대해 프록시를 바이패스합니다. - 4
- 이 값을 제공하면 설치 프로그램에서 추가 CA 인증서를 보유할
openshift
이라는 구성 맵을 생성합니다.-config 네임스페이스에 user-ca-
bundleadditionalTrustBundle
및 하나 이상의 프록시 설정을 제공하는 경우프록시
오브젝트는trustedCA
필드의user-ca-bundle
구성 맵을 참조하도록 구성됩니다. 그러면 Cluster Network Operator에서trustedCA
매개변수에 대해 지정된 콘텐츠를 RHCOS 신뢰 번들과 병합하는trusted-ca-bundle
구성 맵을 생성합니다. 프록시의 ID 인증서를 RHCOS 트러스트 번들에 있는 기관에서 서명하지 않은 경우additionalTrustBundle
필드가 있어야 합니다.
참고설치 프로그램에서 프록시
adinessEndpoints
필드를 지원하지 않습니다.- 파일을 저장해 놓고 OpenShift Container Platform을 설치할 때 참조하십시오.
제공되는 install-config.yaml
파일의 프록시 설정을 사용하는 cluster
라는 이름의 클러스터 전체 프록시가 설치 프로그램에 의해 생성됩니다. 프록시 설정을 제공하지 않아도 cluster
Proxy
오브젝트는 계속 생성되지만 spec
은 nil이 됩니다.
cluster
라는 Proxy
오브젝트만 지원되며 추가 프록시는 생성할 수 없습니다.
7.12.6.4. Kubernetes 매니페스트 및 Ignition 설정 파일 생성
일부 클러스터 정의 파일을 수정하고 클러스터 시스템을 수동으로 시작해야 하므로 클러스터가 시스템을 구성하는 데 필요한 Kubernetes 매니페스트 및 Ignition 구성 파일을 사용자가 생성해야 합니다.
설치 구성 파일은 Kubernetes 매니페스트로 변환됩니다. 매니페스트는 나중에 클러스터 머신을 구성하는 데 사용되는 Ignition 구성 파일로 래핑됩니다.
-
OpenShift Container Platform 설치 프로그램에서 생성하는 Ignition 구성 파일에 24시간 후에 만료되는 인증서가 포함되어 있습니다. 이 인증서는 그 후에 갱신됩니다. 인증서를 갱신하기 전에 클러스터가 종료되고 24시간이 지난 후에 클러스터가 다시 시작되면 클러스터는 만료된 인증서를 자동으로 복구합니다. 예외적으로 kubelet 인증서를 복구하려면 대기 중인
node-bootstrapper
인증서 서명 요청(CSR)을 수동으로 승인해야 합니다. 자세한 내용은 Recovering from expired control plane certificates 문서를 참조하십시오. - 클러스터를 설치한 후 24시간에서 22시간까지의 인증서가 교체되기 때문에 생성된 후 12시간 이내에 Ignition 구성 파일을 사용하는 것이 좋습니다. 12시간 이내에 Ignition 구성 파일을 사용하면 설치 중에 인증서 업데이트가 실행되는 경우 설치 실패를 방지할 수 있습니다.
사전 요구 사항
- OpenShift Container Platform 설치 프로그램을 가져오셨습니다. 제한된 네트워크 설치의 경우, 해당 파일은 미러 호스트에 있습니다.
-
install-config.yaml
설치 구성 파일을 생성하셨습니다.
절차
OpenShift Container Platform 설치 프로그램이 포함된 디렉터리로 변경하고 클러스터에 대한 Kubernetes 매니페스트를 생성합니다.
$ ./openshift-install create manifests --dir <installation_directory> 1
- 1
<installation_directory>
는 사용자가 만든install-config.yaml
파일이 포함된 설치 디렉터리를 지정합니다.
컨트롤 플레인 시스템을 정의하는 Kubernetes 매니페스트 파일을 제거합니다.
$ rm -f <installation_directory>/openshift/99_openshift-cluster-api_master-machines-*.yaml
이러한 파일을 제거하면 클러스터가 컨트롤 플레인 시스템을 자동으로 생성하지 못합니다.
선택사항: 클러스터가 컴퓨팅 시스템을 프로비저닝하지 않도록 하려면 작업자 시스템을 정의하는 Kubernetes 매니페스트 파일을 제거하십시오.
$ rm -f <installation_directory>/openshift/99_openshift-cluster-api_worker-machineset-*.yaml
작업자 시스템은 사용자가 직접 생성하고 관리하기 때문에 초기화할 필요가 없습니다.
<installation_directory>/manifests/cluster-scheduler-02-config.yml
Kubernetes 매니페스트 파일의mastersSchedulable
매개변수가false
로 설정되어 있는지 확인합니다. 이 설정으로 인해 컨트롤 플레인 머신에서 포드가 예약되지 않습니다.-
<installation_directory>/manifests/cluster-scheduler-02-config.yml
파일을 엽니다. -
mastersSchedulable
매개변수를 찾아서 값을False
로 설정되어 있는지 확인합니다. - 파일을 저장하고 종료합니다.
-
선택사항: Ingress Operator가 사용자 대신 DNS 레코드를 생성하지 못하도록 하려면
<installation_directory>/manifests/cluster-dns-02-config.yml
DNS 구성 파일에서privateZone
및publicZone
섹션을 제거합니다.apiVersion: config.openshift.io/v1 kind: DNS metadata: creationTimestamp: null name: cluster spec: baseDomain: example.openshift.com privateZone: 1 id: mycluster-100419-private-zone publicZone: 2 id: example.openshift.com status: {}
제거한 경우 나중에 인그레스 DNS 레코드를 수동으로 추가해야 합니다.
Ignition 구성 파일을 생성하려면 설치 프로그램이 포함된 디렉터리에서 다음 명령을 실행합니다.
$ ./openshift-install create ignition-configs --dir <installation_directory> 1
- 1
<installation_directory>
는 동일한 설치 디렉터리를 지정합니다.
설치 디렉터리의 부트스트랩, 컨트롤 플레인 및 컴퓨팅 노드에 대한 Ignition 구성 파일이 생성됩니다.
kubeadmin-password
및kubeconfig
파일은./<installation_directory>/auth
디렉터리에 생성됩니다.. ├── auth │ ├── kubeadmin-password │ └── kubeconfig ├── bootstrap.ign ├── master.ign ├── metadata.json └── worker.ign
추가 리소스
7.12.7. 공통 변수 내보내기
7.12.7.1. 인프라 이름 추출
Ignition 구성 파일에는 GCP(Google Cloud Platform)에서 클러스터를 고유하게 식별하는 데 사용할 수 있는 고유한 클러스터 ID가 포함되어 있습니다. 인프라 이름은 OpenShift Container Platform 설치 중에 적절한 GCP 리소스를 찾는 데도 사용됩니다. 제공된 Deployment Manager 템플릿에 이 인프라 이름에 대한 참조가 포함되어 있으므로 이름을 추출해야 합니다.
사전 요구 사항
- OpenShift Container Platform 설치 프로그램과 클러스터의 풀 시크릿을 받으셨습니다.
- 클러스터에 대한 Ignition 구성 파일을 생성하셨습니다.
-
jq
CLI를 설치하셨습니다.
7.12.7.2. Deployment Manager 템플릿의 공통 변수 내보내기
GCP(Google Cloud Platform)에서 사용자 제공 인프라 설치를 지원하기 위해 제공된 Deployment Manager 템플릿과 함께 사용되는 공통 변수 세트를 내보내야 합니다.
특정 Deployment Manager 템플릿에는 추가적으로 내보낸 변수도 필요할 수 있습니다. 관련 프로시저에서 자세히 설명합니다.
사전 요구 사항
- OpenShift Container Platform 설치 프로그램과 클러스터의 풀 시크릿을 받습니다.
- 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
-
jq
패키지를 설치합니다.
절차
제공된 Deployment Manager 템플릿에서 사용할 다음 공통 변수를 내보냅니다.
$ export BASE_DOMAIN='<base_domain>' $ export BASE_DOMAIN_ZONE_NAME='<base_domain_zone_name>' $ export NETWORK_CIDR='10.0.0.0/16' $ export MASTER_SUBNET_CIDR='10.0.0.0/17' $ export WORKER_SUBNET_CIDR='10.0.128.0/17' $ export KUBECONFIG=<installation_directory>/auth/kubeconfig 1 $ export CLUSTER_NAME=`jq -r .clusterName <installation_directory>/metadata.json` $ export INFRA_ID=`jq -r .infraID <installation_directory>/metadata.json` $ export PROJECT_NAME=`jq -r .gcp.projectID <installation_directory>/metadata.json` $ export REGION=`jq -r .gcp.region <installation_directory>/metadata.json`
- 1
<installation_directory>
는 설치 파일을 저장한 디렉터리의 경로를 지정합니다.
7.12.8. GCP에서 VPC 생성
OpenShift Container Platform 클러스터에서 사용할 VPC를 GCP(Google Cloud Platform)에 생성해야 합니다. 요구사항에 맞춰 VPC를 사용자 지정할 수 있습니다. VPC를 생성하는 한 가지 방법은 제공된 Deployment Manager 템플릿을 수정하는 것입니다.
GCP 인프라를 생성하는 데 제공된 Deployment Manager 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.
사전 요구 사항
- GCP 계정을 구성하십시오.
- 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
프로세스
-
이 항목의 VPC에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에
01_vpc.py
로 저장합니다. 이 템플릿은 클러스터에 필요한 VPC를 설명합니다. 01_vpc.yaml
리소스 정의 파일을 생성합니다.$ cat <<EOF >01_vpc.yaml imports: - path: 01_vpc.py resources: - name: cluster-vpc type: 01_vpc.py properties: infra_id: '${INFRA_ID}' 1 region: '${REGION}' 2 master_subnet_cidr: '${MASTER_SUBNET_CIDR}' 3 worker_subnet_cidr: '${WORKER_SUBNET_CIDR}' 4 EOF
gcloud
CLI를 사용하여 배포를 생성합니다.$ gcloud deployment-manager deployments create ${INFRA_ID}-vpc --config 01_vpc.yaml
7.12.8.1. VPC용 Deployment Manager 템플릿
다음 Deployment Manager 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 VPC를 배포할 수 있습니다.
예 7.19. 01_vpc.py
Deployment Manager 템플릿
def GenerateConfig(context): resources = [{ 'name': context.properties['infra_id'] + '-network', 'type': 'compute.v1.network', 'properties': { 'region': context.properties['region'], 'autoCreateSubnetworks': False } }, { 'name': context.properties['infra_id'] + '-master-subnet', 'type': 'compute.v1.subnetwork', 'properties': { 'region': context.properties['region'], 'network': '$(ref.' + context.properties['infra_id'] + '-network.selfLink)', 'ipCidrRange': context.properties['master_subnet_cidr'] } }, { 'name': context.properties['infra_id'] + '-worker-subnet', 'type': 'compute.v1.subnetwork', 'properties': { 'region': context.properties['region'], 'network': '$(ref.' + context.properties['infra_id'] + '-network.selfLink)', 'ipCidrRange': context.properties['worker_subnet_cidr'] } }, { 'name': context.properties['infra_id'] + '-router', 'type': 'compute.v1.router', 'properties': { 'region': context.properties['region'], 'network': '$(ref.' + context.properties['infra_id'] + '-network.selfLink)', 'nats': [{ 'name': context.properties['infra_id'] + '-nat-master', 'natIpAllocateOption': 'AUTO_ONLY', 'minPortsPerVm': 7168, 'sourceSubnetworkIpRangesToNat': 'LIST_OF_SUBNETWORKS', 'subnetworks': [{ 'name': '$(ref.' + context.properties['infra_id'] + '-master-subnet.selfLink)', 'sourceIpRangesToNat': ['ALL_IP_RANGES'] }] }, { 'name': context.properties['infra_id'] + '-nat-worker', 'natIpAllocateOption': 'AUTO_ONLY', 'minPortsPerVm': 512, 'sourceSubnetworkIpRangesToNat': 'LIST_OF_SUBNETWORKS', 'subnetworks': [{ 'name': '$(ref.' + context.properties['infra_id'] + '-worker-subnet.selfLink)', 'sourceIpRangesToNat': ['ALL_IP_RANGES'] }] }] } }] return {'resources': resources}
7.12.9. 사용자 프로비저닝 인프라에 대한 네트워킹 요구사항
모든 RHCOS(Red Hat Enterprise Linux CoreOS) 시스템이 부팅 중에 Ignition 구성 파일을 가져오려면 initramfs
에 네트워킹을 구성해야 합니다.
7.12.9.1. DHCP를 통해 클러스터 노드의 호스트 이름 설정
RHCOS(Red Hat Enterprise Linux CoreOS) 시스템에서 호스트 이름은 NetworkManager를 통해 설정됩니다. 기본적으로 시스템은 DHCP를 통해 호스트 이름을 가져옵니다. DHCP에서 호스트 이름을 제공하지 않거나, 커널 인수를 통해 정적으로 설정하거나 다른 방법을 통해 설정하면 역방향 DNS 조회를 통해 얻을 수 있습니다. 역방향 DNS 조회는 노드에서 네트워크를 초기화한 후 수행되며 확인하는 데 시간이 걸릴 수 있습니다. 다른 시스템 서비스는 이 보다 먼저 시작하여 호스트 이름을 localhost
등으로 감지할 수 있습니다. DHCP를 사용하여 각 클러스터 노드의 호스트 이름을 제공하여 이 문제를 방지할 수 있습니다.
또한 DHCP를 통해 호스트 이름을 설정하면 DNS 분할 수평 구현 환경에서 수동으로 DNS 레코드 이름 구성 오류를 무시할 수 있습니다.
7.12.9.2. 네트워크 연결 요구사항
OpenShift Container Platform 클러스터 구성 요소가 통신할 수 있도록 시스템 간 네트워크 연결을 구성해야 합니다. 각 시스템에서 클러스터에 있는 다른 모든 시스템의 호스트 이름을 확인할 수 있어야 합니다.
이 섹션에서는 필요한 포트에 대해 자세히 설명합니다.
프로토콜 | 포트 | 설명 |
---|---|---|
ICMP | 해당 없음 | 네트워크 연결성 테스트 |
TCP |
| 메트릭 |
|
| |
| Kubernetes에서 예약하는 기본 포트 | |
| openshift-sdn | |
UDP |
| VXLAN 및 Geneve |
| VXLAN 및 Geneve | |
|
| |
| IPsec IKE 패킷 | |
| IPsec NAT-T 패킷 | |
TCP/UDP |
| Kubernetes 노드 포트 |
ESP | 해당 없음 | IPsec Encapsulating Security Payload (ESP) |
프로토콜 | 포트 | 설명 |
---|---|---|
TCP |
| Kubernetes API |
프로토콜 | 포트 | 설명 |
---|---|---|
TCP |
| etcd 서버 및 피어 포트 |
7.12.10. GCP에서 로드 밸런서 생성
OpenShift Container Platform 클러스터가 사용할 로드 밸런서를 GCP(Google Cloud Platform)에 구성해야 합니다. 이러한 구성 요소를 생성하는 한 가지 방법은 제공된 Deployment Manager 템플릿을 수정하는 것입니다.
GCP 인프라를 생성하는 데 제공된 Deployment Manager 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.
사전 요구 사항
- GCP 계정을 구성하십시오.
- 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
- GCP에서 VPC 및 관련 서브넷을 생성하고 구성하십시오.
프로세스
-
이 항목의 내부 로드 밸런서에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에
02_lb_int.py
로 저장합니다. 이 템플릿에서 클러스터에 필요한 내부 로드 밸런싱 개체를 설명합니다. -
외부 클러스터에 대해서도, 이 항목의 외부 로드 밸런서에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에
02_lb_ext.py
로 저장합니다. 이 템플릿에서 클러스터에 필요한 외부 로드 밸런싱 개체를 설명합니다. 배포 템플릿이 사용하는 변수를 내보냅니다.
클러스터 네트워크 위치를 내보냅니다.
$ export CLUSTER_NETWORK=(`gcloud compute networks describe ${INFRA_ID}-network --format json | jq -r .selfLink`)
컨트롤 플레인 서브넷 위치를 내보냅니다.
$ export CONTROL_SUBNET=(`gcloud compute networks subnets describe ${INFRA_ID}-master-subnet --region=${REGION} --format json | jq -r .selfLink`)
클러스터가 사용하는 세 영역을 내보냅니다.
$ export ZONE_0=(`gcloud compute regions describe ${REGION} --format=json | jq -r .zones[0] | cut -d "/" -f9`)
$ export ZONE_1=(`gcloud compute regions describe ${REGION} --format=json | jq -r .zones[1] | cut -d "/" -f9`)
$ export ZONE_2=(`gcloud compute regions describe ${REGION} --format=json | jq -r .zones[2] | cut -d "/" -f9`)
02_infra.yaml
리소스 정의 파일을 생성합니다.$ cat <<EOF >02_infra.yaml imports: - path: 02_lb_ext.py - path: 02_lb_int.py 1 resources: - name: cluster-lb-ext 2 type: 02_lb_ext.py properties: infra_id: '${INFRA_ID}' 3 region: '${REGION}' 4 - name: cluster-lb-int type: 02_lb_int.py properties: cluster_network: '${CLUSTER_NETWORK}' control_subnet: '${CONTROL_SUBNET}' 5 infra_id: '${INFRA_ID}' region: '${REGION}' zones: 6 - '${ZONE_0}' - '${ZONE_1}' - '${ZONE_2}' EOF
gcloud
CLI를 사용하여 배포를 생성합니다.$ gcloud deployment-manager deployments create ${INFRA_ID}-infra --config 02_infra.yaml
클러스터 IP 주소를 내보냅니다.
$ export CLUSTER_IP=(`gcloud compute addresses describe ${INFRA_ID}-cluster-ip --region=${REGION} --format json | jq -r .address`)
외부 클러스터의 경우 클러스터 공용 IP 주소도 내보냅니다.
$ export CLUSTER_PUBLIC_IP=(`gcloud compute addresses describe ${INFRA_ID}-cluster-public-ip --region=${REGION} --format json | jq -r .address`)
7.12.10.1. 외부 로드 밸런서에 대한 Deployment Manager 템플릿
다음 Deployment Manager 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 외부 로드 밸런서를 배포할 수 있습니다.
예 7.20. 02_lb_ext.py
Deployment Manager 템플릿
def GenerateConfig(context): resources = [{ 'name': context.properties['infra_id'] + '-cluster-public-ip', 'type': 'compute.v1.address', 'properties': { 'region': context.properties['region'] } }, { # Refer to docs/dev/kube-apiserver-health-check.md on how to correctly setup health check probe for kube-apiserver 'name': context.properties['infra_id'] + '-api-http-health-check', 'type': 'compute.v1.httpHealthCheck', 'properties': { 'port': 6080, 'requestPath': '/readyz' } }, { 'name': context.properties['infra_id'] + '-api-target-pool', 'type': 'compute.v1.targetPool', 'properties': { 'region': context.properties['region'], 'healthChecks': ['$(ref.' + context.properties['infra_id'] + '-api-http-health-check.selfLink)'], 'instances': [] } }, { 'name': context.properties['infra_id'] + '-api-forwarding-rule', 'type': 'compute.v1.forwardingRule', 'properties': { 'region': context.properties['region'], 'IPAddress': '$(ref.' + context.properties['infra_id'] + '-cluster-public-ip.selfLink)', 'target': '$(ref.' + context.properties['infra_id'] + '-api-target-pool.selfLink)', 'portRange': '6443' } }] return {'resources': resources}
7.12.10.2. 내부 로드 밸런서에 대한 Deployment Manager 템플릿
다음 Deployment Manager 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 내부 로드 밸런서를 배포할 수 있습니다.
예 7.21. 02_lb_int.py
Deployment Manager 템플릿
def GenerateConfig(context): backends = [] for zone in context.properties['zones']: backends.append({ 'group': '$(ref.' + context.properties['infra_id'] + '-master-' + zone + '-instance-group' + '.selfLink)' }) resources = [{ 'name': context.properties['infra_id'] + '-cluster-ip', 'type': 'compute.v1.address', 'properties': { 'addressType': 'INTERNAL', 'region': context.properties['region'], 'subnetwork': context.properties['control_subnet'] } }, { # Refer to docs/dev/kube-apiserver-health-check.md on how to correctly setup health check probe for kube-apiserver 'name': context.properties['infra_id'] + '-api-internal-health-check', 'type': 'compute.v1.healthCheck', 'properties': { 'httpsHealthCheck': { 'port': 6443, 'requestPath': '/readyz' }, 'type': "HTTPS" } }, { 'name': context.properties['infra_id'] + '-api-internal-backend-service', 'type': 'compute.v1.regionBackendService', 'properties': { 'backends': backends, 'healthChecks': ['$(ref.' + context.properties['infra_id'] + '-api-internal-health-check.selfLink)'], 'loadBalancingScheme': 'INTERNAL', 'region': context.properties['region'], 'protocol': 'TCP', 'timeoutSec': 120 } }, { 'name': context.properties['infra_id'] + '-api-internal-forwarding-rule', 'type': 'compute.v1.forwardingRule', 'properties': { 'backendService': '$(ref.' + context.properties['infra_id'] + '-api-internal-backend-service.selfLink)', 'IPAddress': '$(ref.' + context.properties['infra_id'] + '-cluster-ip.selfLink)', 'loadBalancingScheme': 'INTERNAL', 'ports': ['6443','22623'], 'region': context.properties['region'], 'subnetwork': context.properties['control_subnet'] } }] for zone in context.properties['zones']: resources.append({ 'name': context.properties['infra_id'] + '-master-' + zone + '-instance-group', 'type': 'compute.v1.instanceGroup', 'properties': { 'namedPorts': [ { 'name': 'ignition', 'port': 22623 }, { 'name': 'https', 'port': 6443 } ], 'network': context.properties['cluster_network'], 'zone': zone } }) return {'resources': resources}
외부 클러스터를 생성할 때 02_lb_ext.py
템플릿 외에도 이 템플릿이 필요합니다.
7.12.11. GCP에서 프라이빗 DNS 영역 생성
OpenShift Container Platform 클러스터가 사용할 프라이빗 DNS 영역을 GCP(Google Cloud Platform)에 구성해야 합니다. 이 구성 요소를 생성하는 한 가지 방법은 제공된 Deployment Manager 템플릿을 수정하는 것입니다.
GCP 인프라를 생성하는 데 제공된 Deployment Manager 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.
사전 요구 사항
- GCP 계정을 구성하십시오.
- 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
- GCP에서 VPC 및 관련 서브넷을 생성하고 구성하십시오.
프로세스
-
이 항목의 프라이빗 DNS에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에
02_dns.py
로 저장합니다. 이 템플릿에서 클러스터에 필요한 프라이빗 DNS 개체를 설명합니다. 02_dns.yaml
리소스 정의 파일을 생성합니다.$ cat <<EOF >02_dns.yaml imports: - path: 02_dns.py resources: - name: cluster-dns type: 02_dns.py properties: infra_id: '${INFRA_ID}' 1 cluster_domain: '${CLUSTER_NAME}.${BASE_DOMAIN}' 2 cluster_network: '${CLUSTER_NETWORK}' 3 EOF
gcloud
CLI를 사용하여 배포를 생성합니다.$ gcloud deployment-manager deployments create ${INFRA_ID}-dns --config 02_dns.yaml
Deployment Manager의 제한으로 인해 템플릿을 통해 DNS 항목이 생성되지 않으므로 수동으로 생성해야 합니다.
내부 DNS 항목을 추가합니다.
$ if [ -f transaction.yaml ]; then rm transaction.yaml; fi $ gcloud dns record-sets transaction start --zone ${INFRA_ID}-private-zone $ gcloud dns record-sets transaction add ${CLUSTER_IP} --name api.${CLUSTER_NAME}.${BASE_DOMAIN}. --ttl 60 --type A --zone ${INFRA_ID}-private-zone $ gcloud dns record-sets transaction add ${CLUSTER_IP} --name api-int.${CLUSTER_NAME}.${BASE_DOMAIN}. --ttl 60 --type A --zone ${INFRA_ID}-private-zone $ gcloud dns record-sets transaction execute --zone ${INFRA_ID}-private-zone
외부 클러스터의 경우 외부 DNS 항목도 추가합니다.
$ if [ -f transaction.yaml ]; then rm transaction.yaml; fi $ gcloud dns record-sets transaction start --zone ${BASE_DOMAIN_ZONE_NAME} $ gcloud dns record-sets transaction add ${CLUSTER_PUBLIC_IP} --name api.${CLUSTER_NAME}.${BASE_DOMAIN}. --ttl 60 --type A --zone ${BASE_DOMAIN_ZONE_NAME} $ gcloud dns record-sets transaction execute --zone ${BASE_DOMAIN_ZONE_NAME}
7.12.11.1. 프라이빗 DNS에 대한 Deployment Manager 템플릿
다음 Deployment Manager 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 프라이빗 DNS를 배포할 수 있습니다.
예 7.22. 02_dns.py
Deployment Manager 템플릿
def GenerateConfig(context): resources = [{ 'name': context.properties['infra_id'] + '-private-zone', 'type': 'dns.v1.managedZone', 'properties': { 'description': '', 'dnsName': context.properties['cluster_domain'] + '.', 'visibility': 'private', 'privateVisibilityConfig': { 'networks': [{ 'networkUrl': context.properties['cluster_network'] }] } } }] return {'resources': resources}
7.12.12. GCP에서 방화벽 규칙 생성
OpenShift Container Platform 클러스터에서 사용할 방화벽 규칙을 GCP(Google Cloud Platform)에서 생성해야 합니다. 이러한 구성 요소를 생성하는 한 가지 방법은 제공된 Deployment Manager 템플릿을 수정하는 것입니다.
GCP 인프라를 생성하는 데 제공된 Deployment Manager 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.
사전 요구 사항
- GCP 계정을 구성하십시오.
- 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
- GCP에서 VPC 및 관련 서브넷을 생성하고 구성하십시오.
프로세스
-
이 항목의 방화벽 규칙에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에
03_firewall.py
로 저장합니다. 이 템플릿에서 클러스터에 필요한 보안 그룹을 설명합니다. 03_firewall.yaml
리소스 정의 파일을 생성합니다.$ cat <<EOF >03_firewall.yaml imports: - path: 03_firewall.py resources: - name: cluster-firewall type: 03_firewall.py properties: allowed_external_cidr: '0.0.0.0/0' 1 infra_id: '${INFRA_ID}' 2 cluster_network: '${CLUSTER_NETWORK}' 3 network_cidr: '${NETWORK_CIDR}' 4 EOF
gcloud
CLI를 사용하여 배포를 생성합니다.$ gcloud deployment-manager deployments create ${INFRA_ID}-firewall --config 03_firewall.yaml
7.12.12.1. 방화벽 규칙에 대한 Deployment Manager 템플릿
다음 Deployment Manager 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 방화벽 규칙을 배포할 수 있습니다.
예 7.23. 03_firewall.py
Deployment Manager 템플릿
def GenerateConfig(context): resources = [{ 'name': context.properties['infra_id'] + '-bootstrap-in-ssh', 'type': 'compute.v1.firewall', 'properties': { 'network': context.properties['cluster_network'], 'allowed': [{ 'IPProtocol': 'tcp', 'ports': ['22'] }], 'sourceRanges': [context.properties['allowed_external_cidr']], 'targetTags': [context.properties['infra_id'] + '-bootstrap'] } }, { 'name': context.properties['infra_id'] + '-api', 'type': 'compute.v1.firewall', 'properties': { 'network': context.properties['cluster_network'], 'allowed': [{ 'IPProtocol': 'tcp', 'ports': ['6443'] }], 'sourceRanges': [context.properties['allowed_external_cidr']], 'targetTags': [context.properties['infra_id'] + '-master'] } }, { 'name': context.properties['infra_id'] + '-health-checks', 'type': 'compute.v1.firewall', 'properties': { 'network': context.properties['cluster_network'], 'allowed': [{ 'IPProtocol': 'tcp', 'ports': ['6080', '6443', '22624'] }], 'sourceRanges': ['35.191.0.0/16', '130.211.0.0/22', '209.85.152.0/22', '209.85.204.0/22'], 'targetTags': [context.properties['infra_id'] + '-master'] } }, { 'name': context.properties['infra_id'] + '-etcd', 'type': 'compute.v1.firewall', 'properties': { 'network': context.properties['cluster_network'], 'allowed': [{ 'IPProtocol': 'tcp', 'ports': ['2379-2380'] }], 'sourceTags': [context.properties['infra_id'] + '-master'], 'targetTags': [context.properties['infra_id'] + '-master'] } }, { 'name': context.properties['infra_id'] + '-control-plane', 'type': 'compute.v1.firewall', 'properties': { 'network': context.properties['cluster_network'], 'allowed': [{ 'IPProtocol': 'tcp', 'ports': ['10257'] },{ 'IPProtocol': 'tcp', 'ports': ['10259'] },{ 'IPProtocol': 'tcp', 'ports': ['22623'] }], 'sourceTags': [ context.properties['infra_id'] + '-master', context.properties['infra_id'] + '-worker' ], 'targetTags': [context.properties['infra_id'] + '-master'] } }, { 'name': context.properties['infra_id'] + '-internal-network', 'type': 'compute.v1.firewall', 'properties': { 'network': context.properties['cluster_network'], 'allowed': [{ 'IPProtocol': 'icmp' },{ 'IPProtocol': 'tcp', 'ports': ['22'] }], 'sourceRanges': [context.properties['network_cidr']], 'targetTags': [ context.properties['infra_id'] + '-master', context.properties['infra_id'] + '-worker' ] } }, { 'name': context.properties['infra_id'] + '-internal-cluster', 'type': 'compute.v1.firewall', 'properties': { 'network': context.properties['cluster_network'], 'allowed': [{ 'IPProtocol': 'udp', 'ports': ['4789', '6081'] },{ 'IPProtocol': 'udp', 'ports': ['500', '4500'] },{ 'IPProtocol': 'esp', },{ 'IPProtocol': 'tcp', 'ports': ['9000-9999'] },{ 'IPProtocol': 'udp', 'ports': ['9000-9999'] },{ 'IPProtocol': 'tcp', 'ports': ['10250'] },{ 'IPProtocol': 'tcp', 'ports': ['30000-32767'] },{ 'IPProtocol': 'udp', 'ports': ['30000-32767'] }], 'sourceTags': [ context.properties['infra_id'] + '-master', context.properties['infra_id'] + '-worker' ], 'targetTags': [ context.properties['infra_id'] + '-master', context.properties['infra_id'] + '-worker' ] } }] return {'resources': resources}
7.12.14. GCP 인프라용 RHCOS 클러스터 이미지 생성
OpenShift Container Platform 노드에 유효한 GCP(Google Cloud Platform)용 RHCOS(Red Hat Enterprise Linux CoreOS) 이미지를 사용해야 합니다.
프로세스
RHCOS 이미지 미러 페이지에서 RHCOS 이미지를 가져옵니다.
중요RHCOS 이미지는 OpenShift Container Platform 릴리스에 따라 변경되지 않을 수 있습니다. 설치하는 OpenShift Container Platform 버전과 같거나 그 이하의 버전 중 가장 최신 버전의 이미지를 다운로드해야 합니다. 지원되는 경우 OpenShift Container Platform 버전과 일치하는 이미지 버전을 사용합니다.
rhcos-<version>-<arch>-gcp.<arch>.tar.gz
형식의 OpenShift Container Platform 버전 번호가 파일 이름에 포함되어 있습니다.Google 스토리지 버킷을 생성합니다.
$ gsutil mb gs://<bucket_name>
RHCOS 이미지를 Google 스토리지 버킷에 업로드합니다.
$ gsutil cp <downloaded_image_file_path>/rhcos-<version>-x86_64-gcp.x86_64.tar.gz gs://<bucket_name>
업로드된 RHCOS 이미지 위치를 변수로 내보냅니다.
$ export IMAGE_SOURCE=gs://<bucket_name>/rhcos-<version>-x86_64-gcp.x86_64.tar.gz
클러스터 이미지를 생성합니다.
$ gcloud compute images create "${INFRA_ID}-rhcos-image" \ --source-uri="${IMAGE_SOURCE}"
7.12.15. GCP에서 부트스트랩 시스템 생성
OpenShift Container Platform 클러스터 초기화 과정에서 사용할 부트스트랩 시스템을 GCP(Google Cloud Platform)에 생성해야 합니다. 이 시스템을 생성하는 한 가지 방법은 제공된 Deployment Manager 템플릿을 수정하는 것입니다.
부트스트랩 시스템을 생성하는 데 제공된 Deployment Manager 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.
사전 요구 사항
- GCP 계정을 구성하십시오.
- 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
- GCP에서 VPC 및 관련 서브넷을 생성하고 구성하십시오.
- GCP에서 네트워킹 및 로드 밸랜서를 생성하고 구성하십시오.
- 컨트롤 플레인 및 컴퓨팅 역할을 생성합니다.
- pyOpenSSL이 설치되어 있는지 확인하십시오.
프로세스
-
이 항목의 부트스트랩 시스템에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에
04_bootstrap.py
로 저장합니다. 이 템플릿은 클러스터에 필요한 부트스트랩 시스템을 설명합니다. 설치 프로그램에 필요한 RHCOS(Red Hat Enterprise Linux CoreOS) 이미지의 위치를 내보냅니다.
$ export CLUSTER_IMAGE=(`gcloud compute images describe ${INFRA_ID}-rhcos-image --format json | jq -r .selfLink`)
버킷을 생성하고
bootstrap.ign
파일을 업로드합니다.$ gsutil mb gs://${INFRA_ID}-bootstrap-ignition $ gsutil cp <installation_directory>/bootstrap.ign gs://${INFRA_ID}-bootstrap-ignition/
Ignition 구성 파일에 액세스하는 데 사용할 부트스트랩 인스턴스에 대한 서명된 URL을 생성합니다. 출력에서 URL을 변수로 내보냅니다.
$ export BOOTSTRAP_IGN=`gsutil signurl -d 1h service-account-key.json gs://${INFRA_ID}-bootstrap-ignition/bootstrap.ign | grep "^gs:" | awk '{print $5}'`
04_bootstrap.yaml
리소스 정의 파일을 생성합니다.$ cat <<EOF >04_bootstrap.yaml imports: - path: 04_bootstrap.py resources: - name: cluster-bootstrap type: 04_bootstrap.py properties: infra_id: '${INFRA_ID}' 1 region: '${REGION}' 2 zone: '${ZONE_0}' 3 cluster_network: '${CLUSTER_NETWORK}' 4 control_subnet: '${CONTROL_SUBNET}' 5 image: '${CLUSTER_IMAGE}' 6 machine_type: 'n1-standard-4' 7 root_volume_size: '128' 8 bootstrap_ign: '${BOOTSTRAP_IGN}' 9 EOF
- 1
infra_id
는 추출 단계에서 가져온INFRA_ID
인프라 이름입니다.- 2
region
은 클러스터를 배포할 영역입니다(예:us-central1)
.- 3
zone
은 부트스트랩 인스턴스를 배포할 영역입니다(예:us-central1-b)
.- 4
cluster_network
는 클러스터 네트워크에 대한selfLink
URL입니다.- 5
control_subnet
은 컨트롤 서브넷에 대한selfLink
URL입니다.- 6
image
는 RHCOS 이미지에 대한selfLink
URL입니다.- 7
machine_type
은 인스턴스의 시스템 유형입니다(예:n1-standard-4)
.- 8
root_volume_size
는 부트스트랩 시스템의 부팅 디스크 크기입니다.- 9
bootstrap_ign
은 서명된 URL을 생성할 때 출력되는 URL입니다.
gcloud
CLI를 사용하여 배포를 생성합니다.$ gcloud deployment-manager deployments create ${INFRA_ID}-bootstrap --config 04_bootstrap.yaml
Deployment Manager의 제한으로 인해 템플릿을 통해 로드 밸랜서 멤버십이 관리되지 않으므로 수동으로 부트스트랩 시스템을 추가해야 합니다.
내부 로드 밸런서 인스턴스 그룹에 부트스트랩 인스턴스를 추가합니다.
$ gcloud compute instance-groups unmanaged add-instances \ ${INFRA_ID}-bootstrap-instance-group --zone=${ZONE_0} --instances=${INFRA_ID}-bootstrap
내부 로드 밸런서 백엔드 서비스에 부트스트랩 인스턴스 그룹을 추가합니다.
$ gcloud compute backend-services add-backend \ ${INFRA_ID}-api-internal-backend-service --region=${REGION} --instance-group=${INFRA_ID}-bootstrap-instance-group --instance-group-zone=${ZONE_0}
7.12.15.1. 부트스트랩 시스템에 대한 Deployment Manager 템플릿
다음 Deployment Mananger 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 부트스트랩 시스템을 배포할 수 있습니다.
예 7.25. 04_bootstrap.py
Deployment Manager 템플릿
def GenerateConfig(context): resources = [{ 'name': context.properties['infra_id'] + '-bootstrap-public-ip', 'type': 'compute.v1.address', 'properties': { 'region': context.properties['region'] } }, { 'name': context.properties['infra_id'] + '-bootstrap', 'type': 'compute.v1.instance', 'properties': { 'disks': [{ 'autoDelete': True, 'boot': True, 'initializeParams': { 'diskSizeGb': context.properties['root_volume_size'], 'sourceImage': context.properties['image'] } }], 'machineType': 'zones/' + context.properties['zone'] + '/machineTypes/' + context.properties['machine_type'], 'metadata': { 'items': [{ 'key': 'user-data', 'value': '{"ignition":{"config":{"replace":{"source":"' + context.properties['bootstrap_ign'] + '"}},"version":"3.1.0"}}', }] }, 'networkInterfaces': [{ 'subnetwork': context.properties['control_subnet'], 'accessConfigs': [{ 'natIP': '$(ref.' + context.properties['infra_id'] + '-bootstrap-public-ip.address)' }] }], 'tags': { 'items': [ context.properties['infra_id'] + '-master', context.properties['infra_id'] + '-bootstrap' ] }, 'zone': context.properties['zone'] } }, { 'name': context.properties['infra_id'] + '-bootstrap-instance-group', 'type': 'compute.v1.instanceGroup', 'properties': { 'namedPorts': [ { 'name': 'ignition', 'port': 22623 }, { 'name': 'https', 'port': 6443 } ], 'network': context.properties['cluster_network'], 'zone': context.properties['zone'] } }] return {'resources': resources}
7.12.16. GCP에 컨트롤 플레인 시스템 생성
클러스터에서 사용할 컨트롤 플레인 시스템을 GCP(Google Cloud Platform)에 생성해야 합니다. 이러한 시스템을 생성하는 한 가지 방법은 제공된 Deployment Manager 템플릿을 수정하는 것입니다.
컨트롤 플레인 시스템을 생성하는 데 제공된 Deployment Manager 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.
사전 요구 사항
- GCP 계정을 구성하십시오.
- 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
- GCP에서 VPC 및 관련 서브넷을 생성하고 구성하십시오.
- GCP에서 네트워킹 및 로드 밸랜서를 생성하고 구성하십시오.
- 컨트롤 플레인 및 컴퓨팅 역할을 생성합니다.
- 부트스트랩 시스템을 생성합니다.
프로세스
-
이 항목의 컨트롤 플레인 시스템에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에
05_control_plane.py
로 저장합니다. 이 템플릿은 클러스터에 필요한 컨트롤 플레인 시스템을 설명합니다. 리소스 정의에 필요한 다음 변수를 내보냅니다.
$ export MASTER_IGNITION=`cat <installation_directory>/master.ign`
05_control_plane.yaml
리소스 정의 파일을 생성합니다.$ cat <<EOF >05_control_plane.yaml imports: - path: 05_control_plane.py resources: - name: cluster-control-plane type: 05_control_plane.py properties: infra_id: '${INFRA_ID}' 1 zones: 2 - '${ZONE_0}' - '${ZONE_1}' - '${ZONE_2}' control_subnet: '${CONTROL_SUBNET}' 3 image: '${CLUSTER_IMAGE}' 4 machine_type: 'n1-standard-4' 5 root_volume_size: '128' service_account_email: '${MASTER_SERVICE_ACCOUNT}' 6 ignition: '${MASTER_IGNITION}' 7 EOF
- 1
infra_id
는 추출 단계에서 가져온INFRA_ID
인프라 이름입니다.- 2
zones
은 컨트롤 플레인 인스턴스를 배포할 영역입니다(예:us-central1-a
,us-central1-b
,us-central1-c)
.- 3
control_subnet
은 컨트롤 서브넷에 대한selfLink
URL입니다.- 4
image
는 RHCOS 이미지에 대한selfLink
URL입니다.- 5
machine_type
은 인스턴스의 시스템 유형입니다(예:n1-standard-4)
.- 6
service_account_email
은 사용자가 생성한 마스터 서비스 계정의 이메일 주소입니다.- 7
ignition
은master.ign
파일의 내용입니다.
gcloud
CLI를 사용하여 배포를 생성합니다.$ gcloud deployment-manager deployments create ${INFRA_ID}-control-plane --config 05_control_plane.yaml
Deployment Manager의 제한으로 인해 템플릿을 통해 로드 밸랜서 멤버십이 관리되지 않으므로 수동으로 컨트롤 플레인 시스템을 추가해야 합니다.
다음 명령을 실행하여 적절한 인스턴스 그룹에 컨트롤 플레인 머신을 추가합니다.
$ gcloud compute instance-groups unmanaged add-instances ${INFRA_ID}-master-${ZONE_0}-instance-group --zone=${ZONE_0} --instances=${INFRA_ID}-master-0 $ gcloud compute instance-groups unmanaged add-instances ${INFRA_ID}-master-${ZONE_1}-instance-group --zone=${ZONE_1} --instances=${INFRA_ID}-master-1 $ gcloud compute instance-groups unmanaged add-instances ${INFRA_ID}-master-${ZONE_2}-instance-group --zone=${ZONE_2} --instances=${INFRA_ID}-master-2
외부 클러스터의 경우 다음 명령을 실행하여 대상 풀에 컨트롤 플레인 머신을 추가해야 합니다.
$ gcloud compute target-pools add-instances ${INFRA_ID}-api-target-pool --instances-zone="${ZONE_0}" --instances=${INFRA_ID}-master-0 $ gcloud compute target-pools add-instances ${INFRA_ID}-api-target-pool --instances-zone="${ZONE_1}" --instances=${INFRA_ID}-master-1 $ gcloud compute target-pools add-instances ${INFRA_ID}-api-target-pool --instances-zone="${ZONE_2}" --instances=${INFRA_ID}-master-2
7.12.16.1. 컨트롤 플레인 시스템에 대한 Deployment Manager 템플릿
다음 Deployment Mananger 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 컨트롤 플레인 시스템을 배포할 수 있습니다.
예 7.26. 05_control_plane.py
Deployment Manager 템플릿
def GenerateConfig(context): resources = [{ 'name': context.properties['infra_id'] + '-master-0', 'type': 'compute.v1.instance', 'properties': { 'disks': [{ 'autoDelete': True, 'boot': True, 'initializeParams': { 'diskSizeGb': context.properties['root_volume_size'], 'diskType': 'zones/' + context.properties['zones'][0] + '/diskTypes/pd-ssd', 'sourceImage': context.properties['image'] } }], 'machineType': 'zones/' + context.properties['zones'][0] + '/machineTypes/' + context.properties['machine_type'], 'metadata': { 'items': [{ 'key': 'user-data', 'value': context.properties['ignition'] }] }, 'networkInterfaces': [{ 'subnetwork': context.properties['control_subnet'] }], 'serviceAccounts': [{ 'email': context.properties['service_account_email'], 'scopes': ['https://www.googleapis.com/auth/cloud-platform'] }], 'tags': { 'items': [ context.properties['infra_id'] + '-master', ] }, 'zone': context.properties['zones'][0] } }, { 'name': context.properties['infra_id'] + '-master-1', 'type': 'compute.v1.instance', 'properties': { 'disks': [{ 'autoDelete': True, 'boot': True, 'initializeParams': { 'diskSizeGb': context.properties['root_volume_size'], 'diskType': 'zones/' + context.properties['zones'][1] + '/diskTypes/pd-ssd', 'sourceImage': context.properties['image'] } }], 'machineType': 'zones/' + context.properties['zones'][1] + '/machineTypes/' + context.properties['machine_type'], 'metadata': { 'items': [{ 'key': 'user-data', 'value': context.properties['ignition'] }] }, 'networkInterfaces': [{ 'subnetwork': context.properties['control_subnet'] }], 'serviceAccounts': [{ 'email': context.properties['service_account_email'], 'scopes': ['https://www.googleapis.com/auth/cloud-platform'] }], 'tags': { 'items': [ context.properties['infra_id'] + '-master', ] }, 'zone': context.properties['zones'][1] } }, { 'name': context.properties['infra_id'] + '-master-2', 'type': 'compute.v1.instance', 'properties': { 'disks': [{ 'autoDelete': True, 'boot': True, 'initializeParams': { 'diskSizeGb': context.properties['root_volume_size'], 'diskType': 'zones/' + context.properties['zones'][2] + '/diskTypes/pd-ssd', 'sourceImage': context.properties['image'] } }], 'machineType': 'zones/' + context.properties['zones'][2] + '/machineTypes/' + context.properties['machine_type'], 'metadata': { 'items': [{ 'key': 'user-data', 'value': context.properties['ignition'] }] }, 'networkInterfaces': [{ 'subnetwork': context.properties['control_subnet'] }], 'serviceAccounts': [{ 'email': context.properties['service_account_email'], 'scopes': ['https://www.googleapis.com/auth/cloud-platform'] }], 'tags': { 'items': [ context.properties['infra_id'] + '-master', ] }, 'zone': context.properties['zones'][2] } }] return {'resources': resources}
7.12.17. 부트스트랩이 완료되길 기다렸다가 GCP에서 부트스트랩 리소스를 제거합니다.
GCP(Google Cloud Platform)에 필요한 인프라를 모두 생성한 후 설치 프로그램에 의해 생성된 Ignition 구성 파일을 사용하여 프로비저닝한 시스템에서 부트스트랩 프로세스가 완료될 때까지 기다립니다.
사전 요구 사항
- GCP 계정을 구성하십시오.
- 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
- GCP에서 VPC 및 관련 서브넷을 생성하고 구성하십시오.
- GCP에서 네트워킹 및 로드 밸랜서를 생성하고 구성하십시오.
- 컨트롤 플레인 및 컴퓨팅 역할을 생성합니다.
- 부트스트랩 시스템을 생성합니다.
- 컨트롤 플레인 시스템을 생성합니다.
프로세스
설치 프로그램이 포함된 디렉터리로 변경하고 다음 명령을 실행합니다.
$ ./openshift-install wait-for bootstrap-complete --dir <installation_directory> \ 1 --log-level info 2
FATAL
경고 없이 명령이 종료되면 프로덕션 컨트롤 플레인이 초기화된 것입니다.부트스트랩 리소스를 삭제합니다.
$ gcloud compute backend-services remove-backend ${INFRA_ID}-api-internal-backend-service --region=${REGION} --instance-group=${INFRA_ID}-bootstrap-instance-group --instance-group-zone=${ZONE_0} $ gsutil rm gs://${INFRA_ID}-bootstrap-ignition/bootstrap.ign $ gsutil rb gs://${INFRA_ID}-bootstrap-ignition $ gcloud deployment-manager deployments delete ${INFRA_ID}-bootstrap
7.12.18. GCP에 추가 작업자 시스템 생성
개별 인스턴스를 따로 시작하거나 자동 확장 그룹과 같은 클러스터 외부의 자동화된 프로세스를 통해 클러스터에서 사용할 작업자 시스템을 GCP(Google Cloud Platform)에 생성할 수 있습니다. OpenShift Container Platform의 기본 제공 클러스터 확장 메커니즘과 시스템 API를 활용할 수도 있습니다.
예에서는 Deployment Manager 템플릿을 사용하여 인스턴스 하나를 수동으로 시작합니다. 파일에 06_worker.py
유형의 추가 리소스를 포함시켜 추가 인스턴스를 시작할 수 있습니다.
작업자 시스템을 생성하는 데 제공된 Deployment Manager 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.
사전 요구 사항
- GCP 계정을 구성하십시오.
- 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
- GCP에서 VPC 및 관련 서브넷을 생성하고 구성하십시오.
- GCP에서 네트워킹 및 로드 밸랜서를 생성하고 구성하십시오.
- 컨트롤 플레인 및 컴퓨팅 역할을 생성합니다.
- 부트스트랩 시스템을 생성합니다.
- 컨트롤 플레인 시스템을 생성합니다.
프로세스
-
이 항목의 작업자 시스템에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에
06_worker.py
로 저장합니다. 이 템플릿에서 클러스터에 필요한 작업자 시스템을 설명합니다. 리소스 정의가 사용하는 변수를 내보냅니다.
컴퓨팅 시스템을 호스팅하는 서브넷을 내보냅니다.
$ export COMPUTE_SUBNET=(`gcloud compute networks subnets describe ${INFRA_ID}-worker-subnet --region=${REGION} --format json | jq -r .selfLink`)
서비스 계정의 이메일 주소를 내보냅니다.
$ export WORKER_SERVICE_ACCOUNT=(`gcloud iam service-accounts list --filter "email~^${INFRA_ID}-w@${PROJECT_NAME}." --format json | jq -r '.[0].email'`)
컴퓨팅 시스템 Ignition 구성 파일의 위치를 내보냅니다.
$ export WORKER_IGNITION=`cat <installation_directory>/worker.ign`
06_worker.yaml
리소스 정의 파일을 생성합니다.$ cat <<EOF >06_worker.yaml imports: - path: 06_worker.py resources: - name: 'worker-0' 1 type: 06_worker.py properties: infra_id: '${INFRA_ID}' 2 zone: '${ZONE_0}' 3 compute_subnet: '${COMPUTE_SUBNET}' 4 image: '${CLUSTER_IMAGE}' 5 machine_type: 'n1-standard-4' 6 root_volume_size: '128' service_account_email: '${WORKER_SERVICE_ACCOUNT}' 7 ignition: '${WORKER_IGNITION}' 8 - name: 'worker-1' type: 06_worker.py properties: infra_id: '${INFRA_ID}' 9 zone: '${ZONE_1}' 10 compute_subnet: '${COMPUTE_SUBNET}' 11 image: '${CLUSTER_IMAGE}' 12 machine_type: 'n1-standard-4' 13 root_volume_size: '128' service_account_email: '${WORKER_SERVICE_ACCOUNT}' 14 ignition: '${WORKER_IGNITION}' 15 EOF
- 1
name
은 작업자 머신의 이름입니다(예:worker-0)
.- 2 9
infra_id
는 추출 단계에서 가져온INFRA_ID
인프라 이름입니다.- 3 10
zone
은 작업자 시스템을 배포할 영역입니다(예:us-central1-a)
.- 4 11
compute_subnet
은 컴퓨팅 서브넷에 대한selfLink
URL입니다.- 5 12
image
는 RHCOS 이미지에 대한selfLink
URL입니다. 1- 6 13
machine_type
은 인스턴스의 시스템 유형입니다(예:n1-standard-4)
.- 7 14
service_account_email
은 사용자가 생성한 작업자 서비스 계정의 이메일 주소입니다.- 8 15
ignition
은worker.ign
파일의 내용입니다.
-
선택사항: 추가 인스턴스를 시작하려면
06_worker.yaml
리소스 정의 파일에06_worker.py
형식의 추가 리소스를 포함시키십시오. gcloud
CLI를 사용하여 배포를 생성합니다.$ gcloud deployment-manager deployments create ${INFRA_ID}-worker --config 06_worker.yaml
GCP Marketplace 이미지를 사용하려면 사용할 오퍼를 지정합니다.
-
OpenShift Container Platform:
https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-ocp-48-x86-64-202210040145
-
OpenShift Platform Plus:
https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-opp-48-x86-64-202206140145
-
OpenShift Kubernetes Engine:
https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-oke-48-x86-64-202206140145
-
OpenShift Container Platform:
7.12.18.1. 작업자 시스템에 대한 Deployment Manager 템플릿
다음 Deloyment Manager 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 작업자 시스템을 배포할 수 있습니다.
예 7.27. 06_worker.py
Deployment Manager 템플릿
def GenerateConfig(context): resources = [{ 'name': context.properties['infra_id'] + '-' + context.env['name'], 'type': 'compute.v1.instance', 'properties': { 'disks': [{ 'autoDelete': True, 'boot': True, 'initializeParams': { 'diskSizeGb': context.properties['root_volume_size'], 'sourceImage': context.properties['image'] } }], 'machineType': 'zones/' + context.properties['zone'] + '/machineTypes/' + context.properties['machine_type'], 'metadata': { 'items': [{ 'key': 'user-data', 'value': context.properties['ignition'] }] }, 'networkInterfaces': [{ 'subnetwork': context.properties['compute_subnet'] }], 'serviceAccounts': [{ 'email': context.properties['service_account_email'], 'scopes': ['https://www.googleapis.com/auth/cloud-platform'] }], 'tags': { 'items': [ context.properties['infra_id'] + '-worker', ] }, 'zone': context.properties['zone'] } }] return {'resources': resources}
7.12.19. CLI를 사용하여 클러스터에 로그인
클러스터 kubeconfig
파일을 내보내서 기본 시스템 사용자로 클러스터에 로그인할 수 있습니다. kubeconfig
파일에는 CLI에서 올바른 클러스터 및 API 서버에 클라이언트를 연결하는 데 사용하는 클러스터에 대한 정보가 포함되어 있습니다. 이 파일은 클러스터별로 고유하며 OpenShift Container Platform 설치 과정에서 생성됩니다.
사전 요구 사항
- OpenShift Container Platform 클러스터를 배포했습니다.
-
oc
CLI를 설치했습니다.
프로세스
kubeadmin
인증 정보를 내보냅니다.$ export KUBECONFIG=<installation_directory>/auth/kubeconfig 1
- 1
<installation_directory>
는 설치 파일을 저장한 디렉터리의 경로를 지정합니다.
내보낸 구성을 사용하여
oc
명령을 성공적으로 실행할 수 있는지 확인합니다.$ oc whoami
출력 예
system:admin
7.12.20. 기본 OperatorHub 소스 비활성화
Red Hat 및 커뮤니티 프로젝트에서 제공하는 콘텐츠를 소싱하는 Operator 카탈로그는 OpenShift Container Platform을 설치하는 동안 기본적으로 OperatorHub용으로 구성됩니다. 제한된 네트워크 환경에서는 클러스터 관리자로서 기본 카탈로그를 비활성화해야 합니다.
프로세스
OperatorHub
오브젝트에disableAllDefaultSources: true
를 추가하여 기본 카탈로그의 소스를 비활성화합니다.$ oc patch OperatorHub cluster --type json \ -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'
또는 웹 콘솔을 사용하여 카탈로그 소스를 관리할 수 있습니다. 관리
7.12.21. 머신의 인증서 서명 요청 승인
클러스터에 시스템을 추가하면 추가한 시스템별로 보류 중인 인증서 서명 요청(CSR)이 두 개씩 생성됩니다. 이러한 CSR이 승인되었는지 확인해야 하며, 필요한 경우 이를 직접 승인해야 합니다. 클라이언트 요청을 먼저 승인한 다음 서버 요청을 승인해야 합니다.
사전 요구 사항
- 클러스터에 시스템을 추가했습니다.
프로세스
클러스터가 시스템을 인식하는지 확인합니다.
$ oc get nodes
출력 예
NAME STATUS ROLES AGE VERSION master-0 Ready master 63m v1.22.1 master-1 Ready master 63m v1.22.1 master-2 Ready master 64m v1.22.1
출력에 생성된 모든 시스템이 나열됩니다.
참고이전 출력에는 일부 CSR이 승인될 때까지 컴퓨팅 노드(작업자 노드라고도 함)가 포함되지 않을 수 있습니다.
보류 중인 CSR을 검토하고 클러스터에 추가한 각 시스템에 대해
Pending
또는Approved
상태의 클라이언트 및 서버 요청이 표시되는지 확인합니다.$ oc get csr
출력 예
NAME AGE REQUESTOR CONDITION csr-8b2br 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending csr-8vnps 15m system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending ...
예에서는 두 시스템이 클러스터에 참여하고 있습니다. 목록에는 승인된 CSR이 더 많이 나타날 수도 있습니다.
CSR이 승인되지 않은 경우, 추가된 시스템에 대한 모든 보류 중인 CSR이
Pending
상태로 전환된 후 클러스터 시스템의 CSR을 승인합니다.참고CSR은 교체 주기가 자동으로 만료되므로 클러스터에 시스템을 추가한 후 1시간 이내에 CSR을 승인하십시오. 한 시간 내에 승인하지 않으면 인증서가 교체되고 각 노드에 대해 두 개 이상의 인증서가 표시됩니다. 이러한 인증서를 모두 승인해야 합니다. 클라이언트 CSR이 승인되면 Kubelet은 인증서에 대한 보조 CSR을 생성하므로 수동 승인이 필요합니다. 그러면 Kubelet에서 동일한 매개변수를 사용하여 새 인증서를 요청하는 경우 인증서 갱신 요청은
machine-approver
에 의해 자동으로 승인됩니다.참고베어 메탈 및 기타 사용자 프로비저닝 인프라와 같이 머신 API를 사용하도록 활성화되지 않는 플랫폼에서 실행되는 클러스터의 경우 CSR(Kubelet service Certificate Request)을 자동으로 승인하는 방법을 구현해야 합니다. 요청이 승인되지 않으면 API 서버가 kubelet에 연결될 때 서비스 인증서가 필요하므로
oc exec
,oc rsh
,oc logs
명령을 성공적으로 수행할 수 없습니다. Kubelet 엔드 포인트에 연결하는 모든 작업을 수행하려면 이 인증서 승인이 필요합니다. 이 방법은 새 CSR을 감시하고 CSR이system:node
또는system:admin
그룹의node-bootstrapper
서비스 계정에 의해 제출되었는지 확인하고 노드의 ID를 확인합니다.개별적으로 승인하려면 유효한 CSR 각각에 대해 다음 명령을 실행하십시오.
$ oc adm certificate approve <csr_name> 1
- 1
<csr_name>
은 현재 CSR 목록에 있는 CSR의 이름입니다.
보류 중인 CSR을 모두 승인하려면 다음 명령을 실행하십시오.
$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs --no-run-if-empty oc adm certificate approve
참고일부 Operator는 일부 CSR이 승인될 때까지 사용할 수 없습니다.
이제 클라이언트 요청이 승인되었으므로 클러스터에 추가한 각 머신의 서버 요청을 검토해야 합니다.
$ oc get csr
출력 예
NAME AGE REQUESTOR CONDITION csr-bfd72 5m26s system:node:ip-10-0-50-126.us-east-2.compute.internal Pending csr-c57lv 5m26s system:node:ip-10-0-95-157.us-east-2.compute.internal Pending ...
나머지 CSR이 승인되지 않고
Pending
상태인 경우 클러스터 머신의 CSR을 승인합니다.개별적으로 승인하려면 유효한 CSR 각각에 대해 다음 명령을 실행하십시오.
$ oc adm certificate approve <csr_name> 1
- 1
<csr_name>
은 현재 CSR 목록에 있는 CSR의 이름입니다.
보류 중인 CSR을 모두 승인하려면 다음 명령을 실행하십시오.
$ oc get csr -o go-template='{{range .items}}{{if not .status}}{{.metadata.name}}{{"\n"}}{{end}}{{end}}' | xargs oc adm certificate approve
모든 클라이언트 및 서버 CSR이 승인된 후 머신은
Ready
상태가 됩니다. 다음 명령을 실행하여 확인합니다.$ oc get nodes
출력 예
NAME STATUS ROLES AGE VERSION master-0 Ready master 73m v1.22.1 master-1 Ready master 73m v1.22.1 master-2 Ready master 74m v1.22.1 worker-0 Ready worker 11m v1.22.1 worker-1 Ready worker 11m v1.22.1
참고머신이
Ready
상태로 전환하는 데 서버 CSR의 승인 후 몇 분이 걸릴 수 있습니다.
추가 정보
- CSR에 대한 자세한 내용은 인증서 서명 요청을 참조하십시오.
7.12.22. 선택사항 : 인그레스 DNS 레코드 추가
Kubernetes 매니페스트를 생성하고 Ignition 구성을 생성할 때 DNS 영역 구성을 제거한 경우, 인그레스 로드 밸런서를 가리키는 DNS 레코드를 수동으로 생성해야 합니다. 와일드카드 *.apps.{baseDomain}.
또는 특정 레코드를 생성할 수 있습니다. 사용자 요구사항에 따라 A, CNAME 및 기타 레코드를 사용할 수 있습니다.
사전 요구 사항
- GCP 계정을 구성하십시오.
- Kubernetes 매니페스트를 생성하고 Ignition 구성을 생성할 때 DNS 영역 구성을 제거하십시오.
- GCP에서 VPC 및 관련 서브넷을 생성하고 구성하십시오.
- GCP에서 네트워킹 및 로드 밸랜서를 생성하고 구성하십시오.
- 컨트롤 플레인 및 컴퓨팅 역할을 생성합니다.
- 부트스트랩 시스템을 생성합니다.
- 컨트롤 플레인 시스템을 생성합니다.
- 작업자 시스템을 생성합니다.
프로세스
인그레스 라우터가 로드 밸런서를 생성하고
EXTERNAL-IP
필드를 채울 때까지 기다립니다.$ oc -n openshift-ingress get service router-default
출력 예
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-default LoadBalancer 172.30.18.154 35.233.157.184 80:32288/TCP,443:31215/TCP 98
영역에 A 레코드를 추가합니다.
A 레코드를 사용하려면,
라우터 IP 주소에 대한 변수를 내보냅니다.
$ export ROUTER_IP=`oc -n openshift-ingress get service router-default --no-headers | awk '{print $4}'`
프라이빗 영역에 A 레코드를 추가합니다.
$ if [ -f transaction.yaml ]; then rm transaction.yaml; fi $ gcloud dns record-sets transaction start --zone ${INFRA_ID}-private-zone $ gcloud dns record-sets transaction add ${ROUTER_IP} --name \*.apps.${CLUSTER_NAME}.${BASE_DOMAIN}. --ttl 300 --type A --zone ${INFRA_ID}-private-zone $ gcloud dns record-sets transaction execute --zone ${INFRA_ID}-private-zone
외부 클러스터의 경우 퍼블릭 영역에 A 레코드를 추가합니다.
$ if [ -f transaction.yaml ]; then rm transaction.yaml; fi $ gcloud dns record-sets transaction start --zone ${BASE_DOMAIN_ZONE_NAME} $ gcloud dns record-sets transaction add ${ROUTER_IP} --name \*.apps.${CLUSTER_NAME}.${BASE_DOMAIN}. --ttl 300 --type A --zone ${BASE_DOMAIN_ZONE_NAME} $ gcloud dns record-sets transaction execute --zone ${BASE_DOMAIN_ZONE_NAME}
와일드카드를 사용하지 않고 명시적 도메인을 추가하려면 클러스터의 현재 경로에 대한 항목을 생성합니다.
$ oc get --all-namespaces -o jsonpath='{range .items[*]}{range .status.ingress[*]}{.host}{"\n"}{end}{end}' routes
출력 예
oauth-openshift.apps.your.cluster.domain.example.com console-openshift-console.apps.your.cluster.domain.example.com downloads-openshift-console.apps.your.cluster.domain.example.com alertmanager-main-openshift-monitoring.apps.your.cluster.domain.example.com grafana-openshift-monitoring.apps.your.cluster.domain.example.com prometheus-k8s-openshift-monitoring.apps.your.cluster.domain.example.com
7.12.23. 사용자 프로비저닝 인프라에서 GCP 설치 완료
GCP(Google Cloud Platform) 사용자 프로비저닝 인프라에서 OpenShift Container Platform 설치를 시작한 후 클러스터가 준비를 마칠 때까지 클러스터 이벤트를 모니터링할 수 있습니다.
사전 요구 사항
- 사용자 프로비저닝 GCP 인프라에 OpenShift Container Platform 클러스터용 부트스트랩 시스템을 배포하십시오.
-
oc
CLI를 설치하고 로그인하십시오.
프로세스
클러스터 설치를 완료합니다.
$ ./openshift-install --dir <installation_directory> wait-for install-complete 1
출력 예
INFO Waiting up to 30m0s for the cluster to initialize...
- 1
<installation_directory>
는 설치 파일을 저장한 디렉터리의 경로를 지정합니다.
중요-
설치 프로그램에서 생성하는 Ignition 구성 파일에 24시간 후에 만료되는 인증서가 포함되어 있습니다. 이 인증서는 그 후에 갱신됩니다. 인증서를 갱신하기 전에 클러스터가 종료되고 24시간이 지난 후에 클러스터가 다시 시작되면 클러스터는 만료된 인증서를 자동으로 복구합니다. 예외적으로 kubelet 인증서를 복구하려면 대기 중인
node-bootstrapper
인증서 서명 요청(CSR)을 수동으로 승인해야 합니다. 자세한 내용은 Recovering from expired control plane certificates 문서를 참조하십시오. - 클러스터를 설치한 후 24시간에서 22시간까지의 인증서가 교체되기 때문에 생성된 후 12시간 이내에 Ignition 구성 파일을 사용하는 것이 좋습니다. 12시간 이내에 Ignition 구성 파일을 사용하면 설치 중에 인증서 업데이트가 실행되는 경우 설치 실패를 방지할 수 있습니다.
클러스터의 실행 상태를 관찰합니다.
다음 명령을 실행하여 현재 클러스터 버전과 상태를 확인합니다.
$ oc get clusterversion
출력 예
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS version False True 24m Working towards 4.5.4: 99% complete
다음 명령을 실행하여 컨트롤 플레인에서 관리하되는 운영자를 CVO(Cluster Version Operator)별로 확인합니다.
$ oc get clusteroperators
출력 예
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE authentication 4.5.4 True False False 7m56s cloud-credential 4.5.4 True False False 31m cluster-autoscaler 4.5.4 True False False 16m console 4.5.4 True False False 10m csi-snapshot-controller 4.5.4 True False False 16m dns 4.5.4 True False False 22m etcd 4.5.4 False False False 25s image-registry 4.5.4 True False False 16m ingress 4.5.4 True False False 16m insights 4.5.4 True False False 17m kube-apiserver 4.5.4 True False False 19m kube-controller-manager 4.5.4 True False False 20m kube-scheduler 4.5.4 True False False 20m kube-storage-version-migrator 4.5.4 True False False 16m machine-api 4.5.4 True False False 22m machine-config 4.5.4 True False False 22m marketplace 4.5.4 True False False 16m monitoring 4.5.4 True False False 10m network 4.5.4 True False False 23m node-tuning 4.5.4 True False False 23m openshift-apiserver 4.5.4 True False False 17m openshift-controller-manager 4.5.4 True False False 15m openshift-samples 4.5.4 True False False 16m operator-lifecycle-manager 4.5.4 True False False 22m operator-lifecycle-manager-catalog 4.5.4 True False False 22m operator-lifecycle-manager-packageserver 4.5.4 True False False 18m service-ca 4.5.4 True False False 23m service-catalog-apiserver 4.5.4 True False False 23m service-catalog-controller-manager 4.5.4 True False False 23m storage 4.5.4 True False False 17m
다음 명령어를 실행하여 클러스터 Pod를 확인합니다.
$ oc get pods --all-namespaces
출력 예
NAMESPACE NAME READY STATUS RESTARTS AGE kube-system etcd-member-ip-10-0-3-111.us-east-2.compute.internal 1/1 Running 0 35m kube-system etcd-member-ip-10-0-3-239.us-east-2.compute.internal 1/1 Running 0 37m kube-system etcd-member-ip-10-0-3-24.us-east-2.compute.internal 1/1 Running 0 35m openshift-apiserver-operator openshift-apiserver-operator-6d6674f4f4-h7t2t 1/1 Running 1 37m openshift-apiserver apiserver-fm48r 1/1 Running 0 30m openshift-apiserver apiserver-fxkvv 1/1 Running 0 29m openshift-apiserver apiserver-q85nm 1/1 Running 0 29m ... openshift-service-ca-operator openshift-service-ca-operator-66ff6dc6cd-9r257 1/1 Running 0 37m openshift-service-ca apiservice-cabundle-injector-695b6bcbc-cl5hm 1/1 Running 0 35m openshift-service-ca configmap-cabundle-injector-8498544d7-25qn6 1/1 Running 0 35m openshift-service-ca service-serving-cert-signer-6445fc9c6-wqdqn 1/1 Running 0 35m openshift-service-catalog-apiserver-operator openshift-service-catalog-apiserver-operator-549f44668b-b5q2w 1/1 Running 0 32m openshift-service-catalog-controller-manager-operator openshift-service-catalog-controller-manager-operator-b78cr2lnm 1/1 Running 0 31m
현재 클러스터 버전이
AVAILABLE
이면 설치가 완료된 것입니다.
7.12.24. OpenShift Container Platform의 Telemetry 액세스
OpenShift Container Platform 4.9에서는 클러스터 상태 및 업데이트 진행에 대한 메트릭을 제공하기 위해 기본적으로 실행되는 Telemetry 서비스에 인터넷 액세스가 필요합니다. 클러스터가 인터넷에 연결되어 있으면 Telemetry가 자동으로 실행되고 OpenShift Cluster Manager 에 클러스터가 자동으로 등록됩니다.
OpenShift Cluster Manager 인벤토리가 올바르거나 OpenShift Cluster Manager를 사용하여 자동으로 또는 OpenShift Cluster Manager를 사용하여 수동으로 유지 관리되는지 확인한 후 subscription watch를 사용하여 계정 또는 다중 클러스터 수준에서 OpenShift Container Platform 서브스크립션을 추적합니다.
추가 리소스
- Telemetry 서비스에 대한 자세한 내용은 원격 상태 모니터링 정보를 참조하십시오.
7.12.25. 다음 단계
- 클러스터를 사용자 지정합니다.
-
Cluster Samples Operator 및
must-gather
툴의 이미지 스트림을 구성합니다. - 제한된 네트워크에서 Operator Lifecycle Manager (OLM) 사용 방법에 대해 살펴봅니다.
- 클러스터를 설치하는 데 사용한 미러 레지스트리에 신뢰할 수 있는 CA가 있는 경우 추가 신뢰 저장소를 구성하여 클러스터에 추가합니다.
- 필요한 경우 원격 상태 보고 옵트아웃을 수행할 수 있습니다.