19.13. 단일 관리 클러스터 설치를 위한 사용자 정의 리소스 생성

이 절차에서는 단일 관리 클러스터를 수동으로 생성하고 배포하는 방법을 설명합니다. 여러 클러스터를 생성하는 경우 수백 개의 클러스터를 생성하는 경우 "여러 관리 클러스터에 대해 ZTP 사용자 정의 리소스 생성"에 설명된 SiteConfig 방법을 사용하십시오.

사전 요구 사항

  • Assisted Installer 서비스 활성화.
  • 네트워크 연결을 확인합니다.

    • 허브 내의 컨테이너는 대상 베어 메탈 호스트의 BMC(Baseboard Management Controller) 주소에 도달할 수 있어야 합니다.
    • 관리 클러스터는 허브의 API 호스트 이름과 *.app 호스트 이름을 확인하고 도달할 수 있어야 합니다. 허브 API 및 *.app 호스트 이름 예:

      console-openshift-console.apps.hub-cluster.internal.domain.com
      api.hub-cluster.internal.domain.com
    • 허브가 관리 클러스터의 API 및 *.app 호스트 이름을 확인하고 도달할 수 있어야 합니다. 다음은 관리 클러스터의 API 및 *.app 호스트 이름의 예입니다.

      console-openshift-console.apps.sno-managed-cluster-1.internal.domain.com
      api.sno-managed-cluster-1.internal.domain.com
    • 대상 베어 메탈 호스트에서 IP에 연결할 수 있는 DNS 서버입니다.
  • 다음 하드웨어 최소가 있는 관리 클러스터의 대상 베어 메탈 호스트:

    • CPU 4개 또는 8 vCPU
    • 32GiB RAM
    • 루트 파일 시스템용 120GiB 디스크
  • 연결이 끊긴 환경에서 작업하는 경우 릴리스 이미지를 미러링해야 합니다. 릴리스 이미지를 미러링하려면 다음 명령을 사용합니다.

    oc adm release mirror -a <pull_secret.json>
    --from=quay.io/openshift-release-dev/ocp-release:{{ mirror_version_spoke_release }}
    --to={{ provisioner_cluster_registry }}/ocp4 --to-release-image={{
    provisioner_cluster_registry }}/ocp4:{{ mirror_version_spoke_release }}
  • spoke 클러스터 ISO를 HTTP 서버에 생성하는 데 사용되는 ISO 및 rootfs 를 미러링하고 해당 서버에서 이미지를 가져오도록 설정을 구성했습니다.

    이미지는 ClusterImageSet 버전과 일치해야 합니다. 4.9.0 버전을 배포하려면 4.9.0에서 rootfs 및 ISO를 설정해야 합니다.

절차

  1. 배포해야 하는 각 특정 클러스터 버전에 대한 ClusterImageSet 을 생성합니다. ClusterImageSet 의 형식은 다음과 같습니다.

    apiVersion: hive.openshift.io/v1
    kind: ClusterImageSet
    metadata:
      name: openshift-4.9.0-rc.0 1
    spec:
       releaseImage: quay.io/openshift-release-dev/ocp-release:4.9.0-x86_64 2
    1
    배포하려는 설명이 포함된 버전입니다.
    2
    배포할 특정 릴리스 이미지를 가리킵니다.
  2. 관리되는 클러스터에 대한 네임스페이스 정의를 생성합니다.

    apiVersion: v1
    kind: Namespace
    metadata:
         name: <cluster_name> 1
         labels:
            name: <cluster_name> 2
    1 2
    프로비저닝할 관리 클러스터의 이름입니다.
  3. BMC Secret 사용자 정의 리소스를 생성합니다.

    apiVersion: v1
    data:
      password: <bmc_password> 1
      username: <bmc_username> 2
    kind: Secret
    metadata:
      name: <cluster_name>-bmc-secret
      namespace: <cluster_name>
    type: Opaque
    1
    대상 베어 메탈 호스트의 암호입니다. base-64로 인코딩되어야 합니다.
    2
    대상 베어 메탈 호스트에 대한 사용자 이름입니다. base-64로 인코딩되어야 합니다.
  4. Image Pull Secret 사용자 정의 리소스를 생성합니다.

    apiVersion: v1
    data:
      .dockerconfigjson: <pull_secret> 1
    kind: Secret
    metadata:
      name: assisted-deployment-pull-secret
      namespace: <cluster_name>
    type: kubernetes.io/dockerconfigjson
    1
    OpenShift Container Platform 풀 시크릿입니다. base-64로 인코딩되어야 합니다.
  5. AgentClusterInstall 사용자 정의 리소스를 생성합니다.

    apiVersion: extensions.hive.openshift.io/v1beta1
    kind: AgentClusterInstall
    metadata:
      # Only include the annotation if using OVN, otherwise omit the annotation
      annotations:
        agent-install.openshift.io/install-config-overrides: '{"networking":{"networkType":"OVNKubernetes"}}'
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterDeploymentRef:
        name: <cluster_name>
      imageSetRef:
        name: <cluster_image_set> 1
      networking:
        clusterNetwork:
        - cidr: <cluster_network_cidr> 2
          hostPrefix: 23
        machineNetwork:
        - cidr: <machine_network_cidr> 3
        serviceNetwork:
        - <service_network_cidr> 4
      provisionRequirements:
        controlPlaneAgents: 1
        workerAgents: 0
      sshPublicKey: <public_key> 5
    1
    베어 메탈 호스트에 OpenShift Container Platform을 설치하는 데 사용되는 ClusterImageSet 사용자 정의 리소스의 이름입니다.
    2
    클러스터 노드 간 통신에 사용되는 CIDR 표기법의 IPv4 또는 IPv6 주소 블록입니다.
    3
    대상 베어 메탈 호스트 외부 통신에 사용되는 CIDR 표기법의 IPv4 또는 IPv6 주소 블록입니다. DU 단일 노드 클러스터를 프로비저닝할 때 API 및 Ingress VIP 주소를 결정하는 데에도 사용됩니다.
    4
    클러스터 서비스 내부 통신에 사용되는 CIDR 표기법의 IPv4 또는 IPv6 주소 블록입니다.
    5
    일반 텍스트로 입력합니다. 설치를 마친 후 공개 키를 사용하여 노드에 SSH를 수행할 수 있습니다.
    참고

    이 시점에서 관리 클러스터의 고정 IP를 구성하려면 이 문서의 절차를 참조하십시오. 관리 클러스터에 대한 고정 IP 주소를 구성하려면 이 문서의 절차를 참조하십시오.

  6. ClusterDeployment 사용자 정의 리소스를 생성합니다.

    apiVersion: hive.openshift.io/v1
    kind: ClusterDeployment
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      baseDomain: <base_domain> 1
      clusterInstallRef:
        group: extensions.hive.openshift.io
        kind: AgentClusterInstall
        name: <cluster_name>
        version: v1beta1
      clusterName: <cluster_name>
      platform:
        agentBareMetal:
          agentSelector:
            matchLabels:
              cluster-name: <cluster_name>
      pullSecretRef:
        name: assisted-deployment-pull-secret
    1
    관리형 클러스터의 기본 도메인.
  7. KlusterletAddonConfig 사용자 정의 리소스를 생성합니다.

    apiVersion: agent.open-cluster-management.io/v1
    kind: KlusterletAddonConfig
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterName: <cluster_name>
      clusterNamespace: <cluster_name>
      clusterLabels:
        cloud: auto-detect
        vendor: auto-detect
      applicationManager:
        enabled: true
      certPolicyController:
        enabled: false
      iamPolicyController:
        enabled: false
      policyController:
        enabled: true
      searchCollector:
        enabled: false 1
    1
    KlusterletAddonConfig 또는 false 를 활성화하려면 KlusterletAddonConfig를 비활성화하려면 true 로 설정합니다. searchoctetsor를 사용하지 않도록 설정합니다.
  8. ManagedCluster 사용자 정의 리소스를 생성합니다.

    apiVersion: cluster.open-cluster-management.io/v1
    kind: ManagedCluster
    metadata:
      name: <cluster_name>
    spec:
      hubAcceptsClient: true
  9. InfraEnv 사용자 정의 리소스를 생성합니다.

    apiVersion: agent-install.openshift.io/v1beta1
    kind: InfraEnv
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterRef:
        name: <cluster_name>
        namespace: <cluster_name>
      sshAuthorizedKey: <public_key> 1
      agentLabels: 2
        location: "<label-name>"
      pullSecretRef:
        name: assisted-deployment-pull-secret
    1
    일반 텍스트로 입력합니다. 공개 키를 사용하여 ISO에서 부팅할 때 대상 베어 메탈 호스트에 SSH를 수행할 수 있습니다.
    2
    일치하는 레이블을 설정합니다. 이 레이블은 에이전트가 부팅될 때 적용됩니다.
  10. BareMetalHost 사용자 정의 리소스를 생성합니다.

    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
      annotations:
        inspect.metal3.io: disabled
      labels:
        infraenvs.agent-install.openshift.io: "<cluster_name>"
    spec:
      bootMode: "UEFI"
      bmc:
        address: <bmc_address> 1
        disableCertificateVerification: true
        credentialsName: <cluster_name>-bmc-secret
      bootMACAddress: <mac_address> 2
      automatedCleaningMode: disabled
      online: true
    1
    대상 베어 메탈 호스트에 설치 ISO의 베이스 보드 관리 콘솔 주소입니다.
    2
    대상 베어 메탈 호스트의 MAC 주소입니다.

    선택적으로 bmac.agent-install.openshift.io/hostname: <host-name> 을 주석으로 추가하여 관리 클러스터의 호스트 이름을 설정할 수 있습니다. 주석을 추가하지 않으면 호스트 이름은 DHCP 서버 또는 로컬 호스트의 호스트 이름으로 기본 설정됩니다.

  11. 사용자 지정 리소스를 생성한 후 생성된 사용자 지정 리소스의 전체 디렉터리를 사용자 지정 리소스를 저장하기 위해 생성한 Git 리포지토리로 내보냅니다.

다음 단계

추가 클러스터를 프로비저닝하려면 각 클러스터에 대해 이 절차를 반복합니다.

19.13.1. 관리 클러스터의 고정 IP 주소 구성

선택적으로 에이전트ClusterInstall 사용자 정의 리소스를 생성한 후 관리 클러스터에 대한 고정 IP 주소를 구성할 수 있습니다.

참고

ClusterDeployment 사용자 정의 리소스를 생성하기 전에 이 사용자 정의 리소스를 생성해야 합니다.

사전 요구 사항

  • AgentClusterInstall 사용자 정의 리소스를 배포하고 구성합니다.

절차

  1. NMStateConfig 사용자 정의 리소스를 생성합니다.

    apiVersion: agent-install.openshift.io/v1beta1
    kind: NMStateConfig
    metadata:
     name: <cluster_name>
     namespace: <cluster_name>
     labels:
       sno-cluster-<cluster-name>: <cluster_name>
    spec:
     config:
       interfaces:
         - name: eth0
           type: ethernet
           state: up
           ipv4:
             enabled: true
             address:
               - ip: <ip_address> 1
                 prefix-length: <public_network_prefix> 2
             dhcp: false
       dns-resolver:
         config:
           server:
             - <dns_resolver> 3
       routes:
         config:
           - destination: 0.0.0.0/0
             next-hop-address: <gateway> 4
             next-hop-interface: eth0
             table-id: 254
     interfaces:
       - name: "eth0" 5
         macAddress: <mac_address> 6
    1
    대상 베어 메탈 호스트의 고정 IP 주소입니다.
    2
    대상 베어 메탈 호스트의 고정 IP 주소 서브넷 접두사입니다.
    3
    대상 베어 메탈 호스트의 DNS 서버.
    4
    대상 베어 메탈 호스트의 게이트웨이입니다.
    5
    interfaces 섹션에 지정된 이름과 일치해야 합니다.
    6
    인터페이스의 mac 주소입니다.
  2. BareMetalHost 사용자 정의 리소스를 생성할 때 mac 주소 중 하나가 NMStateConfig 대상 베어 메탈 호스트의 mac 주소와 일치하는지 확인합니다.
  3. InfraEnv 사용자 정의 리소스를 생성할 때 InfraEnv 사용자 정의 리소스의 NMStateConfig 사용자 정의 리소스에서 라벨을 참조합니다.

    apiVersion: agent-install.openshift.io/v1beta1
    kind: InfraEnv
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterRef:
        name: <cluster_name>
        namespace: <cluster_name>
      sshAuthorizedKey: <public_key>
      agentLabels: 1
        location: "<label-name>"
      pullSecretRef:
        name: assisted-deployment-pull-secret
      nmStateConfigLabelSelector:
        matchLabels:
          sno-cluster-<cluster-name>: <cluster_name> # Match this label
    1
    일치하는 레이블을 설정합니다. 이 레이블은 에이전트가 부팅될 때 적용됩니다.

19.13.2. 클러스터 프로비저닝을 위한 자동화된 검색 이미지 ISO 프로세스

사용자 정의 리소스를 생성한 후 다음 작업이 자동으로 수행됩니다.

  1. 검색 이미지 ISO 파일이 타겟 시스템에서 생성 및 부팅됩니다.
  2. ISO 파일이 대상 시스템에서 성공적으로 부팅되면 대상 시스템의 하드웨어 정보를 보고합니다.
  3. 모든 호스트가 발견되면 OpenShift Container Platform이 설치됩니다.
  4. OpenShift Container Platform 설치를 완료하면 허브에서 대상 클러스터에 klusterlet 서비스를 설치합니다.
  5. 요청된 애드온 서비스는 대상 클러스터에 설치됩니다.

관리 클러스터의 허브에 에이전트 사용자 지정 리소스가 생성되면 검색 이미지 ISO 프로세스가 완료됩니다.

19.13.3. 관리 클러스터 상태 확인

클러스터 상태를 확인하여 클러스터 프로비저닝에 성공했는지 확인합니다.

사전 요구 사항

  • 모든 사용자 지정 리소스가 구성 및 프로비저닝되었으며, 에이전트 사용자 지정 리소스는 관리 클러스터의 허브에 생성됩니다.

절차

  1. 관리 클러스터의 상태를 확인합니다.

    $ oc get managedcluster

    True 는 관리 클러스터가 준비되었음을 나타냅니다.

  2. 에이전트 상태를 확인합니다.

    $ oc get agent -n <cluster_name>
  3. describe 명령을 사용하여 에이전트 상태에 대한 자세한 설명을 제공합니다. BackendError,InputError ,ValidationsFailing,InstallationFailedAgentIsConnected가 포함된 상태를 인식합니다. 이러한 상태는 Agent 및 Agent ClusterInstall 사용자 정의 리소스와 관련이 있습니다.

    $ oc describe agent -n <cluster_name>
  4. 클러스터 프로비저닝 상태를 확인합니다.

    $ oc get agentclusterinstall -n <cluster_name>
  5. 클러스터 프로비저닝 상태에 대한 자세한 설명을 제공하려면 describe 명령을 사용합니다.

    $ oc describe agentclusterinstall -n <cluster_name>
  6. 관리 클러스터의 애드온 서비스의 상태를 확인합니다.

    $ oc get managedclusteraddon -n <cluster_name>
  7. 관리 클러스터의 kubeconfig 파일의 인증 정보를 검색합니다.

    $ oc get secret -n <cluster_name> <cluster_name>-admin-kubeconfig -o jsonpath={.data.kubeconfig} | base64 -d > <directory>/<cluster_name>-kubeconfig

19.13.4. 연결이 끊긴 환경에 대한 관리형 클러스터 구성

이전 절차를 완료한 후 다음 단계를 수행하여 연결이 끊긴 환경에 대해 관리되는 클러스터를 구성합니다.

사전 요구 사항

  • RHACM(Red Hat Advanced Cluster Management) 2.3의 연결이 끊긴 설치.
  • HTTPD 서버에서 rootfsiso 이미지를 호스팅합니다.

절차

  1. 미러 레지스트리 구성이 포함된 ConfigMap 을 생성합니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: assisted-installer-mirror-config
      namespace: assisted-installer
      labels:
        app: assisted-service
    data:
      ca-bundle.crt: <certificate> 1
      registries.conf: |  2
        unqualified-search-registries = ["registry.access.redhat.com", "docker.io"]
    
        [[registry]]
          location = <mirror_registry_url>  3
          insecure = false
          mirror-by-digest-only = true
    1
    미러 레지스트리를 생성할 때 사용되는 미러 레지스트리의 인증서입니다.
    2
    미러 레지스트리의 구성입니다.
    3
    미러 레지스트리의 URL입니다.

    그러면 다음과 같이 AgentServiceConfig 사용자 정의 리소스에서 mirrorRegistryRef 가 업데이트되었습니다.

    출력 예

    apiVersion: agent-install.openshift.io/v1beta1
    kind: AgentServiceConfig
    metadata:
      name: agent
      namespace: assisted-installer
    spec:
      databaseStorage:
        volumeName: <db_pv_name>
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: <db_storage_size>
      filesystemStorage:
        volumeName: <fs_pv_name>
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: <fs_storage_size>
      mirrorRegistryRef:
        name: 'assisted-installer-mirror-config'
      osImages:
        - openshiftVersion: <ocp_version>
          rootfs: <rootfs_url> 1
          url: <iso_url> 2

    1 2
    HTTPD 서버의 URL과 일치해야 합니다.
  2. 연결이 끊긴 설치의 경우 연결이 끊긴 네트워크를 통해 연결할 수 있는 NTP 시계를 배포해야 합니다. 서버 역할을 하도록 chrony를 구성하고, /etc/chrony.conf 파일을 편집하고, 다음과 같은 허용된 IPv6 범위를 추가하여 이 작업을 수행할 수 있습니다.

    # Allow NTP client access from local network.
    #allow 192.168.0.0/16
    local stratum 10
    bindcmdaddress ::
    allow 2620:52:0:1310::/64

19.13.5. 연결이 끊긴 환경에 대한 IPv6 주소 구성

선택적으로 AgentClusterInstall 사용자 정의 리소스를 생성할 때 관리 클러스터에 대한 IPv6 주소를 구성할 수 있습니다.

절차

  1. AgentClusterInstall 사용자 정의 리소스에서 IPv6 주소의 in clusterNetworkserviceNetwork 를 수정합니다.

    apiVersion: extensions.hive.openshift.io/v1beta1
    kind: AgentClusterInstall
    metadata:
      # Only include the annotation if using OVN, otherwise omit the annotation
      annotations:
        agent-install.openshift.io/install-config-overrides: '{"networking":{"networkType":"OVNKubernetes"}}'
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterDeploymentRef:
        name: <cluster_name>
      imageSetRef:
        name: <cluster_image_set>
      networking:
        clusterNetwork:
        - cidr: "fd01::/48"
          hostPrefix: 64
        machineNetwork:
        - cidr: <machine_network_cidr>
        serviceNetwork:
        - "fd02::/112"
      provisionRequirements:
        controlPlaneAgents: 1
        workerAgents: 0
      sshPublicKey: <public_key>
  2. NMStateConfig 사용자 지정 리소스를 사용자가 정의한 IPv6 주소로 업데이트합니다.

19.13.6. 관리 클러스터 문제 해결

관리 클러스터에서 발생할 수 있는 설치 문제를 진단하려면 다음 절차를 사용하십시오.

절차

  1. 관리 클러스터의 상태를 확인합니다.

    $ oc get managedcluster

    출력 예

    NAME            HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED   AVAILABLE   AGE
    SNO-cluster     true                                   True     True      2d19h

    AVAILABLE 열의 상태가 True 이면 관리 클러스터가 허브에서 관리되고 있습니다.

    AVAILABLE 열의 상태가 Unknown 이면 관리 클러스터가 허브에서 관리되지 않습니다. 다음 단계를 사용하여 자세한 정보를 확인하십시오.

  2. AgentClusterInstall 설치 상태를 확인합니다.

    $ oc get clusterdeployment -n <cluster_name>

    출력 예

    NAME        PLATFORM            REGION   CLUSTERTYPE   INSTALLED    INFRAID    VERSION  POWERSTATE AGE
    Sno0026    agent-baremetal                               false                          Initialized
    2d14h

    INSTALLED 열의 상태가 false 이면 설치가 실패합니다.

  3. 설치에 실패하면 다음 명령을 입력하여 AgentClusterInstall 리소스의 상태를 검토합니다.

    $ oc describe agentclusterinstall -n <cluster_name> <cluster_name>
  4. 오류를 해결하고 클러스터를 재설정합니다.

    1. 클러스터의 관리 클러스터 리소스를 제거합니다.

      $ oc delete managedcluster <cluster_name>
    2. 클러스터의 네임스페이스를 제거합니다.

      $ oc delete namespace <cluster_name>

      그러면 이 클러스터에 대해 생성된 네임스페이스 범위의 사용자 정의 리소스가 모두 삭제됩니다. 계속하기 전에 ManagedCluster CR 삭제가 완료될 때까지 기다려야 합니다.

    3. 관리 클러스터에 대한 사용자 정의 리소스를 다시 생성합니다.