Symcloud Storage용 Distributed Cloud 구성

기본적으로 하나의 Google Distributed Cloud 노드에서 실행되는 워크로드는 다른 Distributed Cloud 노드의 로컬 스토리지에 액세스할 수 없습니다. 하지만 각 Distributed Cloud 노드에서 로컬 스토리지 추상화 레이어 역할을 하고 다른 Distributed Cloud 노드에서 실행되는 워크로드에 로컬 스토리지를 제공하는 서드 파티 솔루션인 Rakuten Symcloud Storage를 사용하도록 Google Distributed Cloud를 구성할 수 있습니다.

Symcloud Storage는 Google Cloud Marketplace에서 배포되며 여기에 명시된 약관이 적용됩니다. Google은 Distributed Cloud에서 Symcloud Storage를 사용하는 데 제한적인 지원을 제공하며 지원을 위해 서드 파티 제공업체에 문의할 수 있습니다. Symcloud Storage용 소프트웨어 업데이트는 Distributed Cloud 소프트웨어 업데이트에 포함됩니다.

Symcloud Storage 클래스

이 섹션에서는 Symcloud Storage가 Distributed Cloud 클러스터에서 사용 설정할 수 있는 스토리지 클래스를 설명합니다. Distributed Cloud의 Symcloud Storage는 robin-rwx 스토리지 클래스나 맞춤 구성된 RWX 파일 시스템 모드 볼륨을 지원하지 않습니다. Symcloud 스토리지 클래스에 대한 자세한 내용은 Kubernetes에서 Robin CNS 사용을 참고하세요.

robin 스토리지 클래스

robin 스토리지 클래스는 기본 읽기-쓰기-한 번 (RWO) 스토리지 클래스입니다. 다음 예에서는 클래스의 인스턴스화를 보여줍니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: robin
    labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
provisioner: robin
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer

robin-immediate 스토리지 클래스

robin-immediate 스토리지 클래스는 해당 영구 볼륨 신청을 만든 직후 영구 볼륨이 생성된다는 점을 제외하고 robin와 동일합니다. 다음 예시는 클래스의 인스턴스화를 보여줍니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: robin-immediate
    labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
provisioner: robin
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: Immediate

robin-repl-3 스토리지 클래스

robin-repl-3는 여러 Distributed Cloud 노드에 걸쳐 있는 복제본이 3개인 RWO 스토리지 클래스입니다. 다음 예시는 클래스의 인스턴스화를 보여줍니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: robin-repl-3
    labels:
        app.kubernetes.io/instance: robin
        app.kubernetes.io/managed-by: robin.io
        app.kubernetes.io/name: robin
provisioner: robin
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
parameters:
    replication: "3"
    faultdomain: host

기본 요건

시작하기 전에 다음 단계를 완료하세요.

  1. 타겟 Distributed Cloud 프로젝트의 로깅 및 모니터링을 구성합니다.
  2. 타겟 Distributed Cloud 클러스터를 만듭니다.
  3. 타겟 Distributed Cloud 클러스터의 포드가 Google Cloud 데이터 센터에 도달할 수 있도록 Distributed Cloud 네트워킹을 구성합니다.
  4. Symcloud Storage에서 추상화하지 않을 각 Distributed Cloud 노드에 각 local-block 영구 볼륨을 바인딩합니다. 바인딩된 local-block 영구 볼륨을 바인딩 해제하면 Symcloud Storage를 설치할 때 해당 영구 볼륨의 콘텐츠가 삭제됩니다. 자세한 내용은 Kubernetes 문서의 바인딩을 참고하세요.

Distributed Cloud 노드에 Symcloud Storage 설치

분산 클라우드 노드에 Symcloud Storage를 설치하려면 다음 단계를 완료하세요.

  1. 다음 명령어를 사용하여 Symcloud Storage 라이선스를 클러스터에 적용합니다. LICENSE_FILE을 Symcloud Storage 라이선스 파일의 전체 경로 및 이름으로 바꿉니다.

    kubectl apply -f LICENSE_FILE -n robin-admin
    
  2. 다음 명령어를 사용하여 RobinCluster 서비스와 모든 Symcloud 스토리지 노드의 상태를 확인합니다.

    kubectl describe robinclusters -n robinio
    

    이 명령어는 다음과 유사한 출력을 반환합니다.

    [...]
    Status:
    [...]
    Phase:              Ready
    robin_node_status:
    [...]
     Status:           Ready
    [...]
     Status:           Ready
    [...]
     Status:           Ready
    [...]
    

    서비스와 노드의 예상 상태는 Ready입니다.

Symcloud Storage를 기본 스토리지 클래스로 설정

다음 명령어를 사용하여 Distributed Cloud 클러스터에서 Symcloud Storage를 기본 스토리지 클래스로 설정합니다. STORAGE_CLASSSymcloud 스토리지 클래스 중 하나로 바꿉니다.

kubectl patch storageclass STORAGE_CLASS -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

기본 스토리지 클래스 설정에 관한 자세한 내용은 Kubernetes 문서의 기본 StorageClass 변경을 참고하세요.

워크로드의 추상화된 Symcloud 스토리지 볼륨 구성

이 섹션에서는 Symcloud Storage 클래스를 사용하여 Distributed Cloud 워크로드의 추상화된 스토리지를 구성하는 방법을 보여주는 예시를 제공합니다. Symcloud Storage 볼륨 구성에 대한 자세한 내용은 Kubernetes에서 Robin CNS 사용을 참고하세요.

파일 시스템 모드에서 ext4 RWO 볼륨 구성

다음 예시에서는 ext4 파일 시스템을 사용하여 파일 시스템 모드에서 RWO 볼륨의 영구 볼륨 클레임을 구성하는 방법을 보여줍니다. STORAGE_CLASSSymcloud 스토리지 클래스 중 하나로 바꿉니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rwo-fs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS

블록 모드에서 RWO 볼륨 구성

다음 예에서는 블록 모드에서 RWO 볼륨의 영구 볼륨 클레임을 구성하는 방법을 보여줍니다. STORAGE_CLASSSymcloud Storage 클래스 중 하나로 바꿉니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rwo-block-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS
  volumeMode: Block

기존 볼륨의 구성 수정

다음 예시는 주석을 사용하여 기존 Symcloud 스토리지 LZ4 압축 RWO 볼륨의 구성을 수정하는 방법을 보여줍니다. STORAGE_CLASSSymcloud 스토리지 클래스 중 하나로 바꿉니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: compressed-rwo-fs-pvc
  annotations:
    robin.io/compression: LZ4
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS

다음 예시는 주석을 사용하여 xfs 파일 시스템으로 기존 Symcloud Storage RWO 볼륨의 구성을 수정하는 방법을 보여줍니다. STORAGE_CLASSSymcloud 스토리지 클래스 중 하나로 바꿉니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rwo-xfs-pvc
  annotations:
    robin.io/fstype: xfs
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: STORAGE_CLASS

Symcloud Storage CLI 클라이언트 구성

Symcloud Storage는 Symcloud Storage 구성을 관리하는 데 사용할 수 있는 명령줄 인터페이스 (CLI) 클라이언트를 제공합니다. Distributed Cloud 클러스터에서 클라이언트를 구성하려면 다음 단계를 완료하세요.

  1. Distributed Cloud 클러스터에 배포된 RobinCluster 서비스 인스턴스에서 사용되는 Symcloud Storage 이미지 경로를 가져옵니다.

    kubectl get robincluster -o jsonpath='{.items[].spec.image_robin}'
    
  2. 다음 콘텐츠로 robincli 리소스를 만듭니다. ROBIN_CNS_IMAGE를 1단계에서 가져온 이미지의 전체 경로와 이름으로 바꿉니다.

    kind: Deployment
    apiVersion: apps/v1
    metadata:
     name: robincli
     namespace: default
     labels:
       name: robincli
    spec:
     replicas: 1
     selector:
       matchLabels:
         name: robincli
     template:
       metadata:
         annotations:
           product: robin
         labels:
           name: robincli
       spec:
         containers:
         - name: robincli
           image: ROBIN_CNS_IMAGE
           workingDir: /root
           command: ["/bin/bash","-c","mkdir -p /root/.robin; ln -s -t /usr/lib/python3.7/site-packages/ /opt/robin/current/python3/site-packages/robincli /opt/robin/current/python3/site-packages/stormgr_def.py /opt/robin/current/python3/site-packages/stormgr_lib.py; /opt/robin/current/bin/robin client add-context robin-master.robinio --set-current; while true; do sleep 10000; done"]
           resources:
             requests:
               memory: "10Mi"
               cpu: "100m"
    
  3. Distributed Cloud 클러스터에 robincli 리소스를 적용합니다.

  4. 초기 설치 시 Symcloud Storage는 무작위 비밀번호를 사용하여 robinio 네임스페이스에 default-admin-user 보안 비밀을 생성합니다. 다음 명령어를 사용하여 이러한 로그인 사용자 인증 정보를 가져옵니다.

    1. 사용자 이름을 가져옵니다.

      kubectl -n robinio get secret default-admin-user -o jsonpath='{.data.username}' | base64 -d
      
    2. 비밀번호를 가져옵니다.

       
      kubectl -n robinio get secret default-admin-user -o jsonpath='{.data.password}' | base64 -d
      
  5. 새로 만든 포드에 로그인하고 클라이언트를 실행합니다.

    kubectl exec -it robincli -- bash
    

Symcloud Storage의 제한사항

분산 클라우드와 함께 Symcloud Storage를 사용하는 경우 분산 클라우드 클러스터가 3개 이상의 분산 클라우드 노드로 구성된 경우에만 고가용성을 달성할 수 있습니다.