Linux 사용자 지정 이미지(레거시)

이 절차에서는 AWS, Azure 또는 vSphere에서 계획 기반 클러스터를 생성할 때 사용할 Linux 사용자 지정 시스템 이미지를 빌드하는 방법을 안내합니다. 아래 섹션으로 나뉘어 있습니다. Tanzu Kubernetes Grid의 클러스터 유형에 대한 자세한 내용은 워크로드 클러스터 유형을 참조하십시오.

  • Linux 이미지 사전 요구 사항은 사용자 지정 Linux 이미지를 성공적으로 빌드하고 사용하는 데 필요한 것을 표시합니다.
  • Linux 이미지 빌드는 Kubernetes Image Builder 및 Docker를 사용하여 이미지를 사용자 지정하고 빌드하는 방법을 보여 줍니다.
  • Linux 이미지용 TKr 생성은 Linux 이미지를 TKr(Tanzu Kubernetes 릴리스)로 변환하는 방법을 보여 줍니다. 이는 이미지를 향후 Kubernetes 버전의 기본값으로 만들고 사용하고 관리하는 데 추가 옵션을 제공합니다.
  • 관리 클러스터에 Linux 이미지 사용은 사용자 지정 이미지를 템플릿으로 사용하는 관리 클러스터를 배포하는 방법을 보여 줍니다.
  • 워크로드 클러스터에 Linux 이미지 사용은 사용자 지정 이미지를 템플릿으로 사용하는 워크로드 클러스터를 배포하는 방법을 보여 줍니다.

Linux 이미지 사전 요구 사항

Linux 사용자 지정 시스템 이미지를 구축하려면 다음이 필요합니다.

  • 대상 인프라, AWS, Azure 또는 vSphere의 계정.
  • 다음이 설치된 macOS 또는 Linux 워크스테이션:
    • Docker 데스크톱
    • AWS: aws CLI(명령줄 인터페이스)
    • Azure: az CLI
    • vSphere: RHEL 8 이미지를 빌드하려면 macOS가 아닌 Linux 워크스테이션이 필요합니다.

Linux 이미지 빌드

  1. AWS 및 Azure에서 인프라 CLI에 로그인합니다. 메시지가 표시된 지역을 인증하고 지정합니다.

    • AWS: aws configure을 실행합니다.
    • Azure: az login을 실행합니다.
  2. Azure에서 구성 JSON 파일 azure-sig.json을 생성하고 Azure 특정 정보를 입력합니다. 이러한 파일의 예는 여기에 있습니다.

  3. vSphere에서 자격 증명 JSON 파일을 생성하고 해당 값을 입력합니다.

    {
    "cluster": "",
    "convert_to_template": "false",
    "create_snapshot": "true",
    "datacenter": "",
    "datastore": "",
    "folder": "",
    "insecure_connection": "false",
    "linked_clone": "true",
    "network": "",
    "password": "",
    "resource_pool": "",
    "template": "",
    "username": "",
    "vcenter_server": ""
    }
    
  4. 빌드할 Image Builder 구성 버전을 결정합니다.

    • TKG Image Builder용 VMware {code} Sample Exchange를 검색하여 사용 가능한 버전을 표시합니다.
    • 각 Image Builder 버전은 호환되는 Kubernetes 및 Tanzu Kubernetes Grid 버전에 해당합니다. 예를 들어 TKG-Image-Builder-for-Kubernetes-v1.24.10-on-TKG-v2.1.1-master.zip은 Tanzu Kubernetes Grid v2.1.1용 Kubernetes v1.24.10 이미지를 빌드합니다.
    • Tanzu Kubernetes Grid를 처음 설치할 때 수행해야 하는 관리 클러스터를 생성해야 하는 경우 Tanzu Kubernetes Grid 버전의 기본 Kubernetes 버전을 선택합니다. 예를 들어 Tanzu Kubernetes Grid v2.1.1에서 기본 Kubernetes 버전은 v1.24.10입니다. 워크로드 클러스터의 경우 v1.24.10 외에 Kubernetes v1.23.16 또는 v1.22.17 이미지를 빌드할 수도 있습니다.

    아래 단계에서는 Tanzu Kubernetes Grid v2.1.1용 Kubernetes v1.24.10 이미지를 구축하는 방법을 설명합니다.

  5. 구성 코드 zip 파일을 다운로드하고 해당 내용의 압축을 풉니다.

  6. cdTKG-Image-Builder- 디렉토리로 이동하여 tkg.json 파일이 현재 디렉토리에 있도록 합니다.

  7. 워크스테이션이 VMware 이미지 레지스트리 projects.registry.vmware.com에 액세스할 수 있는지 확인합니다.

  8. projects.registry.vmware.com에서 원하는 아티팩트 컨테이너를 다운로드하고 실행합니다.

    docker pull projects.registry.vmware.com/tkg/linux-resource-bundle:v1.24.10_vmware.1-tkg.2
    
    docker run -d -p 3000:3000 projects.registry.vmware.com/tkg/linux-resource-bundle:v1.24.10_vmware.1-tkg.2
    
  9. tkg.json을 편집하여 <IP><PORT>를 채웁니다. 여기서

    • IP는 Docker 컨테이너를 실행하는 시스템의 IP입니다.
    • PORT는 Docker 호스트의 사용되지 않은 포트를 컨테이너의 포트 3000(예: 3001:3000)과 연결합니다. 컨테이너는 포트 3000을 통해 아티팩트를 노출합니다.
  10. Photon-3 OVA를 구축하는 경우 tkg.json"extra_rpms"를 편집하여 지원되는 추가 사용자 지정 패키지를 반영합니다.

    "extra_rpms": "sysstat nfs-utils ethtool apparmor-parser"
    
  11. FIPS 지원 이미지를 구축하려면 tkg.json에서 다음 줄을 제거합니다.

    "ansible_user_vars": "install_fips=no"
    
  12. 인터넷 제한: HTTP 프록시 서버를 통해 인터넷에 액세스하는 인터넷 제한 환경에 이미지를 빌드하려면 tkg.json 파일에 다음을 추가합니다.

    {
      "http_proxy": "http://proxy.acme.com:80",
      "https_proxy": "http://proxy.acme.com:80",
      "no_proxy": "localhost, 127.0.0.1, acme.com, 10.0.0.0/8"
    }
    
  13. GPU 지원 클러스터: vSphere용 GPU 지원 클러스터 이미지를 빌드하려면 이름이 customizations.json인 파일을 생성하고 다음을 추가합니다.

    {
    "vmx_version": "17"
    }
    
  14. 이전 단계에서 편집한 customizations.jsontkg.json으로 동일한 디렉토리에 저장합니다.

  15. 다음 단계에서 다음 매개 변수 문자열을 수집하여 명령에 연결합니다. 이 중 대부분은 현재 작동하는 디렉토리를 현재 작업 디렉토리를 이미지를 빌드하는 데 사용되는 컨테이너의 /home/imagebuilder 디렉토리로 복하는 docker run -v 매개 변수를 지정합니다.

    • AUTHENTICATION: 로컬 CLI 디렉토리를 복사합니다.
      • AWS: ~/.aws:/home/imagebuilder/.aws 사용
      • Azure: ~/.azure:/home/imagebuilder/.azure 사용
      • vSphere: /PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json
    • SOURCES: 버전이 지정된 OS, Kubernetes, CNI(컨테이너 네트워크 인터페이스) 이미지의 다운로드 소스를 나열하는 저장소의 tkg.json 파일을 복사합니다.
      • /PATH/TO/tkg.json:/home/imagebuilder/tkg.json 사용
    • ROLES: Image Builder에 필요한 Ansible 역할이 포함된 저장소의 tkg 디렉토리를 복사합니다.
      • /PATH/TO/tkg:/home/imagebuilder/tkg 사용
      • 사용자 지정 Ansible 역할을 추가하려면 tkg.json 파일을 편집하여 이스케이프된 따옴표(\")로 custom_role_names 설정을 다시 포맷하여 여러 역할이 포함된 목록으로 만듭니다. 예:
        "custom_role_names": "\"/home/imagebuilder/tkg /home/imagebuilder/mycustomrole\"",
    • TESTS: 이미지의 대상 인프라, OS, Kubernetes 버전용으로 설계된 goss 테스트 디렉토리를 복사합니다.
      • 저장소의 goss 디렉토리에 있는 파일의 파일 이름을 사용합니다(예: amazon-ubuntu-1.24.10+vmware.1-goss-spec.yaml).
    • CUSTOMIZATIONS: 사용자 지정 파일을 JSON 형식으로 복사합니다. Image Builder 설명서에서 사용자 지정을 참조하십시오. 수정하기 전에 VMware CRE(Customer Reliability Engineering)에게 모범 사례 및 권장 사항을 문의합니다.
    • PACKER_VAR_FILES: Packer용 변수를 포함하는 위의 JSON 파일의 공백으로 구분된 목록.
    • (Azure) AZURE-CREDS: Image Builder 설명서에 설명된 대로 Azure 자격 증명 파일의 경로.
    • COMMAND: 사용자 지정 이미지 OS를 기반으로 다음 중 하나와 같은 명령을 사용합니다. vSphere 및 Azure 이미지의 경우 명령은 build-node-ova-build-azure-sig-로 시작합니다.
      • build-ami-ubuntu-2004: Ubuntu v20.04
      • build-ami-ubuntu-1804: Ubuntu v18.04
      • build-ami-amazon-2: Amazon Linux 2
      • build-node-ova-vsphere-ubuntu-2004: GPU 지원 클러스터
  16. 위의 문자열을 사용하여 VMware 레지스트리 projects.registry.vmware.com에서 끌어온 Docker 컨테이너에서 Image Builder를 실행합니다.

    docker run -it --rm \
        -v AUTHENTICATION \
        -v SOURCES \
        -v ROLES \
        -v /PATH/TO/goss/TESTS.yaml:/home/imagebuilder/goss/goss.yaml \
        -v /PATH/TO/CUSTOMIZATIONS.json:/home/imagebuilder/CUSTOMIZATIONS.json \
        --env PACKER_VAR_FILES="tkg.json CUSTOMIZATIONS.json" \
        --env-file AZURE-CREDS \
        --env IB_OVFTOOL=1 \
        projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.2 \
        COMMAND
    
    참고

    Azure용 이미지를 빌드하지 않는 경우 env-file을 생략합니다. 이 명령은 완료하는 데 몇 분 정도 소요될 수 있습니다.

    예를 들어 Ubuntu v20.04 및 Kubernetes v1.24.10이 포함된 사용자 지정 이미지를 생성하여 AWS에서 실행하려면 tkg.json이 포함된 디렉토리에서 실행됩니다.

    docker run -it --rm \
        -v ~/.aws:/home/imagebuilder/.aws \
        -v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
        -v $(pwd)/tkg:/home/imagebuilder/tkg \
        -v $(pwd)/goss/amazon-ubuntu-1.24.10+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
        -v /PATH/TO/CUSTOMIZATIONS.json /home/imagebuilder/aws.json \
        --env PACKER_VAR_FILES="tkg.json aws.json" \
        --env IB_OVFTOOL=1 \
        projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.2 \
        build-ami-ubuntu-2004
    

    vSphere 경우 위에서 생성한 사용자 지정 컨테이너 이미지를 사용해야 합니다. 또한 이후 단계에서 사용자 지정 TKr에서 전달하는 문자열과 일치하는 버전 문자열을 설정해야 합니다. VMware 게시된 OVA에는 v1.24.10+vmware.1-tkg.1과 같은 버전 문자열이 있지만 -tkg.1은 조직에 의미 있는 문자열로 바꾸는 것이 좋습니다. 이 버전 문자열을 설정하려면 다음과 같이 metadata.json 파일에서 정의합니다.

    {
      "VERSION": "v1.24.10+vmware.1-myorg.0"
    }
    

    OVA를 구축할 때 .ova 파일이 워크스테이션의 로컬 파일 시스템에 저장됩니다. 이러한 OVA를 저장할 폴더를 컨테이너 내의 /home/imagebuilder/output에 마운트해야 합니다. 그런 다음 컨테이너 이미지를 사용하여 OVA를 생성합니다.

    docker run -it --rm \
      -v /PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json \
      -v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
      -v $(pwd)/tkg:/home/imagebuilder/tkg \
      -v $(pwd)/goss/vsphere-ubuntu-1.24.10+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
      -v $(pwd)/metadata.json:/home/imagebuilder/metadata.json \
      -v /PATH/TO/OVA/DIR:/home/imagebuilder/output \
      --env PACKER_VAR_FILES="tkg.json vsphere.json" \
      --env OVF_CUSTOM_PROPERTIES=/home/imagebuilder/metadata.json \
      --env IB_OVFTOOL=1 \
      projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.2 \
      build-node-ova-vsphere-ubuntu-2004
    

    GPU 지원 클러스터의 경우, 명령을 실행하여 OVA를 생성할 때 위 단계에 생성된 customizations.json 파일을 포함해야 합니다.

    docker run -it --rm \
      -v /PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json \
      -v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
      -v $(pwd)/tkg:/home/imagebuilder/tkg \
      -v $(pwd)/goss/vsphere-ubuntu-1.24.10+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
      -v $(pwd)/metadata.json:/home/imagebuilder/metadata.json \
      -v $(pwd)/customizations.json:/home/imagebuilder/customizations.json \
      -v /PATH/TO/OVA/DIR:/home/imagebuilder/output \
      --env PACKER_VAR_FILES="tkg.json vsphere.json customizations.json" \
      --env OVF_CUSTOM_PROPERTIES=/home/imagebuilder/metadata.json \
      --env IB_OVFTOOL=1 \
      projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.2 \
      build-node-ova-vsphere-ubuntu-2004
    

    RHEL: RHEL OVA를 빌드하려면 macOS의 Docker는 --network host 옵션을 지원하지 않기 때문에 macOS가 아닌 Linux 시스템을 사용해야 합니다.
    또한 위의 docker run 명령에 다음을 추가하여 OS를 Red Hat에 라이센스가 부여된 OS로 등록하고 업데이트에 등록해야 합니다.

      -v $(pwd)/isos/rhel-8.4-x86_64-dvd.iso:/rhel-8.4-x86_64-dvd.iso \
      --network host \
      --env RHSM_USER=USER --env RHSM_PASS=PASS
    

    여기서:

    • RHSM_USERRHSM_PASS는 Red Hat 구독 관리자 계정의 사용자 이름과 암호입니다.
    • 위 예의 $(pwd)/isos/rhel-8.4-x86-64-dvd.iso에서 로컬 RHEL ISO 경로를 추가 볼륨으로 매핑합니다.

Linux 이미지용 TKr 생성

Linux 이미지를 향후 Kubernetes 버전의 기본값으로 설정하려면 이를 기반으로 TKr을 생성합니다. 그렇지 않으면 아래의 워크로드 클러스터에 Linux 이미지 사용으로 건너뜁니다.

아래 다이어그램에서는 vSphere에서 사용자 지정 Linux 이미지에 대한 TKr을 생성하는 방법에 대한 개괄적인 개요입니다.

TKr 생성

TKr을 생성하는 방법:

  1. ~/.config/tanzu/tkg/bom/ 디렉토리에서 사용자 지정 이미지의 Kubernetes 버전에 해당하는 TKr BoM을 엽니다. 예를 들어, Kubernetes v1.24.10용 tkr-bom-v1.24.10+vmware.1-tkg.1.yaml과 같은 파일 이름이 있습니다.

    필요한 TKr BoM 파일이 디렉토리에 없는 경우 비-기본 Kubernetes 버전으로 클러스터 배포에 설명된 대로 원하는 Kubernetes 버전으로 클러스터를 배포하여 가져올 수 있습니다.

    1. BoM 파일에서 해당 인프라의 이미지 정의 블록을 찾습니다. vSphere는 ova, AWS는 ami, Azure는 azure. 각 이미지 정의 블록에는 osinfo.name, osinfo.version, osinfo.arch가 포함됩니다. 여기서

      • osinfo.name은 OS 이름입니다. 예: ubuntu. 지원되는 OS 목록을 보려면 대상 운영 체제를 참조하십시오.
      • osinfo.version은 OS 버전입니다. 예: 20.04. 지원되는 버전 목록을 보려면 대상 운영 체제를 참조하십시오.
      • osinfo.arch는 OS 아치입니다. 지원되는 값은 amd64입니다.
    2. 새 OS 이미지에 대한 참조를 추가하려면 대상 인프라에 따라 ova, ami 또는 azure 아래에 이미지 정의 블록을 추가합니다. 이미지 정의 블록에는 위에 설명된 대로 osinfo.name, osinfo.version, osinfo.arch가 포함되어야 합니다. 또한 이미지 정의 블록을 추가할 때 다음을 수행합니다.

      • vSphere:

        • name:은 OS 버전을 포함하는 OVA의 고유한 이름입니다(예: my-ova-ubuntu-2004).
        • version:은 OVA를 생성할 때 metadata.json에서 할당된 고유한 VERSION입니다(예: v1.24.10+vmware.1-myorg.0).
        참고

        versionmetadata.json에 있는 동일한 VERSION과 정확히 일치해야 합니다.

      • AWS: 사용자 지정 이미지를 사용하려는 각 영역의 경우, 기존의 id 값 형식을 따르지만 끝에는 고유한 16진수 문자열을 사용합니다(예: ami-693a5e2348b25e428).

      BoM 파일이 영역 아래에 이미지를 정의하는 경우 사용자 지정 이미지 정의 블록이 해당 영역의 첫 번째에 나열되어야 합니다. 각 지역 내에서 클러스터 생성 프로세스는 나열된 첫 번째 적합한 이미지를 선택합니다.

    3. release.version 값에서 접미사를 추가하여 사용자 지정 버전을 설정합니다. 접두사를 추가하여 버전을 사용자 지정하지 마십시오. 예를 들어 v1.24.10+vmware.1-tkg.1v1.24.10+vmware.1-tkg.1-mycustomtkr로 변경합니다.

    4. 이전 단계에서 release.version에 지정한 것과 동일한 사용자 지정 접미사를 사용하여 BoM 파일을 저장합니다.

      파일 이름에 더하기(+) 문자가 포함된 경우 + 삼중 대시(---)로 바꿉니다.

      예를 들어 BOM 파일을 tkr-bom-v1.24.10---vmware.1-tkg.1-mycustomtkr.yaml로 저장합니다.

  2. base64 파일 내용을 이진 문자열로 인코딩합니다. 예:

    cat tkr-bom-v1.24.10---vmware.1-tkg.1-mycustomtkr.yaml | base64 -w 0
    
  3. 다음과 같이 값을 사용하여 ConfigMap YAML 파일을 생성합니다(예: configmap-v1.24.10---vmware.1-tkg.1-mycustomtkr.yaml).

    apiVersion: v1
    kind: ConfigMap
    metadata:
     name: CUSTOM-TKG-BOM
     labels:
       tanzuKubernetesRelease: CUSTOM-TKR
    binaryData:
     bomContent: "BOM-BINARY-CONTENT"
    

    형식 설명:

    • CUSTOM-TKG-BOMConfigMap 이름으로, BOM 파일에 지정한 TKr release.version 값을 포함하고 + 기호를 삼중 대시(—)로 바꿔야 합니다. 예를 들어 v1.24.10---vmware.1-tkg.1-mycustomtkr을 설정합니다.
    • CUSTOM-TKR은 TKr의 이름이며, CUSTOM-TKG-BOM에 지정한 값과 일치해야 합니다. 예: v1.24.10---vmware.1-tkg.1-mycustomtkr.
    • BOM-BINARY-CONTENT는 이전 단계에서 생성한 사용자 지정된 BoM 파일의 base64 인코딩 내용입니다.

    예:

    apiVersion: v1
    kind: ConfigMap
    metadata:
     name: v1.24.10---vmware.1-tkg.1-mycustomtkr
     labels:
       tanzuKubernetesRelease: v1.24.10---vmware.1-tkg.1-mycustomtkr
    binaryData:
     bomContent: "YXBpVmVyc2lvbjogcnVuLnRhbnp1...."
    
  4. ConfigMap 파일을 저장하고 kubectl 컨텍스트를 TKr에 추가하려는 관리 클러스터로 설정한 후 클러스터에 파일을 적용합니다. 예를 들면 다음과 같습니다.

    kubectl -n tkr-system apply -f configmap-v1.24.10---vmware.1-tkg.1-mycustomtkr.yaml
    

    TKr 컨트롤러는 TanzuKubernetesRelease를 생성하여 새 ConfigMap 개체를 조정합니다. 기본 조정 시간은 600초입니다. TKr 컨트롤러 포드를 삭제하여 이러한 지연을 방지할 수 있습니다. 이렇게 하면 포드가 즉시 복원 및 조정됩니다.

    1. tkr-system 네임스페이스에 포드를 나열합니다.

      kubectl get pod -n tkr-system
      
    2. tkr-controller-manager-f7bbb4bd4-d5lfd와 비슷한 TKr 컨트롤러 포드의 이름을 검색합니다.

    3. 포드를 삭제합니다.

      kubectl delete pod -n tkr-system TKG-CONTROLLER
      

      여기서 TKG-CONTROLLER는 TKr 컨트롤러 포드의 이름입니다.

  5. 사용자 지정 TKr이 추가되었는지 확인하려면 tanzu kubernetes-release get 또는 kubectl get tkr을 실행하거나 출력에서 위에 설정된 CUSTOM-TKR 값을 찾습니다.

사용자 지정 TKR이 kubectltanzu CLI에 의해 나열되면 아래 설명된 대로 관리 또는 워크로드 클러스터를 생성하는 데 사용할 수 있습니다.

관리 클러스터에 Linux 이미지 사용

사용자 지정 이미지를 노드의 기본 OS로 사용하는 관리 클러스터를 생성하려면 다음을 수행합니다.

  1. 이미지를 클라우드 제공자에 업로드합니다.

  2. 설치 관리자 인터페이스를 실행할 때 기본 OS 이미지 선택에 설명된 대로 OS 이미지(OS Image) 창에서 사용자 지정 이미지를 선택합니다.

자세한 내용은 기본 OS 이미지 선택 항목이 생성되는 방법을 참조하십시오.

워크로드 클러스터에 Linux 이미지 사용

Linux 이미지에서 워크로드 클러스터를 생성하는 절차는 위의 Linux 이미지용 TKr 생성에서 TKr을 생성했는지에 따라 다릅니다.

  • TKr을 생성한 경우 tanzu kubernetes-release get에 의해 나열된 TKr 이름을 tanzu cluster create--tkr 옵션에 전달합니다.

  • TKr을 생성하지 않은 경우 다음 단계를 수행합니다.

    1. 관리 복사하고 구성 파일 및 개체 규격 절차에 따라 새 이름으로 저장합니다.

    2. 새 구성 파일에서 다음을 추가하거나 수정합니다.

      VSPHERE_TEMPLATE: LINUX-IMAGE
      

      여기서 LINUX-IMAGE Linux 이미지 빌드에서 생성한 Linux 이미지의 이름입니다.

      CLUSTER_NAME 및 해당 설정(있는 경우)을 제거합니다.

    3. 워크로드 클러스터 생성에 설명된 대로 워크로드 클러스터를 배포합니다.

check-circle-line exclamation-circle-line close-line
Scroll to top icon