작업자 노드 추가
이 절차를 사용하여 OpenShift 클러스터에 작업자 노드를 추가합니다.
이 예제 절차는 순전히 정보 제공의 목적으로 제공됩니다. 공식 절차는 Red Hat OpenShift 설명서(https://docs.openshift.com/)를 참조하십시오.
이 절차에서는 초기 바인딩의 예를 보여 줍니다. 초기 바인딩에서는 기존 클러스터에 대해 미리 구성된 ISO를 생성합니다. 노드가 해당 ISO로 부팅되면 노드는 자동으로 기존 클러스터에 연결합니다.
이로 인해 하나 이상의 CSR(CertificateSigningRequests)이 새 노드에서 기존 클러스터로 전송됩니다. CSR은 단순히 (기존) 클러스터에 대한 클라이언트 인증서를 얻기 위한 요청입니다. 이러한 요청을 명시적으로 승인해야 합니다. 승인되면 기존 클러스터는 새 노드에 클라이언트 인증서를 제공하고 새 노드는 기존 클러스터에 가입할 수 있습니다.
- 보조 설치 관리자 클라이언트로 사용 중인 컴퓨터(VM 또는 BMS)에 로그인합니다. Assisted Installer 클라이언트 머신은 Red Hat에서 호스팅하는 Assisted Installer 서비스에 대한 Assisted Installer API 호출을 실행하는 위치입니다.
- 이후 단계에서 사용할 환경 변수를 설정하여 배포를 준비합니다.
- 기존 클러스터에 사용하는 것과 동일한 SSH 키를 설정합니다.
이 예제에서는 기본 위치 ~/. ssh/id_rsa.pub 에서 해당 SSH 키를 검색하고 변수에 저장합니다.
export CLUSTER_SSHKEY=$(cat ~/.ssh/id_rsa.pub)
- 이미지 풀 시크릿 이 더 이상 없는 경우 Red Hat 계정에서 로컬 컴퓨터로 이미지 풀 시크릿을 다운로드합니다. 풀 시크릿을 사용하면 OpenShift 컴포넌트에 대한 컨테이너 이미지를 제공하는 서비스 및 레지스트리에 액세스할 수 있습니다.
Red Hat 호스팅 Assisted Installer를 사용하는 경우 https://console.redhat.com/openshift/downloads 페이지에서 풀 시크릿 파일(pull-secret)을 다운로드할 수 있습니다. 풀 시크릿 파일을 Assisted Installer 클라이언트 시스템에 복사합니다. 이 예제에서는 pull-secret.txt라는 파일에 풀 시크릿을 저장합니다.
공백을 제거하고, 내용을 JSON 문자열 형식으로 변환하고, 다음과 같이 환경 변수에 저장합니다.
export PULL_SECRET=$(sed '/^[[:space:]]*$/d' pull-secret.txt | jq -R .)
- 오프라인 액세스 토큰이 더 이상 없는 경우 Red Hat 계정에서 오프라인 액세스 토큰을 복사합니다. OpenShift Cluster Manager API 토큰을 사용하면 (Assisted Installer 클라이언트 시스템에서) Red Hat에서 호스팅하는 Assisted Installer API 서비스와 상호 작용할 수 있습니다.
토큰은 복사하여 로컬 환경 변수에 붙여넣을 수 있는 문자열입니다. Red Hat 호스팅 Assisted Installer를 사용하는 경우 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 응답을 받게 됩니다. 토큰이 만료될 때 새로 고치거나, 만료되기 전에 정기적으로 토큰을 새로 고칩니다. 토큰이 만료되지 않은 경우 새로 고쳐도 아무런 문제가 없습니다.
- 기존 클러스터의 OpenShift 클러스터 ID를 가져옵니다.
예를 들면
oc get clusterversion -o jsonpath='{.items[].spec.clusterID}{"\n"}' 1777102a-1fe1-407a-9441-9d0bad4f5968
export $OS_CLUSTER_ID="1777102a-1fe1-407a-9441-9d0bad4f5968"
- 나머지 환경 변수를 설정합니다.
표 1에는 이전 단계에서 설명한 환경 변수를 포함하여 이 절차에서 설정해야 하는 모든 환경 변수가 나열되어 있습니다.
표 1: 환경 변수 변수 설명 예제 CLUSTER_SSHKEY 기존 클러스터에 사용하는 (공용) SSH 키입니다. 추가하는 새 노드에 대해 동일한 키를 사용해야 합니다. – PULL_SECRET 다운로드하고, 제거하고, JSON 문자열 형식으로 변환한 이미지 끌어오기 암호입니다. – OFFLINE_ACCESS_TOKEN 복사한 OpenShift Cluster Manager API 토큰입니다. – 토큰 OFFLINE_ACCESS_TOKEN에서 생성(새로 고침)한 토큰입니다. – CLUSTER_NAME 기존 클러스터의 이름입니다. 마이클러스터 CLUSTER_DOMAIN 기존 클러스터의 기본 도메인입니다. contrail.lan OS_CLUSTER_ID 기존 클러스터의 OpenShift 클러스터 ID입니다. 1777102A-1FE1-407A-9441-9D0BAD4F5968 AI_URL Assisted Installer 서비스의 URL입니다. 이 예에서는 Red Hat Hosted Assisted Installer를 사용합니다. https://api.openshift.com
- 기존 클러스터에 사용하는 것과 동일한 SSH 키를 설정합니다.
- 기존 클러스터를 가져옵니다.
curl -X POST "$AI_URL/api/assisted-install/v2/clusters/import" -H "accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d "{\"name\":\"$CLUSTER_NAME\",\"openshift_cluster_id\":\"$OS_CLUSTER_ID\",\"api_vip_dnsname\":\"api.$CLUSTER_NAME.$CLUSTER_DOMAIN\"}"
클러스터를 가져올 때 Assisted Installer 서비스는 AddHostsCluster에 대한 클러스터 ID를 반환합니다. 응답에 포함된 클러스터 ID를 주의 깊게 살펴봅니다. 예를 들어:
"id":"19b809b5-69c4-42d8-9e5e-56aae4aba386"
- 검색 부팅 ISO를 생성합니다. 이 ISO를 사용하여 클러스터에 추가할 노드를 부팅합니다.
ISO는 설정할 인프라 환경에 따라 인프라에 맞게 사용자 지정됩니다.
- 인프라 환경을 설명하는 파일을 만듭니다. 이 예제에서는 이름을 infra-envs-addhost.json으로 지정합니다.
cat << EOF > ./infra-envs-addhost.json { "name": "<InfraEnv Name>", "ssh_authorized_key": "$CLUSTER_SSHKEY", "pull_secret": $PULL_SECRET, "cluster_id": "<AddHostsCluster ID>", "openshift_version": "<same as for existing cluster>", "user_managed_networking": <same as for existing cluster>, "vip_dhcp_allocation": <same as for existing cluster>, "base_dns_domain": "$CLUSTER_DOMAIN", } EOF
- InfraEnv Name 은 InfraEnv라고 부르려는 이름입니다.
- AddHostsCluster ID 는 AddHostsCluster의 클러스터 ID입니다(이전 단계에서 가져옴).
user_managed_networking
및vip_dhcp_allocation
기존 클러스터와 동일한 값으로 설정됩니다.
- InfraEnv를 등록합니다. 이에 대한 응답으로 Assisted Installer 서비스는 InfraEnv ID를 할당하고 지정된 인프라 환경을 기반으로 검색 부팅 ISO를 빌드합니다.
curl -X POST "$AI_URL/api/assisted-install/v2/infra-envs" -H "accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d @infra-envs-addhosts.json
InfraEnv를 등록하면 Assisted Installer 서비스가 InfraEnv ID를 반환합니다. 응답에 포함된 InfraEnv ID를 주의 깊게 확인합니다. 예를 들어:
"id":"78d20699-f25b-462c-bc1d-4738590a9344"
InfraEnv ID를 변수에 저장합니다. 예를 들어:
export INFRA_ENV_ID="78d20699-f25b-462c-bc1d-4738590a9344"
- 이미지 다운로드 URL을 가져옵니다.
curl -s $AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/downloads/image-url -H "accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" | jq '.url'
- ISO를 다운로드하여 파일에 저장합니다. 이 예제에서는 ai-liveiso-addhosts.iso에 저장합니다.
curl -L "<image URL>" -H "Authorization: Bearer $TOKEN" -o ./ai-liveiso-addhosts.iso
- 인프라 환경을 설명하는 파일을 만듭니다. 이 예제에서는 이름을 infra-envs-addhost.json으로 지정합니다.
- 검색 부팅 ISO를 사용하여 새 작업자 노드를 부팅합니다. 인프라에 가장 편리한 부팅 방법을 선택합니다. 새 노드가 Red Hat 호스팅 Assisted Installer에 액세스할 수 있는 네트워크에 연결되어 부팅되는지 확인합니다.
- 기존 클러스터에 새 노드를 설치합니다.
- 새 노드를 검사하여 해당 역할이 작업자로 설정되어 있는지 확인합니다.
curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" $AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/hosts | jq '.'
호스트 역할이 worker로 설정된 경우에만 진행합니다.
- 새 노드의 호스트 ID를 가져옵니다.
export HOST_ID=$(curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" $AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/hosts | jq -r '.[].id')
- 새 노드를 설치합니다.
curl -X POST "$AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/hosts/$HOST_ID/actions/install" -H "accept: application/json" -H "Authorization: Bearer $TOKEN" | jq -r
- 설치 진행 상황을 확인합니다.
curl -s -X GET --header "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" $AI_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/hosts | jq '.'
- 새 노드를 검사하여 해당 역할이 작업자로 설정되어 있는지 확인합니다.
- 새 노드가 다시 부팅되면 기존 클러스터에 가입하려고 시도합니다. 이로 인해 하나 이상의 CSR(CertificateSigningRequests)이 새 노드에서 기존 클러스터로 전송됩니다. CSR 요청을 승인해야 합니다.
- 보류 중인 CSR을 확인합니다.
예를 들어:
root@ai-client:~/contrail# oc get csr -A NAME AGE SIGNERNAME REQUESTOR CONDITION csr-gblnm 20s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Pending
보류 중인 CSR이 표시될 때까지 이 명령을 주기적으로 반복해야 할 수 있습니다.
- CSR을 승인합니다.
예를 들어:
root@ai-client:~/contrail# oc adm certificate approve csr-gblnm certificatesigningrequest.certificates.k8s.io/csr-gblnm approved
- 보류 중인 CSR을 확인합니다.
- 새 노드가 기존 클러스터에서 실행 중인지 확인합니다.
oc get nodes