Cluster v1beta1 API를 사용하면 기본 ClusterClass 정의를 기반으로 클러스터를 프로비저닝할 수 있습니다.

ClusterClass API v1beta1

Kubernetes Cluster API는 Kubernetes 클러스터의 선언적 프로비저닝, 업그레이드 및 운영을 제공하는 도구 모음입니다. ClusterClass는 Cluster API가 발전된 것이며 이를 통해 클러스터 집합의 수명 주기를 관리하기 위한 템플릿을 정의할 수 있습니다. TKG 서비스는 v1beta1 API를 사용하여 ClusterClass를 지원합니다.

TKG 서비스에는 tanzukubernetescluster라는 기본 ClusterClass 정의가 함께 제공됩니다. tanzukubernetescluster ClusterClass는 v1beta API를 사용하여 클러스터 생성을 위한 템플릿을 제공합니다. tanzukubernetescluster ClusterClass는 모든 사용자 네임스페이스에서 사용할 수 있습니다. 이 ClusterClass를 기반으로 클러스터를 생성하려면 클러스터 규격에서 참조하십시오. 지침은 v1beta 예시를 참조하십시오.

기본 ClusterClass tanzukubernetescluster

기본 tanzukubernetescluster ClusterClass는 변경할 수 없습니다. TKG 서비스의 각 릴리스에서 업데이트될 수 있습니다.

TKG 서비스 인스턴스와 함께 제공되는 기본 tanzukubernetescluster ClusterClass를 보려면 다음 단계를 완료합니다.

  1. 감독자에 로그인합니다.
    kubectl vsphere login --server=IP-or-FQDN --vsphere-username [email protected]
  2. 컨텍스트를 TKGS 클러스터가 프로비저닝된 vSphere 네임스페이스로 전환합니다.
    kubeclt config use-context VSPEHRE-NS
  3. 기본 tanzukubernetescluster ClusterClass를 가져옵니다.
    kubectl get clusterclass tanzukubernetescluster -o yaml
  4. 필요한 경우 기본 ClusterClass의 출력을 이름이 tkc-dcc.yaml인 파일에 쓸 수 있습니다.
    kubectl get clusterclass tanzukubernetescluster -o yaml > tkc-dcc.yaml

클러스터 사용자 지정을 위한 ClusterClass 변수

변수를 사용하여 tanzukubernetescluster ClusterClass를 기반으로 클러스터를 사용자 지정합니다. 변수는 이름-값 쌍을 사용하여 정의됩니다. 구문은 openAPIV3Schema를 준수해야 합니다.

v1beta1 API를 사용하여 클러스터를 프로비저닝하려면 두 가지 변수가 필요합니다.
  • VM 클래스
  • 스토리지 클래스
클러스터를 사용자 정의하기 위해 다음과 같은 추가 변수를 사용할 수 있습니다.
  • 프록시
  • TLS 인증서
  • SSH 키

다음 섹션은 기본 tanzukubernetescluster ClusterClass에서 사용할 수 있는 모든 변수의 목록입니다.

중요: 유효한 키 이름은 영숫자, 대시(예: key-name), 밑줄(예: KEY_NAME) 또는 점(예: key.name)으로만 구성되어야 합니다. 키 이름에는 공백을 사용할 수 없습니다.

clusterEncryptionConfigYaml

clusterEncryptionConfigYaml 변수를 사용하여 클러스터 암호화를 구성합니다.

clusterEncryptionConfigYaml
암호화 구성 세부 정보를 제공하는 YAML 파일인 문자열입니다.
kube-apiserver 암호화 구성 패키지를 사용하여 etcd 데이터베이스의 데이터 암호화를 구성할 수 있습니다. Kubernetes 설명서에서 Encrypting Secret Data at Rest를 참조하십시오.
...
    variables:
    #clusterEncryptionConfigYaml specifies the base64 encoded 
    #EncryptionConfiguration YAML
    #the YAML contains a base64 encryption configuration for the cluster identity
    #the key is generated randomly
    - name: clusterEncryptionConfigYaml
      value: string which is name of the EncryptionConfiguration YAML 

controlPlaneCertificateRotation

controlPlaneCertificateRotation 변수를 사용하여 TLS 인증서가 만료되기 전에 이러한 인증서의 롤아웃을 트리거하여 제어부 노드에 대한 TLS 인증서를 순환하도록 시스템을 구성합니다. 모든 새 제어부 노드와 기존 제어부 노드에 대해 제어부 인증서 순환이 가능합니다.
controlPlaneCertificateRotation
기능 활성화를 위한 부울 및 인증서 순환을 위한 만료 전 일 수입니다. 자세한 내용은 Kubeadm 제어부 제공자를 사용하여 자동으로 인증서 순환을 참조하십시오.
...
    variables:
    - name: controlPlaneCertificateRotation
      value: 
        activate: true
        daysBefore: 90

형식 설명:

  • activate는 기능을 활성화하기 위한 부울입니다. 기본값은 true입니다.
  • daysBefore는 만료되기 전의 기간(일 수)입니다. 기본값은 90일입니다. 최소값은 만료 7일 전입니다.
참고: 이 변수는 vSphere 8 업데이트 3( TKG 서비스 3.0)에 대해 업데이트되었습니다.

controlPlaneVolumes

controlPlaneVolumes 변수를 사용하여 제어부 노드에 대한 영구 볼륨을 구성합니다.
controlPlaneVolumes
개체의 선택적 어레이이며, 여기에는 name, storageClassmountPath(각각 문자열임)와 storage 문자열을 포함하는 선택적 capacity 개체가 포함됩니다.
...
    variables:
      #controlPlaneVolumes is an optional set of PVCs to create and
      #attach to each node
      - name: controlPlaneVolumes
        value:
          #name of the PVC to be used as the suffix (node.name)
          - name: NAME
            #mountPath is the directory where the volume device is mounted
            #takes the form /dir/path
            mountPath: /dir/path
            #storageClass is the storage class to use for the PVC
            storageClass: tkgs-storage-profile
            #capacity is the PVC storage capacity
            capacity:
              #storage sets the capacity for the disk volume
              #if not specified defaults to storageClass capacity
              storage: 4Gi           

defaultRegistrySecret

defaultRegistrySecret 변수는 클러스터에 대한 기본 컨테이너 레지스트리를 구성합니다.
참고: 이 변수는 내장된 Harbor 레지스트리에서 사용하도록 예약되어 있습니다.
defaultRegistrySecret
기본 컨테이너 레지스트리에 대한 공용 키, 인증서 이름 및 네임스페이스가 포함된 개체입니다.
감독자에서 내장된 Harbor 레지스트리를 사용하도록 설정하면 defaultRegistrySecret 변수는 클러스터가 신뢰하는 레지스트리 서비스 인증서를 지정합니다. 인증서 암호에는 managed-by: vmware-vRegistry라는 레이블이 지정됩니다. 클러스터 생성 시 defaultRegistry 인증서가 defaultRegistrySecret 변수에 삽입됩니다. 클러스터를 생성한 후 변수를 수동으로 업데이트하여 인증서 순환 또는 업데이트를 관리합니다.
...
    variables:
    - name: defaultRegistrySecret
      value:
        #data holds the base64 encoded data.ca\.crt content
        #data.ca\.crt is already encoded, so raw cert data is encoded twice
        data: LS0tLS1CRUdJTiBDRVJU...S0tRU5EIENFUlRJRklDQVRFL
        #name specifies the name of the registry cert secret 
        name: harbor-ca-key-pair
        #namespace specifies the ns of the registry cert secret
        namespace: svc-harbor-domain-c9

defaultStorageClass

defaultStorageClass 변수를 사용하여 클러스터에 대한 기본 스토리지 클래스를 구성합니다.

defaultStorageClass
기본 스토리지 클래스로 사용할 스토리지 클래스를 식별하는 문자열이며 Helm 차트 및 Tanzu 패키지와 같은 특정 애플리케이션에서 종종 필요합니다.
...
    variables:
    - name: defaultStorageClass
      value: tkg2-storage-profile

extensionCert

extensionCert 변수를 사용하여 TLS 인증서를 구성합니다.

extensionCert
namekey 문자열을 포함하는 contentSecret 개체를 포함하는 개체입니다. contentSecret은 TLS 인증서에 대해 생성된 Kubernetes 암호 개체를 참조합니다.
...
    variables:
    #extensionCert specifies the cert and key for Extensions Controller
    #self-signed issuer and certificates must be created in advance
    - name: extensionCert
      value: 
        contentSecret:
          #name specifies the name of secret
          name: string
          #key specifies the content of tls\.crt in the secret's data map
          key: string

kubeAPIServerFQDNs

kubeAPIServerFQDNs 변수를 사용하여 FQDN으로 클러스터를 구성합니다.

kubeAPIServerFQDNs
하나 이상의 FQDN(정규화된 도메인 이름) 어레이입니다.
생성된 Kubernetes API 인증서에는 kubeAPIServerFQDNs 변수에 지정한 각 FQDN이 포함됩니다. 시스템에서 kubeconfig를 목록의 첫 번째 FQDN으로 채우고 확인 가능한 것으로 가정합니다. 목록에서 다른 FQDN을 사용하려면 변수 목록에서 원하는 FQDN을 사용하여 생성된 kubeconfig 파일을 수동으로 편집할 수 있습니다.
자세한 내용은 v1beta1 예: FQDN이 있는 클러스터 항목을 참조하십시오.

nodePoolLabels

nodePoolLabels 변수를 사용하여 작업자 노드에 대한 레이블을 구성합니다.

nodePoolLabels
하나 이상의 개체 어레이이며, 각 개체에는 키/값(둘 다 문자열) 쌍이 포함됩니다.
레이블을 사용하여 요구 사항에 따라 시스템 개체를 구성하면 쉽게 쿼리하고 보고할 수 있습니다. 사용 세부 정보는 Kubernetes 레이블 설명서를 참조하십시오.

nodePoolTaints

nodePoolTaints 변수를 사용하여 작업자 노드에 taint를 적용합니다.

nodePoolTaints
개체 어레이이며, 각 개체에는 작업자 노드에 적용되는 taint가 포함됩니다.
각 taint 개체에는 key(문자열), value(문자열) 및 effect(문자열)가 포함됩니다. 시스템은 생성 또는 업데이트 시 timeAdded 필드를 채웁니다.

nodePoolVolumes

nodePoolVolumes 변수를 사용하여 클러스터 노드에 대한 영구 볼륨을 지정합니다.

nodePoolVolumes
개체의 선택적 어레이이며, 여기에는 name, storageClassmountPath(각각 문자열임)와 storage 문자열을 포함하는 선택적 capacity 개체가 포함됩니다.
...
    variables:
      #nodePoolVolumes is an optional set of PVCs to create and
      #attach to each node; use for high-churn components like containerd
      - name: nodePoolVolumes
        value: |
          #name of the PVC to be used as the suffix (node.name)
          - name: etcd
            #mountPath is the directory where the volume device is mounted
            #takes the form /dir/path
            mountPath: /var/lib/containerd
            #storageClass is the storage class to use for the PVC
            storageClass: tkgs-storage-profile
            #capacity is the PVC storage capacity
            capacity:
              #storage sets the capacity for the disk volume
              #if not specified defaults to storageClass capacity
              storage: 4Gi           

ntp

ntp 변수를 사용하여 클러스터에 대한 NTP 서버를 구성합니다.

ntp
NTP 서버의 FQDN 또는 IP 주소인 문자열입니다.
NTP 변수는 예에 표시된 것처럼 NTP 서버의 도메인 이름을 지정합니다. NTP 서버는 클러스터 생성 시 클러스터 변수에 주입됩니다. 클러스터를 생성한 후 클러스터 변수를 수동으로 업데이트하여 서버 이름 순환 또는 업데이트를 관리합니다.
...
    variables:
    - name: ntp
      value: time1.vmware.com

podSecurityStandard

클러스터 전체 포드 보안을 구성하려면 podSecurityStandard 변수를 사용합니다.
참고: 이 변수는 vSphere 8 업데이트 3( TKG 서비스 3.0)의 새로운 변수입니다.
podSecurityStandard

TKr v1.26 이상에서는 기본적으로 포드 보안(PSA) 제한이 주석 레이블을 사용하여 네임스페이스 수준에서 적용됩니다. TKR 1.25 이상에 대한 PSA 구성의 내용을 참조하십시오.

또는 v1beta1 클러스터를 프로비저닝하거나 업데이트할 때 podSecurityStandard 변수를 사용하여 클러스터 전체 PSA를 구성할 수 있습니다.

podSecurityStandard 변수는 다음과 같이 구현할 수 있습니다.

...
variables:
- name: podSecurityStandard
  value: 
    deactivated: DEACTIVATED
    audit: AUDIT-PROFILE
    enforce: ENFORCE-PROFILE
    warn: WARN-PROFILE
    auditVersion: AUDIT-VERSION
    enforceVersion: ENFORCE-VERSION
    warnVersion: WARN-VERSION
    exemptions: 
      namespaces: [EXEMPT-NS]
형식 설명:
  • 클러스터 전체 PSA를 적용하려면 DEACTIVATED 값이 false(기본값)이고 그렇지 않으면 true입니다.
  • *-PROFILE 값은 각 모드에 대한 PSA 프로파일이며, "privileged", "baseline" 또는 "restricted"(기본값)일 수 있습니다.
  • *-VERSION 값은 각 모드의 Kubernetes 버전(예: "v1.26")입니다. "latest" 값이 기본값입니다.
  • EXEMPT-NS 값은 PSA 제어에서 제외할 네임스페이스의 쉼표로 구분된 목록입니다.
참고: kube-system, tkg-system 및 vmware-system-cloud-provider를 포함한 시스템 네임스페이스는 포드 보안에서 제외됩니다.

podSecurityStandard 변수를 구현하지 않으면 기본 PSA 동작이 유지됩니다. 클러스터 규격에 podSecurityStandard 변수를 포함하면 재정의하지 않는 한 변수 설정이 기본값을 포함하여 제어됩니다.

다음 예에서는 기본값을 보여줍니다.
...
    variables:
      - name: podSecurityStandard
        value:
          enforce: "restricted"
          enforce-version: "latest"
다음 예에서는 현재 포드 강화 모범 사례를 따르지 않지만 알려진 권한 에스컬레이션을 방지하는 최소한의 제한 정책("baseline")만 적용하는 워크로드를 식별하기 위한 감사 로그 및 주의를 제공합니다.
...
    variables:
      - name: podSecurityStandard
        value:
          audit: "restricted"
          warn: "restricted"
          enforce: "baseline"
다음 예에서는 특정 네임스페이스를 제외하고 제한된 정책을 적용합니다.
...
    variables:
      - name: podSecurityStandard
        value:
          audit: "restricted"
          warn: "restricted"
          enforce: "restricted"
          exemptions:
            namesaces: ["privileged-workload-ns"]
다음 예에서는 적용을 특정 TKr 버전으로 제한합니다.
...
variables:
  - name: podSecurityStandard
    value: 
      audit-version: "v1.26"
      warn-version: "v1.26"
      enforce-version: "v1.26"

더 많은 예를 보려면 Kubernetes 설명서에서 포드 보안 표준을 참조하십시오.

proxy

proxy 변수를 사용하여 클러스터에 대한 프록시 서버를 구성합니다.

proxy
아웃바운드 클러스터 연결을 위해 프록시 서버를 참조하는 매개 변수가 있는 개체입니다.
필수 proxy 매개 변수는 httpProxy, httpsProxy, noProxy입니다. 클러스터 정의에 proxy 변수를 포함하는 경우 세 필드가 모두 필요합니다.
httpProxyhttpsProxy 필드에는 TKG 클러스터에서 아웃바운드 HTTP 및 HTTPS 연결을 관리하도록 구성된 프록시 서버의 URI를 참조하는 문자열 값이 사용됩니다. HTTP를 사용하여 프록시 서버에 연결할 수 있습니다. HTTPS 연결은 지원되지 않습니다.
noProxy 필드는 문자열 어레이입니다. noProxy 값은 감독자 워크로드 네트워크에서 가져옵니다. noProxy 필드에 네임스페이스 네트워크, 수신 및 송신 서브넷을 포함해야 합니다.
noProxy 필드에 서비스 서브넷을 포함할 필요가 없습니다. TKG 클러스터는 이 서브넷과 상호 작용하지 않습니다.
clusterNetwork.services.cidrBlocksclusterNetwork.pods.cidrBlocksnoProxy 필드에 포함할 필요가 없습니다. 이러한 끝점은 자동으로 프록시로 지정되지 않습니다.
localhost 및 127.0.0.1noProxy 필드에 포함할 필요가 없습니다. 이러한 끝점은 자동으로 프록시로 지정되지 않습니다.
...
    variables:
    #proxy specifies a proxy server to be used for the cluster
    #if omitted no proxy is configured
    - name: proxy
      value:
        #httpProxy is the proxy URI for HTTP connections
        #to endpoints outside the cluster
        httpProxy: http://<user>:<pwd>@<ip>:<port>
        #httpsProxy is the proxy URL for HTTPS connections 
        #to endpoints outside the cluster
        httpsProxy: http://<user>:<pwd>@<ip>:<port>
        #noProxy is the list of destination domain names, domains, 
        #IP addresses, and other network CIDRs to exclude from proxying
        #must include Supervisor Pod, Egress, Ingress CIDRs
        noProxy: [array of strings, comma-separated]

storageClass

storageClass 변수를 사용하여 클러스터에 대한 스토리지 클래스를 구성합니다.

storageClass
TKG 클러스터가 프로비저닝된 vSphere 네임스페이스에 할당된 vSphere 스토리지 프로파일의 이름인 문자열입니다.
...
    variables:
    - name: storageClass
      value: tkgs-storage-profile 
다음 명령을 사용하여 사용 가능한 스토리지 클래스를 나열합니다.
kubectl describe namespace VSPHERE-NAMESPACE-NAME
또는 vSphere 관리자 권한이 있는 경우 다음 명령을 사용합니다.
kubectl describe storageclasses

storageClasses

storageClasses 변수를 사용하여 클러스터에 대한 스토리지 클래스 어레이를 구성합니다.

storageClasses
하나 이상의 문자열 어레이이며,각 문자열은 TKG 클러스터가 프로비저닝된 vSphere 네임스페이스에 할당된 vSphere 스토리지 프로파일의 이름입니다.
...
    variables:
    - name: storageClasses
      value: [tkg2-storage-profile, tkg2-storage-profile-latebinding] 
다음 명령을 사용하여 사용 가능한 스토리지 클래스를 나열합니다.
kubectl describe namespace VSPHERE-NAMESPACE-NAME
또는 vSphere 관리자 권한이 있는 경우 다음 명령을 사용합니다.
kubectl describe storageclasses

TKR_DATA

TKR_DATA 변수를 사용하여 TKR 정보를 지정합니다.

TKR_DATA
TKR 버전 및 기타 세부 정보를 지정하는 데 사용하는 개체입니다.
version은 클러스터 노드에서 사용할 TKR NAME 형식의 문자열입니다.
legacy-tkr 레이블이 없는 TKR만 vSphere 9 감독자의 TKG와 호환됩니다. TKG 서비스 클러스터에서 Kubernetes 릴리스 사용의 내용을 참조하십시오.
기본 운영 체제는 PhotonOS입니다. 주석을 사용하여 Ubuntu TKR을 지정합니다.

trust

trust 변수를 사용하여 클러스터에 대해 하나 이상의 신뢰할 수 있는 CA 인증서를 지정합니다.

trust
클러스터에 TLS 인증서(추가 CA 또는 최종 인증서)를 추가하기 위한 개체입니다.
값은 문자열 어레이를 포함하는 additionalTrustedCAs입니다. 예:
#trust-example
    variables:
      - name: trust
        value:
          additionalTrustedCAs:
          - name: additional-ca-1
          - name: additional-ca-2
          - name: additional-ca-N
각 문자열의 값은 이중 base64로 인코딩된 PEM 형식의 CA 인증서가 포함된 Kubernetes 암호의 데이터 맵 필드에 대한 사용자 정의 이름입니다. 예:
#secret-example
apiVersion: v1
data:
  additional-ca-1: TFMwdExTMUNSGlSzZ3Jaa...VVNVWkpRMEMwdExTMHRDZz09
kind: Secret
metadata:
  name: cluster01-user-trusted-ca-secret
  namespace: tkgs-cluster-ns
type: Opaque
신뢰 변수의 일반적인 사용 사례는 v1beta1 클러스터를 개인 컨테이너 레지스트리와 통합하는 것입니다. TKG 서비스 클러스터를 개인 컨테이너 레지스트리와 통합의 내용을 참조하십시오.

user

user 변수를 사용하여 클러스터 사용자 자격 증명을 지정합니다.

user
이름 및 키 문자열과 sshAuthorizedKey 문자열이 있는 passwordSecret 개체를 포함하는 개체입니다. 이 변수를 사용하여 원격 SSH 액세스를 위해 사용자의 SSH 키를 클러스터 노드에 추가할 수 있습니다.
사용자 변수는 암호 및 인증 키를 포함한 SSH 로그인 자격 증명을 지정합니다. 기본적으로 사용자 이름은 vmware-system-user입니다. 암호를 해시하고 클러스터가 프로비저닝된 동일한 네임스페이스의 암호에 저장해야 합니다. passwordSecret 개체는 이 암호를 참조합니다. 예를 들어 Linux에서는 mkpasswd --method=SHA-512 --rounds=4096을 사용하여 안전한 해시를 생성할 수 있습니다. 자세한 내용은 사용자 및 그룹 포함을 참조하십시오.
...
    variables:
    #user specifies an authorized user and credentials
    - name: user
      value:
        #passwordSecret is an object that contains a Kubernetes secret and key
        passwordSecret:
          #name specifies the secret name
          name: string
          #key specifies the key value pair in the secret's data map
          key: string
        sshAuthorizedKey: string that is the base64-encoded public key

vmClass

vmClass 변수를 사용하여 클러스터 노드에 대한 VM 클래스를 구성합니다.

vmClass
TKG 클러스터가 프로비저닝된 vSphere 네임스페이스에 바인딩된 VM 클래스의 이름에 매핑되는 필수 문자열입니다.
vmClass는 클러스터 노드에 사용할 가상 하드웨어 설정을 설명하는 VirtualMachineClass의 이름입니다. VirtualMachineClass는 노드에서 사용할 수 있는 CPU 및 메모리와 해당 리소스에 대한 요청 및 제한을 제어합니다. TKG 서비스 클러스터에서 VM 클래스 사용의 내용을 참조하십시오.
TKG 서비스 클러스터가 프로비저닝되는 vSphere 네임스페이스와 연결된 VM 클래스만 사용할 수 있습니다. kubectl get virtualmachineclass 명령을 사용하여 바인딩된 클래스를 나열합니다.
서로 다른 범위에서 vmClass 변수를 정의하여 제어부 노드 및 노드 풀 작업자 노드에 대해 서로 다른 VM 클래스를 사용할 수 있습니다.
예를 들어, 여기에서 인라인 vmClass 변수는 이 특정 machineDeployment 토폴로지에 대한 기본 vmClass 변수를 overrides합니다.
...
    workers:
      machineDeployments:
      - class: tkg-worker
        name: compute
        replicas: 3
        variables:
          overrides:
          - name: vmClass
            value: guaranteed-large