23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
요즘 맡고 있는 시스템의 서비스 활성화를 위해 AI 분석을 진행하고 있습니다.
분석을 진행하다 보니 컴퓨팅 자원이 필요합니다. AKS 프로젝트를 하던 차라 자연스럽게 AKS로 컴퓨팅 자원을 손쉽게 제공하는 것이 어떨까 생각해 보았습니다.
AKS에 컴퓨팅 자원으로 pod를 하나 생성해야 합니다.
아직 yaml 작성에 익숙하지 않아 chatGPT에 물어 보았습니다. 아래와 같이 간단히 알려 주네요. 쓸만합니다.
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에서는 데이터를 저장하기 위해 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의 상호 관계와 적용 방법에 대해 예시와 함께 도식화를 하였습니다.
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을 사용하였습니다.
azure file에 접속하기 위한 azurestorageaccountkey, azurestorageaccountname 을 설정해야 합니다.
$ kubectl create secret generic azurefile-secret --from-literal=azurestorageaccountname=saaopdevstdfiles --from-literal=azurestorageaccountkey=xxxxazurestorageaccountkey, azurestorageaccountname의 설정은 azure portal에서 마운트하고자 하는 Storage account에서 정보를 찾을 수 있습니다.
(azurestorageaccountkey의 값은 'xxx'로 비식별화 처리)
참고로 Storage account는 Azure에서 제공하는 클라우드 스토리지 서비스입니다.
이 서비스를 사용하면 다양한 유형의 데이터(파일, 메시지, 테이블, 큐 등)를 안전하게 저장하고, 검색하고, 백업하고, 복원할 수 있습니다.
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를 사용하면 됩니다.
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 3sazure가 제공하는 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: 10Gikubectl 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 4sazure에서 제공하는 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-aikubectl apply -f <yaml 파일명>
상태를 보니 양호하게 Running 상태로 표시가 됩니다.
$ kubectl get pod centos-pod
NAME READY STATUS RESTARTS AGE
centos-pod 1/1 Running 0 2sk9s툴을 활용하여 편리하게 pod의 shell로 접속합니다. : cendos-pod를 선택한 후에 shell 접속인 <s> 단축키로 간편하게 접속 가능합니다.
/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 ... 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-aikubectl apply -f <yaml 파일명>
아래와 같이 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분석을 병렬로 처리할 수 있겠습니다. 차후에 한 번 더 시도해 보도록 하겠습니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.