사용자 매니지드 네트워킹을 통한 설치
이 절차를 통해 사용자 매니지드 네트워킹으로 클러스터를 불러올 수 있습니다. 사용자 매니지드 네트워킹은 설치 시 외부 로드 밸런서를 명시적으로 제공하는 구축을 의미합니다.
그림 1 은 외부 로드 밸런서를 포함하는 사용자 관리 네트워킹 설정에서 베어 메탈 서버 또는 가상 머신에서 실행되는 컨트롤 플레인 노드 3개와 작업자 노드 2개를 보여줍니다. 클러스터의 노드와 노드 및 외부 사이트 간의 모든 통신은 단일 172.16.0.0/24 패브릭 가상 네트워크를 통해 이루어집니다.

별도의 시스템이 보조 설치 관리자 클라이언트 역할을 합니다. 지원 설치자 클라이언트는 curl 명령을 사용하여 지원 설치 서비스로 API 호출을 실행하여 클러스터를 생성할 수 있습니다. 이 절차의 예에서는 보조 설치 관리자 클라이언트 머신을 사용하여 서브넷에 대한 DNS/DHCP 서버도 호스팅합니다.
로컬 관리자는 게이트웨이를 통해 연결할 수 있는 별도의 네트워크에 연결되어 있음을 알 수 있습니다. 이는 일반적으로 로컬 관리자가 기업 LAN에서 패브릭과 클러스터를 관리하는 많은 설치에서 가능합니다. 그 다음 절차에서 로컬 관리자 스테이션을 로컬 컴퓨터로 언급합니다.
모든 노드를 함께 연결하는 것은 데이터센터 패브릭이며, 이 예에는 단일 서브넷으로 표시됩니다. 실제 설치 환경에서 데이터센터 패브릭은 클러스터에 물리적 연결을 제공하는 스파인 및 리프 스위치 네트워크입니다.
Apstra 매니지드 데이터센터에서는 기본 패브릭 스위치에서 생성하는 오버레이 가상 네트워크를 통해 이러한 연결을 지정합니다.
이 절차는 Red Hat에서 호스팅하는 보조 설치 서비스 를 사용하며 호스트를 불러 오기 전에 클러스터를 등록하는 일반적인 초기 바인딩 사용 사례를 다룹니다.
- 보조 설치 관리자 클라이언트 시스템에 로그인합니다. 보조 설치 관리자 클라이언트 머신은 보조 설치 관리자 API를 지원 설치 서비스로 호출하는 경우입니다.
- 나중에 사용할 환경 변수를 설정하여 구축을 준비합니다.
- 클러스터의 노드에 액세스하는 데 사용할 SSH 키를 만듭니다. 키를 환경 변수에 저장합니다.
root@ai-client:~# ssh-keygen
이 예에서는 기본 위치 ~/.ssh/id_rsa.pubexport CLUSTER_SSHKEY=$(cat ~/.ssh/id_rsa.pub)
- Red Hat 계정의 이미지 풀 시크릿을 로컬 컴퓨터로 다운로드하십시오. 풀 암호는 설치가 OpenShift 구성 요소에 대한 컨테이너 이미지를 제공하는 서비스 및 레지스트리에 액세스할 수 있게 해줍니다.
Red Hat에서 호스팅된 보조 설치 관리자를 사용하는 경우, https://console.redhat.com/openshift/downloads 페이지에서 풀 암호 파일(풀-암호)을 다운로드할 수 있습니다. 풀 암호 파일을 보조 설치 관리자 클라이언트 머신에 복사합니다. 이 예에서 풀-암호는 pull-secret.txt라는 파일에 저장합니다.
공백을 제거하고, 내용을 JSON 문자열 형식으로 변환하고 다음과 같이 환경 변수로 저장합니다.
export PULL_SECRET=$(sed '/^[[:space:]]*$/d' pull-secret.txt | jq -R .)
- Red Hat 계정에서 오프라인 액세스 토큰을 복사합니다. OpenShift Cluster Manager API 토큰을 사용하면(보조 설치자 클라이언트 머신에서) Red Hat에서 호스팅하는 보조 설치 관리자 API 서비스와 상호 작용할 수 있습니다.
토큰은 로컬 환경 변수에 복사하여 붙여넣을 수 있는 문자열입니다. Red Hat에서 호스팅된 보조 설치 관리자를 사용하는 경우, https://console.redhat.com/openshift/downloads API 토큰을 복사할 수 있습니다.
export OFFLINE_ACCESS_TOKEN='<paste offline access token here>'
- OFFLINE_ACCESS_TOKEN 토큰을 생성(새로 고침). API 명령을 실행할 때마다 이 생성된 토큰을 사용합니다.
export TOKEN=$(curl --silent --data-urlencode "grant_type=refresh_token" --data-urlencode "client_id=cloud-services" --data-urlencode "refresh_token=${OFFLINE_ACCESS_TOKEN}" https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token | jq -r .access_token)
참고:이 토큰은 정기적으로 만료됩니다. 이 토큰이 만료되면 API 명령을 실행할 때마다 HTTP 4xx 응답을 받게 됩니다. 토큰이 만료될 때 새로 고치거나 토큰이 만료되기 전에 정기적으로 새로 고칩니다. 토큰이 만료되지 않은 경우 토큰을 리프레시하는 데 해가 되지 않습니다.
- 나머지 환경 변수를 설정합니다.
표 1 은(는) 이전 단계에 설명된 변수를 포함하여 이 절차에서 설정해야 하는 모든 환경 변수를 나열합니다.
표 1: 환경 변수 변수 설명 예 CLUSTER_SSHKEY 생성한 (공개) ssh 키입니다. 이 키는 모든 클러스터 노드에 설치됩니다. – PULL_SECRET JSON 문자열 형식으로 다운로드, 제거 및 변환한 이미지 풀 암호입니다. – OFFLINE_ACCESS_TOKEN 복사한 OpenShift Cluster Manager API 토큰입니다. – 토큰 OFFLINE_ACCESS_TOKEN 생성한 토큰(새로 고침). – CLUSTER_NAME 클러스터를 호출할 이름입니다. Red Hat 하이브리드 클라우드 콘솔 UI에 나타날 이름입니다. 참고:이 이름은 소문자여야 합니다.
내 클러스터 CLUSTER_DOMAIN 클러스터에 할당할 기본 도메인입니다. 클러스터 개체는 이 도메인에 이름이 할당됩니다. Contrail.lan CLUSTER_NET 오버레이 클러스터 네트워크. Pod에는 이 네트워크에 IP 주소가 할당됩니다. 10.128.0.0/14 CLUSTER_SVC_NET 오버레이 서비스 네트워크. 서비스에는 이 네트워크에 IP 주소가 할당됩니다. 172.31.0.0/16 CLUSTER_HOST_PFX CLUSTER_NET IP 주소를 할당하기 위한 서브넷 접두사 길이. 이는 pod IP 주소 할당에 사용할 CLUSTER_NET IP 주소의 하위 집합을 정의합니다. 23 AI_URL 보조 설치 관리자 서비스의 URL입니다. 이 예에서는 Red Hat 호스팅 보조 설치 관리자를 사용합니다. https://api.openshift.com
- 클러스터의 노드에 액세스하는 데 사용할 SSH 키를 만듭니다. 키를 환경 변수에 저장합니다.
- 보조 설치 서비스로 클러스터를 등록합니다. 등록하면 지원 설치 관리자 서비스에 생성하려는 클러스터의 특성에 대해 알려야 합니다. 이에 대응하여 보조 설치자 서비스는 클러스터 리소스를 생성하고 해당 클러스터 리소스를 고유하게 식별하는 클러스터 식별자를 반환합니다.
- 생성할 클러스터를 설명하는 파일을 만듭니다. 이 예에서는 file deployment.json의 이름을 지정합니다.
cat << EOF > ./deployment.json { "kind": "Cluster", "name": "$CLUSTER_NAME", "openshift_version": "4.8", "ocp_release_image": "quay.io/openshift-release-dev/ocp-release:4.8.0-x86_64", "base_dns_domain": "$CLUSTER_DOMAIN", "hyperthreading": "all", "cluster_network_cidr": "$CLUSTER_NET", "cluster_network_host_prefix": $CLUSTER_HOST_PFX, "service_network_cidr": "$CLUSTER_SVC_NET", "user_managed_networking": true, "ssh_public_key": "$CLUSTER_SSHKEY", "pull_secret": $PULL_SECRET } EOF
- 클러스터를 등록하고 CLUSTER_ID 환경 변수에 저장합니다. 방금 생성한 deployment.json 파일을 참조하십시오.
export CLUSTER_ID=$(curl -s -X POST "$AI_URL/api/assisted-install/v2/clusters" -d @./deployment.json --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" | jq -r '.id')
- 클러스터 속성을 업데이트하여 클러스터가 Contrail을 네트워킹 기술로 사용할 수 있도록 지정합니다.
curl --header "Content-Type: application/json" --request PATCH --data '"{\"networking\":{\"networkType\":\"Contrail\"}}"' -H "Authorization: Bearer $TOKEN" $AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID/install-config
- 변경 사항을 검토합니다.
curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" $AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID/install-config | jq -r
클러스터를 등록한 후에는 브라우저를 Red Hat 하이브리드 클라우드 콘솔( https://console.redhat.com/openshift)으로 연결하여 설치 진행 상황을 확인할 수 있습니다. 클러스터 이름 또는 cluster ID로 클러스터를 검색할 수 있습니다. - 생성할 클러스터를 설명하는 파일을 만듭니다. 이 예에서는 file deployment.json의 이름을 지정합니다.
- 디스커버리 부팅 ISO를 생성합니다. 이 ISO를 사용하여 클러스터의 노드를 부팅합니다.
ISO는 설정하려는 인프라 환경을 기반으로 인프라에 맞춤화됩니다.
- 인프라 환경을 설명하는 파일을 생성합니다. 이 예에서는 infra-envs.json의 이름을 지정합니다.
cat << EOF > ./infra-envs.json { "name": "$CLUSTER_NAME", "ssh_authorized_key": "$CLUSTER_SSHKEY", "pull_secret": $PULL_SECRET, "image_type": "full-iso", "cluster_id": "$CLUSTER_ID", "openshift_version": "4.8", "cpu_architecture": "x86_64" } EOF
- InfraEnv를 등록하십시오. 이에 대응하여 보조 설치 서비스(Assisted Installer) 서비스는 InfraEnv ID를 할당하고 지정된 인프라 환경을 기반으로 디스커버리 부팅 ISO를 구축합니다. 방금 생성한 infra-envs.json 파일을 참조합니다. 변수에 InfraEnv ID를 저장합니다.
export INFRA_ENVS_ID=$(curl -s -X POST "$AI_URL/api/assisted-install/v2/infra-envs" -d @infra-envs.json --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" | jq -r '.id')
- 확장된 API 서버에 대한 적절한 인증서로 ISO를 패치합니다.
점화 파일을 적용하여 이 작업을 수행합니다. 아래 내용을 infra-ignition.json 파일에 복사합니다. 콘텐츠에는 확장된 API 서버를 적절한 인증서로 구성하는 인코딩 스크립트가 포함되어 있습니다.
{"ignition_config_override": "{\"ignition\":{\"version\":\"3.1.0\"},\"systemd\":{\"units\":[{\"name\":\"ca-patch.service\",\"enabled\":true,\"contents\":\"[Service]\\nType=oneshot\\nExecStart=/usr/local/bin/ca-patch.sh\\n\\n[Install]\\nWantedBy=multi-user.target\"}]},\"storage\":{\"files\":[{\"path\":\"/usr/local/bin/ca-patch.sh\",\"mode\":720,\"contents\":{\"source\":\"data:text/plain;charset=utf-8;base64,IyEvYmluL2Jhc2gKc3VjY2Vzcz0wCnVudGlsIFsgJHN1Y2Nlc3MgLWd0IDEgXTsgZG8KICB0bXA9JChta3RlbXApCiAgY2F0IDw8RU9GPiR7dG1wfSB8fCB0cnVlCmRhdGE6CiAgcmVxdWVzdGhlYWRlci1jbGllbnQtY2EtZmlsZTogfAokKHdoaWxlIElGUz0gcmVhZCAtYSBsaW5lOyBkbyBlY2hvICIgICAgJGxpbmUiOyBkb25lIDwgPChjYXQgL2V0Yy9rdWJlcm5ldGVzL2Jvb3RzdHJhcC1zZWNyZXRzL2FnZ3JlZ2F0b3ItY2EuY3J0KSkKRU9GCiAgS1VCRUNPTkZJRz0vZXRjL2t1YmVybmV0ZXMvYm9vdHN0cmFwLXNlY3JldHMva3ViZWNvbmZpZyBrdWJlY3RsIC1uIGt1YmUtc3lzdGVtIHBhdGNoIGNvbmZpZ21hcCBleHRlbnNpb24tYXBpc2VydmVyLWF1dGhlbnRpY2F0aW9uIC0tcGF0Y2gtZmlsZSAke3RtcH0KICBpZiBbWyAkPyAtZXEgMCBdXTsgdGhlbgoJcm0gJHt0bXB9CglzdWNjZXNzPTIKICBmaQogIHJtICR7dG1wfQogIHNsZWVwIDYwCmRvbmUK\"}}]},\"kernelArguments\":{\"shouldExist\":[\"ipv6.disable=1\"]}}"}
방금 생성한 ignition 파일을 적용합니다.curl -s -X PATCH $AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENVS_ID -d @infra-ignition.json --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" | jq -r '.id'
- ISO를 다운로드하십시오. 이 예에서는 이름을 비롯한 클러스터 식별자를 참조하는 ai-liveiso-iso$CLUSTER_ID라고 합니다.
export IMAGE_URL=$(curl -H "Authorization: Bearer $TOKEN" -L "$AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENVS_ID/downloads/image-url" | jq -r '.url')
curl -H "Authorization: Bearer $TOKEN" -L "$IMAGE_URL" -o ./ai-liveiso-$CLUSTER_ID.iso
- 인프라 환경을 설명하는 파일을 생성합니다. 이 예에서는 infra-envs.json의 이름을 지정합니다.
- 디스커버리 부팅 ISO로 컨트롤 플레인 노드 3개 부팅.
- 인프라에 가장 편리한 부팅 방법을 선택하십시오. Red Hat 호스팅 보조 설치 서비스에 액세스할 수 있는 네트워크에 연결된 시스템이 부팅되는지 확인합니다.
그림 1에 표시된 네트워크 예시에서 노드는 단일 인터페이스를 가지며, 이 인터페이스는 보조 설치자 서비스에 외부 연결이 있는 172.16.0.0/24 네트워크에 연결됩니다.
- 클러스터 상태를 확인합니다.
curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -H "get_unregistered_clusters: false" $AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID?with_hosts=true | jq -r '.status'
상태는 노드가 성공적으로 올라올 때 준비를 표시해야 합니다. - 검증 상태 확인:
curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -H "get_unregistered_clusters: false" $AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID?with_hosts=true | jq -r '.validations_info' | jq .
검증 상태는 클러스터를 올바르게 정의했는지 여부를 보여줍니다. 출력에 오류가 없어야 합니다. - 호스트 확인:
curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -H "get_unregistered_clusters: false" $AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID?with_hosts=true | jq -r '.hosts'
출력에는 부팅한 모든 노드의 세부 정보가 표시됩니다.호스트 ID와 같은 특정 정보를 필터링할 수 있습니다.curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -H "get_unregistered_clusters: false" $AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID?with_hosts=true | jq -r '.hosts[].id'
및 호스트 역할:curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -H "get_unregistered_clusters: false" $AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID?with_hosts=true | jq -r '.hosts[].role'
- 역할이 할당되었는지 확인합니다.
브라우저에서 Red Hat 하이브리드 클라우드 콘솔(https://console.redhat.com/openshift)으로 이동하여 클러스터의 세부 정보를 보려면 클러스터를 클릭합니다. 클러스터 이름 또는 cluster ID로 클러스터를 검색할 수 있습니다.
노드(호스트)가 나타나고 역할이 컨트롤 플레인 노드로 성공적으로 할당된 경우에만 다음 단계로 진행합니다. 컨트롤 플레인 노드 3개만 부팅했으므로 UI에서 할당된 역할이 컨트롤 플레인, 작업자로 표시됩니다.
- 인프라에 가장 편리한 부팅 방법을 선택하십시오. Red Hat 호스팅 보조 설치 서비스에 액세스할 수 있는 네트워크에 연결된 시스템이 부팅되는지 확인합니다.
- 5단계를 반복하여 작업자 노드를 부팅합니다.
호스트 역할을 쿼리하면 작업자 노드가 자동 할당 상태인 것을 볼 수 있습니다. 이것은 예상됩니다. 지원 설치자 서비스는 클러스터를 설치할 때 나중에 이러한 노드에 대한 역할을 할당합니다.
- Contrail 매니페스트(설치 전에 다운로드한 매니페스트)를 보조 설치 서비스에 업로드합니다.
편의를 위해 다음 bash 스크립트를 사용할 수 있습니다. 스크립트는 매니페스트 디렉터리에 매니페스트 를 배치한 것으로 가정합니다. 이 스크립트를 사용하는 경우 다음을 확인해야 합니다.
- 하위 디렉터리에서 사용하려는 모든 매니페스트를 포함하여 이 디렉터리에 사용하려는 모든 매니페스트를 배치합니다.
- 이 디렉터리에 다른 YAML 파일을 배치하지 않습니다.
스크립트는 매니페스트 디렉터리에 있는 모든 *.yaml 파일을 루프하여 base64에 인코딩하고 클러스터에 적용합니다.
다운로드한 매니페스트 패키지에는 이미 base64 인코딩 버전이 포함되어 있지만, 이 스크립트를 실행하여 다시 생성합니다.#!/bin/bash MANIFESTS=(manifests/*.yaml) total=${#MANIFESTS[@]} i=0 for file in "${MANIFESTS[@]}"; do i=$(( i + 1 )) eval "CONTRAIL_B64_MANIFEST=$(cat $file | base64 -w0)"; eval "BASEFILE=$(basename $file)"; eval "echo '{\"file_name\":\"$BASEFILE\", \"folder\":\"manifests\", \"content\":\"$CONTRAIL_B64_MANIFEST\"}' > $file.b64"; printf "\nProcessing file: $file\n" curl -s -X POST "$AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID/manifests" -d @$file.b64 --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" done echo echo echo "Total Manifests: $total" echo echo "Manifest List:" curl -s -X GET "$AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID/manifests" --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" | jq -r
- 클러스터 설치를 시작합니다.
curl -X POST "$AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID/actions/install" -H "accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" | jq
보조 설치자 서비스는 사용자가 정의한 클러스터 리소스를 기반으로 클러스터를 만듭니다. 먼저, 보조 설치자는 컨트롤 플레인 노드 중 하나를 부트스트랩 노드로 할당하고, 이 노드는 다른 노드를 준비합니다. 비 부트스트랩 노드가 클러스터로 재부팅되고, 비 부트스트랩 컨트롤 플레인 노드가 먼저 재부팅되고, 작업자 노드와 마지막으로 부트스트랩 노드가 하나씩 재부팅되는 것을 볼 수 있습니다.
설치에는 한 시간 이상이 걸릴 수 있습니다. Red Hat 하이브리드 클라우드 콘솔(https://console.redhat.com/openshift)에서 설치 진행 상황을 확인할 수 있습니다.
Red Hat 하이브리드 클라우드 콘솔에 설치 스톨링이 표시되면 사용자 이름이 core 있는 각 노드에 로그인하고 호스트가 도메인 이름, 특히 DNS/DHCP 서버에서 구성한 도메인 이름, Red Hat 보조 설치 서비스 및 주니퍼 네트웍스 리포지토리 도메인 이름을 해결할 수 있는지 확인합니다. 대부분의 일반적인 설치 문제는 잘못된 DNS 구성과 같은 네트워크 구성 오류로 거슬러 올라갈 수 있습니다. 또한 일부 환경에서는 노드가 재부팅 대신 종료될 수 있습니다. 이 경우 종료된 노드를 수동으로 부팅합니다.
- 클러스터에 대한 kubeconfig를 다운로드합니다.
- kubeconfig를 로컬 kubeconfig 파일로 다운로드합니다.
curl -s -X GET "$AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID/downloads/credentials?file_name=kubeconfig" -H "accept: application/octet-stream" -H "Authorization: Bearer $TOKEN" > kubeconfig
- kubeconfig를 ~/.kube/config로 복사합니다. 나중에 사용할 명령은 kubeconfig가 기본 위치에 있을 것으로 예상하기 때문에 contrailstatus kubeconfig는 기본값 ~/.kube/config 위치여야 합니다.
- kubeconfig를 로컬 kubeconfig 파일로 다운로드합니다.
- 설치를 확인합니다.
- 모든 포드의 상태를 확인합니다. 모든 포드가 실행 중 또는 완료된 상태에 있는지 확인합니다.
kubectl get pods -A -o wide
- 실행 또는 완료된 상태가 아닌 해당 꼬투리의 경우, kubectl 설명 명령을 사용하여 더 자세히 조사합니다.
kubectl describe pod <pod name> -n <namespace>
일반적인 문제가 이미지를 다운로드하지 못하고 있습니다. 이 경우 다음을 수행합니다.
- 네트워크가 주니퍼 네트웍스 리포지토리에 도달할 수 있는지 확인
- 실패한 포드가 있는 노드가 DNS 서버에 액세스하도록 구성되었는지 확인합니다.
- 실패한 포드가 있는 노드가 호스트 이름으로 리포지토리를 ping할 수 있는지 확인합니다.
- 모든 포드의 상태를 확인합니다. 모든 포드가 실행 중 또는 완료된 상태에 있는지 확인합니다.
- (선택 사항) OpenShift 웹 콘솔에 로그인하여 클러스터를 모니터링합니다.
웹 콘솔 URL은 https://console-openshift-console.apps.<cluster-name><cluster-domain>입니다.
- 웹 콘솔에 액세스하려는 브라우저가 웹 콘솔 URL에 액세스할 수 있는 컴퓨터에 있는지 확인합니다. 해당 콘솔의 호스트 이름에 대한 항목을 해당 시스템의 /etc/hosts 파일에 추가해야 할 수 있습니다. 이 매핑은 설치 전의 DNS 서버에서 구성한 *.apps.mycluster.contrail.lan 매핑입니다.
- Kubeadmin 암호를 다운로드합니다.
curl -s -X GET "$AI_URL/api/assisted-install/v2/clusters/$CLUSTER_ID/downloads/credentials?file_name=kubeadmin-password" -H "accept: application/octet-stream" -H "Authorization: Bearer $TOKEN"
- 사용자 이름 kubeadmin 및 다운로드한 암호를 사용하여 OpenShift 웹 콘솔에 로그인합니다.