Skip to main content
NetApp container solutions
본 한국어 번역은 사용자 편의를 위해 제공되는 기계 번역입니다. 영어 버전과 한국어 버전이 서로 어긋나는 경우에는 언제나 영어 버전이 우선합니다.

VKS 클러스터에 NetApp Trident 설치

기여자 banum-netapp

NetApp ONTAP 스토리지를 Kubernetes 워크로드와 통합하려면 vSphere Kubernetes Service 클러스터에 NetApp Trident를 동적 스토리지 프로비저너로 설치하십시오.

시작하기 전에
  • ONTAP 클러스터가 구성되어 VMware Kubernetes 환경에 연결되었는지 확인하십시오.

  • 워크로드가 스토리지에 iSCSI 또는 NVMe 툴을 사용할 경우 VKS 클러스터에 해당 툴이 설치되어 있는지 확인하십시오.

  • kubeconfig 파일을 사용하여 VKS 클러스터에 연결할 수 있는 컴퓨터에 `kubectl`이(가) 설치되어 있는지 확인하십시오.

    리소스 탭에서 kubeconfig 다운로드
단계
  1. Trident 설명서의 지침에 따라 Helm 차트를 사용하여 Trident Operator를 설치하십시오.

    예제 표시
    helm install trident netapp-trident/trident-operator --version 100.2606.0 --create-namespace --namespace trident --kubeconfig=/path/to/your-kubeconfig-file

    디버그 로깅을 활성화하려면 다음을 추가하십시오 --set tridentDebug=true:

    helm install trident netapp-trident/trident-operator --version 100.2606.0 --create-namespace --namespace trident --set tridentDebug=true --kubeconfig=/path/to/your-kubeconfig-file
    참고 Trident Operator를 사용하여 Trident를 수동으로 설치할 수도 있습니다. Trident 설명서에서 절차를 검토하십시오: "Trident 오퍼레이터를 수동으로 배포합니다"
  2. 클러스터에서 모든 Trident Pod가 실행 중인지 확인하십시오.

    예제 표시
    kubectl get pods -n trident
    참고 이 시점에서 Trident Pod가 생성되지 않을 수 있습니다. ReplicaSet 오브젝트를 설명하면 아래와 같이 PodSecurity 위반에 대한 오류가 표시될 수 있습니다. 이 오류는 trident 설치 중에 생성된 네임스페이스가 Kubernetes의 제한적인 Pod 보안 표준(PSS)을 적용하기 때문에 발생합니다. Trident Operator는 호스트 스토리지를 관리하기 위해 높은 시스템 권한이 필요하며, 제한된 프로필의 엄격한 제약 조건 하에서는 실행될 수 없습니다. 이 문제를 해결하려면 trident 네임스페이스에 권한 있는 프로필을 부여하여 ReplicaSet 컨트롤러가 Pod를 성공적으로 생성할 수 있도록 하십시오.
    Warning  FailedCreate  25s (x5 over 64s)  replicaset-controller  (combined from similar events): Error creating: pods "trident-operator-5cbf7f857-z7ztd" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "trident-operator" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "trident-operator" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "trident-operator" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "trident-operator" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")

    기본 제공 Kubernetes Pod 보안 승인 레이블을 trident 네임스페이스에 적용하여 제한된 프로필 제약 조건에서 제외합니다.

    kubectl label namespace trident pod-security.kubernetes.io/enforce=privileged --overwrite
    kubectl label namespace trident pod-security.kubernetes.io/audit=privileged --overwrite
    kubectl label namespace trident pod-security.kubernetes.io/warn=privileged --overwrite
    kubectl get pods -n trident
    Trident 설치됨

사용 환경에 맞는 스토리지 백엔드 및 StorageClass 구성 파일을 준비합니다

  1. 필요한 연결 세부 정보와 스토리지 매개변수를 정의하여 ONTAP용 Trident 백엔드를 구성합니다.

  2. Kubernetes에서 NetApp 스토리지 백엔드에 매핑되는 스토리지 클래스를 정의합니다. 이러한 클래스는 성능 특성 및 복제 정책과 같은 매개변수를 지정합니다.

    워크로드 요구 사항에 따라 다음 프로토콜에 대한 Trident 백엔드 및 스토리지 클래스를 정의하십시오.

    • NAS(ontap-nas 드라이버)

    • NAS 이코노미(ontap-nas-economy 드라이버)

    • iSCSI, FC 또는 NVMe 프로토콜용 SAN(ontap-san 드라이버)

    • iSCSI용 SAN Economy(ontap-san-economy 드라이버)

      NAS

      TridentBackendConfig 및 StorageClass를 생성하여 ONTAP NAS에 대한 NFS 기반 영구 스토리지 프로비저닝을 활성화합니다. 백엔드 구성에는 Kubernetes Secret에 저장된 자격 증명이 포함되며 ONTAP SVM 및 관리 LIF를 참조합니다.

      사용자 이름과 비밀번호 인증을 사용하는 백엔드 비밀 키 및 백엔드 구성 파일 예시 (다음으로 저장 tbc-nas.yaml):

      # tbc-nas.yaml
      apiVersion: v1
      kind: Secret
      metadata:
        name: tbc-nas-secret
        namespace: trident
      type: Opaque
      data:
        username: "<base64-encoded cluster admin username>"
        password: "<base64-encoded cluster admin password>"
      ---
      apiVersion: trident.netapp.io/v1
      kind: TridentBackendConfig
      metadata:
        name: tbc-nas
        namespace: trident
      spec:
        version: 1
        storageDriverName: ontap-nas
        managementLIF: <ONTAP management LIF>
        backendName: tbc-nas
        svm: <your SVM name>
        storagePrefix: <your prefix for all volume names created using this backend configuration>
        defaults:
          nameTemplate: "{{ .config.StoragePrefix }}_{{ .volume.Namespace }}_{{ .volume.RequestName }}"
        credentials:
          name: tbc-nas-secret

      클라이언트 인증서 인증을 사용하는 백엔드 비밀 키 및 백엔드 구성 파일 예시 (다른 이름으로 저장 tbc-nas.yaml):

      # tbc-nas.yaml
      apiVersion: v1
      kind: Secret
      metadata:
        name: ontap-nas-secret
        namespace: trident
      type: Opaque
      stringData:
        clientPrivateKey: <client private key value>
      ---
      apiVersion: trident.netapp.io/v1
      kind: TridentBackendConfig
      metadata:
        name: tbc-nas
        namespace: trident
      spec:
        version: 1
        storageDriverName: ontap-nas
        managementLIF: <ONTAP management LIF>
        backendName: tbc-nas
        svm: <your SVM name>
        storagePrefix: <your prefix for all volume names created using this backend configuration>
        credentials:
          name: ontap-nas-secret
        clientCertificate: <client certificate>

      StorageClass 정의(다른 이름으로 저장 sc-nas.yaml):

      mountOptions`은 NFS 볼륨에 대한 추가 마운트 옵션을 지정하는 선택적 매개변수입니다. `nconnect 옵션을 사용하면 단일 NFS 마운트에 대해 여러 개의 병렬 TCP 연결을 허용하여 처리량이 높은 워크로드의 성능을 향상시킬 수 있습니다. 기본값은 1이지만 ONTAP 시스템에서 허용하는 최대값까지 늘릴 수 있습니다.

ONTAP는 nconnect를 지원하는 클라이언트에서 단일 NFS 마운트에 대해 최대 16개의 연결을 지원합니다. Trident는 마운트 옵션을 Kubernetes 워커 노드에 직접 전달하므로 워커 노드 NFS 클라이언트와 ONTAP 모두에서 지원되는 값을 선택하십시오. 다음 예에서는 4개의 연결을 사용합니다.

# sc-nas.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc-nas
provisioner: csi.trident.netapp.io
parameters:
  backendType: "ontap-nas"
  media: "ssd"
  provisioningType: "thin"
  snapshots: "true"
allowVolumeExpansion: true
mountOptions:
- nconnect=4

TridentBackendConfig 및 StorageClass를 생성하여 ONTAP NAS Economy 드라이버에서 qtree를 사용한 NFS 기반 영구 스토리지 프로비저닝을 활성화합니다. 백엔드 구성에는 Kubernetes Secret에 저장된 자격 증명이 포함되며 ONTAP SVM 및 관리 LIF를 참조합니다.

사용자 이름과 비밀번호 인증을 사용하는 백엔드 비밀 키 및 백엔드 구성 파일 예시 (다음으로 저장 tbc-nas-economy.yaml):

# tbc-nas-economy.yaml
apiVersion: v1
kind: Secret
metadata:
  name: tbc-nas-economy-secret
  namespace: trident
type: Opaque
data:
  username: "<base64-encoded cluster admin username>"
  password: "<base64-encoded cluster admin password>"
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: tbc-nas-economy
  namespace: trident
spec:
  version: 1
  storageDriverName: ontap-nas-economy
  managementLIF: <ONTAP management LIF>
  backendName: tbc-nas-eco
  svm: <your SVM name>
  storagePrefix: <your prefix for all volume names created using this backend configuration>
  defaults:
    nameTemplate: "{{ .config.StoragePrefix }}_{{ .volume.Namespace }}_{{ .volume.RequestName }}"
  credentials:
    name: tbc-nas-economy-secret

StorageClass 정의(다른 이름으로 저장 sc-nas-economy.yaml):

# sc-nas-economy.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc-nas-economy
provisioner: csi.trident.netapp.io
parameters:
  backendType: "ontap-nas-economy"
  media: "ssd"
  provisioningType: "thin"
allowVolumeExpansion: true
mountOptions:
- nconnect=4

iSCSI를 사용하는 ONTAP SAN에 대한 TridentBackendConfig 및 StorageClass를 생성하여 iSCSI 기반 블록 스토리지 프로비저닝을 활성화합니다. 백엔드 구성은 ontap-san 드라이버를 사용하며 Kubernetes Secret에 저장된 자격 증명을 포함합니다. 이 sanType 매개변수를 생략하면 기본값으로 iSCSI 프로토콜이 사용됩니다.

사용자 이름 및 비밀번호 인증을 사용하는 백엔드 비밀 키 및 백엔드 구성 파일(다른 이름으로 저장 tbc-iscsi.yaml):

# tbc-iscsi.yaml
apiVersion: v1
kind: Secret
metadata:
  name: backend-tbc-ontap-iscsi-secret
  namespace: trident
type: Opaque
data:
  username: "<base64-encoded cluster admin username>"
  password: "<base64-encoded cluster admin password>"
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: ontap-iscsi
  namespace: trident
spec:
  version: 1
  storageDriverName: ontap-san
  managementLIF: <ONTAP management LIF>
  backendName: ontap-iscsi
  svm: <your SVM name>
  credentials:
    name: backend-tbc-ontap-iscsi-secret

클라이언트 인증서 인증을 사용하는 백엔드 비밀 키 및 백엔드 구성 파일(다른 이름으로 저장 tbc-iscsi.yaml):

# tbc-iscsi.yaml
apiVersion: v1
kind: Secret
metadata:
  name: backend-tbc-ontap-iscsi-secret
  namespace: trident
type: Opaque
stringData:
  clientPrivateKey: <client private key>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: ontap-iscsi
  namespace: trident
spec:
  version: 1
  storageDriverName: ontap-san
  managementLIF: <ONTAP management LIF>
  backendName: ontap-iscsi
  svm: <your SVM name>
  credentials:
    name: backend-tbc-ontap-iscsi-secret
  clientCertificate: <client certificate>

StorageClass 정의(다른 이름으로 저장 sc-iscsi.yaml):

# sc-iscsi.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc-iscsi
provisioner: csi.trident.netapp.io
parameters:
  backendType: "ontap-san"
  media: "ssd"
  provisioningType: "thin"
  fsType: ext4
  snapshots: "true"
allowVolumeExpansion: true

NVMe를 사용하는 ONTAP SAN에 대한 TridentBackendConfig 및 StorageClass를 생성하여 NVMe 기반 블록 스토리지 프로비저닝을 활성화합니다. 백엔드 구성은 ontap-san 드라이버를 사용하며 Kubernetes Secret에 저장된 자격 증명을 포함합니다. 해당 sanType 매개변수는 `nvme`로 설정해야 합니다.

사용자 이름 및 비밀번호 인증을 사용하는 백엔드 비밀 키 및 백엔드 구성 파일(다른 이름으로 저장 tbc-nvme.yaml):

# tbc-nvme.yaml
apiVersion: v1
kind: Secret
metadata:
  name: backend-tbc-ontap-nvme-secret
  namespace: trident
type: Opaque
data:
  username: "<base64-encoded cluster admin username>"
  password: "<base64-encoded cluster admin password>"
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: ontap-nvme
  namespace: trident
spec:
  version: 1
  storageDriverName: ontap-san
  sanType: nvme
  managementLIF: <ONTAP management LIF>
  backendName: ontap-nvme
  svm: <your SVM name>
  credentials:
    name: backend-tbc-ontap-nvme-secret

클라이언트 인증서 인증을 사용하는 백엔드 비밀 키 및 백엔드 구성 파일(다른 이름으로 저장 tbc-nvme.yaml):

# tbc-nvme.yaml
apiVersion: v1
kind: Secret
metadata:
  name: backend-tbc-ontap-nvme-secret
  namespace: trident
type: Opaque
stringData:
  clientPrivateKey: <client private key>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: ontap-nvme
  namespace: trident
spec:
  version: 1
  storageDriverName: ontap-san
  sanType: nvme
  managementLIF: <ONTAP management LIF>
  backendName: ontap-nvme
  svm: <your SVM name>
  credentials:
    name: backend-tbc-ontap-nvme-secret
  clientCertificate: <client certificate>

StorageClass 정의(다른 이름으로 저장 sc-nvme.yaml):

# sc-nvme.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: sc-nvme
provisioner: csi.trident.netapp.io
parameters:
  backendType: "ontap-san"
  media: "ssd"
  provisioningType: "thin"
  fsType: ext4
  snapshots: "true"
allowVolumeExpansion: true

Trident 설명서를 참조하시면 YAML 파일의 추가 샘플과 SAN 드라이버 및 NAS 드라이버에서 지원하는 액세스 모드 및 볼륨 모드에 대한 정보를 확인할 수 있습니다.

VolumeSnapshotClass 구성 파일 생성

VolumeSnapshotClass 정의를 생성합니다. 이 구성을 통해 영구 볼륨에 대한 스냅샷 기반 작업을 활성화할 수 있습니다.

VolumeSnapshotClass 정의(다른 이름으로 저장 snapshot-class.yaml):

# snapshot-class.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: trident-snapshotclass
driver: csi.trident.netapp.io
deletionPolicy: Retain

클러스터에 구성 파일을 적용합니다

이전 단계에서 생성한 구성 파일을 `kubectl`을 사용하여 vSphere Kubernetes Service 클러스터에 적용합니다. 이렇게 하면 클러스터에 필요한 시크릿, 백엔드 구성, 스토리지 클래스 및 스냅샷 클래스가 생성됩니다.

단계
  1. 구성한 각 프로토콜에 대해 TridentBackendConfig 및 StorageClass 파일을 적용하십시오.

    kubectl apply -f tbc-nas.yaml -n trident
    kubectl apply -f sc-nas.yaml
    
    kubectl apply -f tbc-nas-economy.yaml -n trident
    kubectl apply -f sc-nas-economy.yaml
    
    kubectl apply -f tbc-iscsi.yaml -n trident
    kubectl apply -f sc-iscsi.yaml
    
    kubectl apply -f tbc-nvme.yaml -n trident
    kubectl apply -f sc-nvme.yaml
    
    kubectl apply -f snapshot-class.yaml
  2. 리소스가 성공적으로 생성되었는지 확인하십시오.

    TridentBackendConfig 객체를 확인하세요:

    kubectl get tbc -n trident

    StorageClass 객체를 확인하세요:

    kubectl get storageclass

    VolumeSnapshotClass 확인:

    kubectl get volumesnapshotclass

기본 Trident 스토리지 및 스냅샷 클래스 설정

Trident StorageClass 및 VolumeSnapshotClass를 vSphere Kubernetes Service 클러스터의 기본값으로 설정합니다.

단계
  1. 기본 Trident StorageClass를 설정합니다.

    Trident 기반 StorageClass를 클러스터 기본값으로 설정하여 스토리지 클래스가 지정되지 않은 경우 PersistentVolumeClaims가 자동으로 사용하도록 합니다.

    StorageClass는 기본값으로 하나만 설정해야 합니다. 다른 StorageClass가 이미 기본값으로 설정되어 있는 경우, 해당 어노테이션을 `false`으로 설정하십시오.

    CLI에서:

    kubectl patch storageclass <storage class name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
  2. 기본 Trident VolumeSnapshotClass를 설정합니다.

    Trident 기반 VolumeSnapshotClass를 클러스터 기본값으로 설정하면 영구 볼륨에 대한 스냅샷 기반 작업이 활성화됩니다. 이렇게 하면 스냅샷 클래스가 지정되지 않은 경우 VolumeSnapshots이 자동으로 Trident CSI 드라이버를 사용하게 됩니다.

    VolumeSnapshotClass는 기본값으로 하나만 설정해야 합니다. 다른 VolumeSnapshotClass가 이미 기본값으로 설정되어 있는 경우 해당 어노테이션을 `false`로 설정하십시오.

    CLI에서:

    kubectl patch volumesnapshotclass <snapshot class name> --type=merge -p '{"metadata":{"annotations":{"snapshot.storage.kubernetes.io/is-default-class":"true"}}}'

Kubernetes Persistent Volume Claims를 사용하여 워크로드에 필요한 스토리지를 요청합니다.

Trident는 백엔드 NetApp 스토리지에서 필요한 볼륨을 자동으로 프로비저닝합니다. VKS 클러스터에서 PVC를 사용하여 워크로드를 배포하는 예는 "영구 스토리지로 워크로드 배포"을 참조하십시오.