데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      AKS로 쿠버네티스 시작하기 : 스토리지 연결

      broccoli 23.05.08
      2,919 10 0

      AKS의 첫 번째 실무 용도

      요즘 맡고 있는 시스템의 서비스 활성화를 위해 AI 분석을 진행하고 있습니다.

      분석을 진행하다 보니 컴퓨팅 자원이 필요합니다. AKS 프로젝트를 하던 차라 자연스럽게 AKS로 컴퓨팅 자원을 손쉽게 제공하는 것이 어떨까 생각해 보았습니다.


      AKS클러스터에 컴퓨팅 요소 생성

      manifest 준비

      AKS에 컴퓨팅 자원으로 pod를 하나 생성해야 합니다.

      아직 yaml 작성에 익숙하지 않아 chatGPT에 물어 보았습니다. 아래와 같이 간단히 알려 주네요. 쓸만합니다.

      image.png

      pod 생성 명령어 수행

      yaml파일을 위에서 알려준 대로 만들고, kubectl apply 명령을 수행하면 pod를 손쉽게 생성할 수 있습니다.

      과거 서버에 centos 설치하거나, VM을 만드는 과정과는 비교가 되지 않을 정도로 간단하고 빠릅니다. (아주 최고의 사용자 경험입니다.)

      이후 해당 pod에 접속해서 ls 동작까지 확인해 두었습니다.

      해당 pod 에 접속하는 명령어는 kubectl exec -it <pod명> -- <명령어> 입니다. 여기서 명령어는 bash shell을 기동하는 명령어를 사용하였습니다.

      vi centos-pod.yaml 
      $ kubectl apply -f centos-pod.yaml pod/centos-pod created 
      $ kubectl get pod centos-pod NAME READY STATUS RESTARTS AGE centos-pod 1/1 Running 0 25s 
      $ kubectl exec -it centos-pod -- /bin/bash 
      [root@centos-pod /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var 
      [root@centos-pod /]#


      스토리지 연결

      해당 실무 용도를 위해 AI 분석에 필요한 입력 데이터는 NAS(azure file)를 마운트해서 사용하려고 합니다.

      centos-pod가 azure file(NAS)를 마운트 해야 합니다.

      참고할 만한 링크 먼저 공유드립니다. : Azure Files로 볼륨 만들기 및 사용

      k8s에서 azure file(NAS) 마운트를 위한 전체 흐름 이해하기

      k8s에서는 데이터를 저장하기 위해 StorageClass, PersistentVolume, 그리고 PersistentVolumeClaim을 사용합니다.

      azure file(NAS)를 Kubernetes에서 마운트하기 위해 StorageClass, Secret, PersistentVolume, 그리고 PersistentVolumeClaim이 필요합니다.

      오브젝트

      정의 및 필요성

      StorageClass

      스토리지 관리를 위한 필수 요소로서 스토리지를 쉽게 사용할 수 있도록 PersistentVolume을 생성할 때 사용되는 오브젝트

      - 이를 통해 클러스터 관리자는 다양한 스토리지 유형을 정의하고 사용자가 필요한 스토리지 유형을 선택할 수 있도록 합니다.

      - 정의 가능한 스토리지 시스템 : Ceph, GlusterFS, NFS 등이 있습니다.

      - azurefile 스토리지 클래스는 AKS가 생성될 때 자동으로 만들어 줍니다.

      Secret

      민감한 정보를 안전하게 저장하고 관리하는 오브젝트

      - 여기서는 azurefile 접속에 필요한 azurestorageaccountname와 storageaccountkey을 저장

      PersistentVolume

      클러스터에서 사용 가능한 스토리지 볼륨

      - 이를 통해 사용자는 스토리지 클래스가 제공하는 스토리지 유형 중 하나를 선택하고, 해당 스토리지 볼륨을 Pod에서 사용할 수 있도록 바인딩할 수 있습니다.

      PersistentVolumeClaim

      Pod에서 사용할 스토리지 볼륨을 요청하는 방법

      - 이를 통해 개발자는 필요한 스토리지 용량과 스토리지 클래스를 지정하여 스토리지 볼륨을 요청할 수 있습니다.

      - 위의 오브젝트는 Kubernetes에서 스토리지를 관리하는 데 필수적입니다.

      Pod가 실행되는 노드가 다른 노드로 이동하거나, Pod가 삭제되거나, 스토리지 클래스가 변경되어도 데이터를 안전하게 보존할 수 있도록 제공됩니다.


      아래에 SC, Secret, PV, PV의 상호 관계와 적용 방법에 대해 예시와 함께 도식화를 하였습니다.

      image.png


      StorageClass 만들기

      azure에서 azure file를 생성하면 Storage class 가 생성되어 있어 그대로 사용할 수 있습니다.

      아래와 같은 이름으로 Azure에서 azure file 만들 때 생성해서 제공해 줍니다.

      $ kubectl get sc
      NAME                    PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
      azurefile               file.csi.azure.com   Delete          Immediate              true                   27d
      azurefile-csi           file.csi.azure.com   Delete          Immediate              true                   27d
      azurefile-csi-premium   file.csi.azure.com   Delete          Immediate              true                   27d
      azurefile-premium       file.csi.azure.com   Delete          Immediate              true                   27d
      default (default)       disk.csi.azure.com   Delete          WaitForFirstConsumer   true                   27d
      managed                 disk.csi.azure.com   Delete          WaitForFirstConsumer   true                   27d
      managed-csi             disk.csi.azure.com   Delete          WaitForFirstConsumer   true                   27d
      managed-csi-premium     disk.csi.azure.com   Delete          WaitForFirstConsumer   true                   27d
      managed-premium         disk.csi.azure.com   Delete          WaitForFirstConsumer   true

      여기서는 azurefile-csi-premium을 사용하였습니다.


      Secret 만들기

      azure file에 접속하기 위한 azurestorageaccountkey, azurestorageaccountname 을 설정해야 합니다.

      $ kubectl create secret generic azurefile-secret --from-literal=azurestorageaccountname=saaopdevstdfiles --from-literal=azurestorageaccountkey=xxxx

      azurestorageaccountkey, azurestorageaccountname의 설정은 azure portal에서 마운트하고자 하는 Storage account에서 정보를 찾을 수 있습니다.

      (azurestorageaccountkey의 값은 'xxx'로 비식별화 처리)

      참고로 Storage account는 Azure에서 제공하는 클라우드 스토리지 서비스입니다.

      이 서비스를 사용하면 다양한 유형의 데이터(파일, 메시지, 테이블, 큐 등)를 안전하게 저장하고, 검색하고, 백업하고, 복원할 수 있습니다.

      image.png


      PersistentVolume 만들기

      azure file와 연결할 PersistentVolume을 만듭니다.


      아래 예시처럼 `kind`를 `PersistentVolume`로 설정하고, NAS를 읽기만 할 예정이라 accessModes를 ReadOnlyMany로 설정합니다.

      `spec`에 `storageClassName`은 AKS생성 시 azure가 제공하는 `azurefile-csi-premium`로 설정합니다.

      azurefile에 접근하기 위해 필요한 secret은 위에서 만든 secret인 `azurefile-secret-costume-ai`을 사용합니다.

      kind: PersistentVolume
      apiVersion: v1
      metadata:
        name: azurefile-pv-costume-ai # naming
      spec:
        capacity:
          storage: 10Gi
        accessModes:
          - ReadOnlyMany
        persistentVolumeReclaimPolicy: Retain
        storageClassName: azurefile-csi-premium # storage kind by azure file
        mountOptions:
          - dir_mode=0777
          - file_mode=0777
          - uid=1000
          - gid=1000
          - mfsymlinks
          - nobrl
        azureFile:
          secretName: azurefile-secret-costume-ai # secret to connect azure preminum file
          shareName: oavatarfiles  # azure file' sharing name 
          readOnly: true  # to read 

      shareName은 아래의 그림에서 볼 수 있듯이 azure portal에서 확인할 수 있는 'File shares'이름인 oavatarfiles를 사용하면 됩니다.

      image.png

      리소스 생성 명령 수행

      kubectl apply -f <yaml 파일명>

      $ kubectl apply -f pv-centos-pod.yaml
      persistentvolume/azurefile-pv-costume-ai created
      결과 확인

      상태를 보니 양호하게 Bound 상태로 표시가 됩니다.

      $ kubectl get pv
      NAME                      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                              STORAGECLASS            REASON   AGE
      azurefile-pv-costume-ai   10Gi       ROX            Retain           Bound    default/azurefile-pvc-costume-ai   azurefile-csi-premium            3s


      PersistentVolumeClaim 만들기

      azure가 제공하는 StorageClass와 위에서 생성한 PersistentVolume을 사용하여 PersistentVolumeClaim을 만듭니다.

      아래 예시처럼 `kind`를 `PersistentVolumeClaim`로 설정하고 `spec`에 `storageClassName`을 `azurefile-csi-premium`로 설정합니다.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: azurefile-pvc-costume-ai # pvc naming
      spec:
        accessModes:
          - ReadOnlyMany  # access mode 
        storageClassName: azurefile-csi-premium # created by AKS
        resources:
          requests:
            storage: 10Gi
      리소스 생성 명령 수행

      kubectl apply -f <yaml 파일명>

      $ kubectl apply -f pvc-centos-pod.yaml
      persistentvolumeclaim/azurefile-pvc-costume-ai created
      결과 확인

      상태를 보니 양호하게 Bound 상태로 표시가 됩니다.

      $ kubectl get pvc
      NAME                       STATUS   VOLUME                    CAPACITY   ACCESS MODES   STORAGECLASS            AGE
      azurefile-pvc-costume-ai   Bound    azurefile-pv-costume-ai   10Gi       ROX            azurefile-csi-premium   4s


      Pod 생성(NAS 마운트 포함)

      azure에서 제공하는 StorageClass, 위에서 생성한 Secret/PersistentVolume/PersistentVolumeClaim을 사용하여 Pod에서 azure file를 마운트할 수 있습니다.

      예를 들어, 아래와 같이 Pod을 만들면 PVC를 통해 azure file를 마운트할 수 있습니다.

      apiVersion: v1
      kind: Pod
      metadata:
        name: centos-pod
      spec:
        containers:
        - name: centos-container
          image: centos:latest
          command: ["/bin/bash", "-c", "while true; do echo hello; sleep 10; done"]
          volumeMounts:
          - name: azurefile
            mountPath: /mnt/oavatarfiles   # centos-pod에서 사용할 마운트명
        volumes:
        - name: azurefile
          persistentVolumeClaim:
            claimName: azurefile-pvc-costume-ai
      리소스 생성 명령 수행

      kubectl apply -f <yaml 파일명>

      결과 확인 : pod 상태 확인

      상태를 보니 양호하게 Running 상태로 표시가 됩니다.

      $ kubectl get pod centos-pod
      NAME         READY   STATUS    RESTARTS   AGE
      centos-pod   1/1     Running   0          2s
      결과 확인 : pod로 접속하여 마운트한 외부 스토리지 내용 확인

      k9s툴을 활용하여 편리하게 pod의 shell로 접속합니다. : cendos-pod를 선택한 후에 shell 접속인 <s> 단축키로 간편하게 접속 가능합니다.

      image.png


      /mnt/oavatarfiles 마운트 포인트로 접근이 가능하고, 하위 디렉토리와 파일을 확인할 수 있습니다.

      [root@centos-pod /]# cd mnt
      [root@centos-pod mnt]# ls
      oavatarfiles
      [root@centos-pod mnt]# cd oavatarfiles/
      [root@centos-pod oavatarfiles]# ls
      avatar	avatarmotion  category	edit  guide  ... 


      Python pod 로 적용해 보기

      AI 분석이라 python 구동 환경까지 포함해서 구성해 보겠습니다.

      아래는 AI 분석이 가능한 파이썬 동작 환경을 갖춘 centos 컨테이너를 생성하는 Kubernetes YAML 파일의 예시입니다.

      apiVersion: v1
      kind: Pod
      metadata:
        name: python-pod
        labels:
          app: python
      spec:
        containers:
        - name: python
          image: centos/python-36-centos7:latest
          command: ["/bin/bash"]
          args: ["-c", "echo Hello Kubernetes! && sleep 3600"]

      위에서 만든 centos-pod를 참조하여 python-pod를 아래와 같이 만들 수 있습니다. volumeMounts 과 volumes내용을 위에서 그대로 복사하여 yaml을 손쉽게 만들었습니다.

      metadata:
        name: python-pod
        labels:
          app: python
      spec:
        containers:
        - name: python
          image: centos/python-36-centos7:latest
          command: ["/bin/bash"]
          args: ["-c", "echo Hello Kubernetes! && sleep 3600"]
          volumeMounts:
          - name: azurefile
            mountPath: /mnt/oavatarfiles   # centos-pod에서 사용할 마운트명
        volumes:
        - name: azurefile
          persistentVolumeClaim:
            claimName: azurefile-pvc-costume-ai
      리소스 생성 명령 수행

      kubectl apply -f <yaml 파일명>

      python 환경 구동 확인

      아래와 같이 python 명령으로 파이썬 인터프리터 동작이 확인 됩니다. AI 분석을 위한 기본적인 파이썬 환경 구동까지 완료하였습니다.

      <<K9s-Shell>> Pod: default/python-pod | Container: python
      (app-root) bash-4.2$ python
      Python 3.6.9 (default, Nov 11 2019, 11:24:16)
      [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>>


      정리

      실무 용도로 AI 분석에 필요한 pod를 만들고 AI분석의 입력 데이터 역할을 할 외부 스토리지(여기서는 azure file인 NAS)를 마운트하였습니다.

      외부 스토리지 마운트를 할 때, SC를 AKS가 자동으로 생성해 주는 점을 유의해서 진행이 필요하였고,

      Secret→ PV → PVC → cendos-pod → python-pod 생성과정을 통해 파이썬 구동 환경의 pod로 외부 스토리지 마운트를 성공하였습니다.

      입력데이터 접근이 가능하게 되어 AI 분석에 필요한 파이썬 환경 제공이 가능하였습니다.

      다수의 AI처리 task 수행을 위해 deployment를 생성하면 다중pod 구성으로 AI분석을 병렬로 처리할 수 있겠습니다. 차후에 한 번 더 시도해 보도록 하겠습니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      broccoli 님의 최신 블로그

      더보기