이 절차에서는 AWS, Azure 또는 vSphere에서 계획 기반 클러스터를 생성할 때 사용할 Linux 사용자 지정 시스템 이미지를 빌드하는 방법을 안내합니다. 아래 섹션으로 나뉘어 있습니다. Tanzu Kubernetes Grid의 클러스터 유형에 대한 자세한 내용은 워크로드 클러스터 유형을 참조하십시오.
Linux 사용자 지정 시스템 이미지를 구축하려면 다음이 필요합니다.
aws
CLI(명령줄 인터페이스)az
CLIAWS 및 Azure에서 인프라 CLI에 로그인합니다. 메시지가 표시된 지역을 인증하고 지정합니다.
aws configure
을 실행합니다.az login
을 실행합니다.Azure에서 구성 JSON 파일 azure-sig.json
을 생성하고 Azure 특정 정보를 입력합니다. 이러한 파일의 예는 여기에 있습니다.
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": ""
}
빌드할 Image Builder 구성 버전을 결정합니다.
TKG Image Builder
용 VMware {code} Sample Exchange를 검색하여 사용 가능한 버전을 표시합니다.TKG-Image-Builder-for-Kubernetes-v1.25.7-on-TKG-v2.2.0-master.zip
은 Tanzu Kubernetes Grid v2.2용 Kubernetes v1.25.7 이미지를 빌드합니다.아래 단계에서는 Tanzu Kubernetes Grid v2.2용 Kubernetes v1.25.7 이미지를 구축하는 방법을 설명합니다.
구성 코드 zip 파일을 다운로드하고 해당 내용의 압축을 풉니다.
cd
를 TKG-Image-Builder-
디렉토리로 이동하여 tkg.json
파일이 현재 디렉토리에 있도록 합니다.
워크스테이션이 VMware 이미지 레지스트리 projects.registry.vmware.com
에 액세스할 수 있는지 확인합니다.
projects.registry.vmware.com
에서 원하는 아티팩트 컨테이너를 다운로드하고 실행합니다.
docker pull projects.registry.vmware.com/tkg/linux-resource-bundle:v1.25.7_vmware.1-tkg.1
docker run -d -p 3000:3000 projects.registry.vmware.com/tkg/linux-resource-bundle:v1.25.7_vmware.1-tkg.1
tkg.json
을 편집하여 <IP>
및 <PORT>
를 채웁니다. 여기서
IP
는 Docker 컨테이너를 실행하는 시스템의 IP입니다.PORT
는 Docker 호스트의 사용되지 않은 포트를 컨테이너의 포트 3000(예: 3001:3000
)과 연결합니다. 컨테이너는 포트 3000을 통해 아티팩트를 노출합니다.Photon-3 OVA를 구축하는 경우 tkg.json
의 "extra_rpms"
를 편집하여 지원되는 추가 사용자 지정 패키지를 반영합니다.
"extra_rpms": "sysstat nfs-utils ethtool apparmor-parser"
FIPS 지원 이미지를 구축하려면 tkg.json
에서 다음 줄을 제거합니다.
"ansible_user_vars": "install_fips=no"
인터넷 제한: 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"
}
GPU 지원 클러스터: vSphere용 GPU 지원 클러스터 이미지를 빌드하려면 이름이 customizations.json
인 파일을 생성하고 다음을 추가합니다.
{
"vmx_version": "17"
}
이전 단계에서 편집한 customizations.json
을 tkg.json
으로 동일한 디렉토리에 저장합니다.
다음 단계에서 다음 매개 변수 문자열을 수집하여 명령에 연결합니다. 이 중 대부분은 현재 작동하는 디렉토리를 현재 작업 디렉토리를 이미지를 빌드하는 데 사용되는 컨테이너의 /home/imagebuilder
디렉토리로 복하는 docker run -v
매개 변수를 지정합니다.
AUTHENTICATION
: 로컬 CLI 디렉토리를 복사합니다.
~/.aws:/home/imagebuilder/.aws
사용~/.azure:/home/imagebuilder/.azure
사용/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
사용tkg.json
파일을 편집하여 이스케이프된 따옴표(\"
)로 custom_role_names
설정을 다시 포맷하여 여러 역할이 포함된 목록으로 만듭니다. 예: "custom_role_names": "\"/home/imagebuilder/tkg /home/imagebuilder/mycustomrole\"",
TESTS
: 이미지의 대상 인프라, OS, Kubernetes 버전용으로 설계된 goss
테스트 디렉토리를 복사합니다.
goss
디렉토리에 있는 파일의 파일 이름을 사용합니다(예: amazon-ubuntu-1.25.7+vmware.1-goss-spec.yaml
).CUSTOMIZATIONS
: 사용자 지정 파일을 JSON 형식으로 복사합니다. Image Builder 설명서에서 사용자 지정을 참조하십시오. 수정하기 전에 VMware CRE(Customer Reliability Engineering)에게 모범 사례 및 권장 사항을 문의합니다.PACKER_VAR_FILES
: Packer용 변수를 포함하는 위의 JSON 파일의 공백으로 구분된 목록.AZURE-CREDS
: Image Builder 설명서에 설명된 대로 Azure 자격 증명 파일의 경로.COMMAND
: 사용자 지정 이미지 OS를 기반으로 다음 중 하나와 같은 명령을 사용합니다. vSphere 및 Azure 이미지의 경우 명령은 build-node-ova-
및 build-azure-sig-
로 시작합니다.
build-ami-ubuntu-2004
: Ubuntu v20.04build-ami-ubuntu-1804
: Ubuntu v18.04build-ami-amazon-2
: Amazon Linux 2build-node-ova-vsphere-ubuntu-2004
: GPU 지원 클러스터위의 문자열을 사용하여 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.3 \
COMMAND
참고Azure용 이미지를 빌드하지 않는 경우
env-file
을 생략합니다. 이 명령은 완료하는 데 몇 분 정도 소요될 수 있습니다.
예를 들어 Ubuntu v20.04 및 Kubernetes v1.25.7이 포함된 사용자 지정 이미지를 생성하여 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.25.7+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.3 \
build-ami-ubuntu-2004
vSphere 경우 위에서 생성한 사용자 지정 컨테이너 이미지를 사용해야 합니다. 또한 이후 단계에서 사용자 지정 TKr에서 전달하는 문자열과 일치하는 버전 문자열을 설정해야 합니다. VMware 게시된 OVA에는 v1.25.7+vmware.1-tkg.1
과 같은 버전 문자열이 있지만 -tkg.1
은 조직에 의미 있는 문자열로 바꾸는 것이 좋습니다. 이 버전 문자열을 설정하려면 다음과 같이 metadata.json
파일에서 정의합니다.
{
"VERSION": "v1.25.7+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.25.7+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.3 \
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.25.7+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.3 \
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_USER
및 RHSM_PASS
는 Red Hat 구독 관리자 계정의 사용자 이름과 암호입니다.$(pwd)/isos/rhel-8.4-x86-64-dvd.iso
에서 로컬 RHEL ISO 경로를 추가 볼륨으로 매핑합니다.Linux 이미지를 향후 Kubernetes 버전의 기본값으로 설정하려면 이를 기반으로 TKr을 생성합니다. 그렇지 않으면 아래의 워크로드 클러스터에 Linux 이미지 사용으로 건너뜁니다.
아래 다이어그램에서는 vSphere에서 사용자 지정 Linux 이미지에 대한 TKr을 생성하는 방법에 대한 개괄적인 개요입니다.
TKr을 생성하는 방법:
~/.config/tanzu/tkg/bom/
디렉토리에서 사용자 지정 이미지의 Kubernetes 버전에 해당하는 TKr BoM을 엽니다. 예를 들어, Kubernetes v1.25.7용 tkr-bom-v1.25.7+vmware.1-tkg.1.yaml
과 같은 파일 이름이 있습니다.
필요한 TKr BoM 파일이 디렉토리에 없는 경우 비-기본 Kubernetes 버전으로 클러스터 배포에 설명된 대로 원하는 Kubernetes 버전으로 클러스터를 배포하여 가져올 수 있습니다.
BoM 파일에서 해당 인프라의 이미지 정의 블록을 찾습니다. vSphere는 ova
, AWS는 ami
, Azure는 azure
. 각 이미지 정의 블록에는 osinfo.name
, osinfo.version
, osinfo.arch
가 포함됩니다. 여기서
새 OS 이미지에 대한 참조를 추가하려면 대상 인프라에 따라 ova
, ami
또는 azure
아래에 이미지 정의 블록을 추가합니다. 이미지 정의 블록에는 위에 설명된 대로 osinfo.name
, osinfo.version
, osinfo.arch
가 포함되어야 합니다. 또한 이미지 정의 블록을 추가할 때 다음을 수행합니다.
vSphere:
name:
은 OS 버전을 포함하는 OVA의 고유한 이름입니다(예: my-ova-ubuntu-2004
).version:
은 OVA를 생성할 때 metadata.json
에서 할당된 고유한 VERSION
입니다(예: v1.25.7+vmware.1-myorg.0
).참고
version
은metadata.json
에 있는 동일한VERSION
과 정확히 일치해야 합니다.
id
값 형식을 따르지만 끝에는 고유한 16진수 문자열을 사용합니다(예: ami-693a5e2348b25e428
).BoM 파일이 영역 아래에 이미지를 정의하는 경우 사용자 지정 이미지 정의 블록이 해당 영역의 첫 번째에 나열되어야 합니다. 각 지역 내에서 클러스터 생성 프로세스는 나열된 첫 번째 적합한 이미지를 선택합니다.
release.version
값에서 접미사를 추가하여 사용자 지정 버전을 설정합니다. 접두사를 추가하여 버전을 사용자 지정하지 마십시오. 예를 들어 v1.25.7+vmware.1-tkg.1
을 v1.25.7+vmware.1-tkg.1-mycustomtkr
로 변경합니다.
이전 단계에서 release.version
에 지정한 것과 동일한 사용자 지정 접미사를 사용하여 BoM 파일을 저장합니다.
파일 이름에 더하기(+
) 문자가 포함된 경우 +
삼중 대시(---
)로 바꿉니다.
예를 들어 BOM 파일을 tkr-bom-v1.25.7---vmware.1-tkg.1-mycustomtkr.yaml
로 저장합니다.
base64
파일 내용을 이진 문자열로 인코딩합니다. 예:
cat tkr-bom-v1.25.7---vmware.1-tkg.1-mycustomtkr.yaml | base64 -w 0
다음과 같이 값을 사용하여 ConfigMap YAML 파일을 생성합니다(예: configmap-v1.25.7---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-BOM
은 ConfigMap
이름으로, BOM 파일에 지정한 TKr release.version
값을 포함하고 + 기호를 삼중 대시(—)로 바꿔야 합니다. 예를 들어 v1.25.7---vmware.1-tkg.1-mycustomtkr
을 설정합니다.CUSTOM-TKR
은 TKr의 이름이며, CUSTOM-TKG-BOM
에 지정한 값과 일치해야 합니다. 예: v1.25.7---vmware.1-tkg.1-mycustomtkr
.BOM-BINARY-CONTENT
는 이전 단계에서 생성한 사용자 지정된 BoM 파일의 base64
인코딩 내용입니다.예:
apiVersion: v1
kind: ConfigMap
metadata:
name: v1.25.7---vmware.1-tkg.1-mycustomtkr
labels:
tanzuKubernetesRelease: v1.25.7---vmware.1-tkg.1-mycustomtkr
binaryData:
bomContent: "YXBpVmVyc2lvbjogcnVuLnRhbnp1...."
ConfigMap
파일을 저장하고 kubectl
컨텍스트를 TKr에 추가하려는 관리 클러스터로 설정한 후 클러스터에 파일을 적용합니다. 예를 들면 다음과 같습니다.
kubectl -n tkr-system apply -f configmap-v1.25.7---vmware.1-tkg.1-mycustomtkr.yaml
TKr 컨트롤러는 TanzuKubernetesRelease
를 생성하여 새 ConfigMap
개체를 조정합니다. 기본 조정 시간은 600초입니다. TKr 컨트롤러 포드를 삭제하여 이러한 지연을 방지할 수 있습니다. 이렇게 하면 포드가 즉시 복원 및 조정됩니다.
tkr-system
네임스페이스에 포드를 나열합니다.
kubectl get pod -n tkr-system
tkr-controller-manager-f7bbb4bd4-d5lfd
와 비슷한 TKr 컨트롤러 포드의 이름을 검색합니다.
포드를 삭제합니다.
kubectl delete pod -n tkr-system TKG-CONTROLLER
여기서 TKG-CONTROLLER
는 TKr 컨트롤러 포드의 이름입니다.
사용자 지정 TKr이 추가되었는지 확인하려면 tanzu kubernetes-release get
또는 kubectl get tkr
을 실행하거나 출력에서 위에 설정된 CUSTOM-TKR
값을 찾습니다.
사용자 지정 TKR이 kubectl
및 tanzu
CLI에 의해 나열되면 아래 설명된 대로 관리 또는 워크로드 클러스터를 생성하는 데 사용할 수 있습니다.
사용자 지정 이미지를 노드의 기본 OS로 사용하는 관리 클러스터를 생성하려면 다음을 수행합니다.
이미지를 클라우드 제공자에 업로드합니다.
설치 관리자 인터페이스를 실행할 때 기본 OS 이미지 선택에 설명된 대로 OS 이미지(OS Image) 창에서 사용자 지정 이미지를 선택합니다.
자세한 내용은 기본 OS 이미지 선택 항목이 생성되는 방법을 참조하십시오.
Linux 이미지에서 워크로드 클러스터를 생성하는 절차는 위의 Linux 이미지용 TKr 생성에서 TKr을 생성했는지에 따라 다릅니다.
TKr을 생성한 경우 tanzu kubernetes-release get
에 의해 나열된 TKr 이름을 tanzu cluster create
의 --tkr
옵션에 전달합니다.
TKr을 생성하지 않은 경우 다음 단계를 수행합니다.
관리 복사하고 구성 파일 및 개체 규격 절차에 따라 새 이름으로 저장합니다.
새 구성 파일에서 다음을 추가하거나 수정합니다.
VSPHERE_TEMPLATE: LINUX-IMAGE
여기서 LINUX-IMAGE
는 Linux 이미지 빌드에서 생성한 Linux 이미지의 이름입니다.
CLUSTER_NAME
및 해당 설정(있는 경우)을 제거합니다.
워크로드 클러스터 생성에 설명된 대로 워크로드 클러스터를 배포합니다.