Cloud/Kubernetes

NaverCloud NKS와 Object Storage 연동하기

퐁스 2021. 11. 19. 18:12

 Object Storage는 File Storage나 Block Storage가 아니기 때문에 일반적인 방식으로 Kubernetes Service에 사용할 수 없다. 그렇지만 부득이한 사정때문에...사용해야 할 경우를 대비하여 미리 정리한다.

1. Object Storage란?

 NaverCloud에서 제공하는 스토리지 상품 중 한 가지이다. 

2. 연동 방법

(1) Object Storage -> s3fs 혹은 goofys를 통해 워커 노드에 file system으로 마운트 -> hostpath로 사용

(2) Object Storage -> 파드 마운트 시 s3fs 혹은 goofys 이미지를 통해 파드 내에 file system으로 마운트

 두 가지 정도가 존재할 듯 하다. (1)의 경우 사용이 편리하다는 장점이 있지만 사용하려는 노드마다 마운트를 해주어야 하고, 해당 노드에만 스케줄링이 가능하다. (2)의 경우 마운트 이슈에서는 조금 자유롭지만 s3fs, goofys의 이미지를 구해야하고 사이드카 컨테이너를 넣어줘야해서 쿠버 상에서 조금 더 복잡한 작업을 해주어야 한다.

 나는 Object Storage도 이에 따른 툴들도 제대로 사용해 본적이 없으므로 둘 다 진행해보려고 한다.

3. 연동

(1) 노드에 마운트하여 사용

- 사용 할 오브젝트 스토리지 등록

pod-mount라는 오브젝트 스토리지를 하나 생성해주었다. 

- 원하는 노드에 goofys 설치

$ apt-get install -y fuse #goofys 사용하기 위해 필요한 패키지 
$ wget https://github.com/kahing/goofys/releases/latest/download/goofys
$ chmod 755 goofys
$ my goofys /usr/bin/
$ goofys
Error: goofys takes exactly two arguments.

NAME:
   goofys - Mount an S3 bucket locally

USAGE:
   goofys [global options] bucket[:prefix] mountpoint
   
VERSION:
   0.24.0-45b8d78375af1b24604439d2e60c567654bcdf88

남덜은,, 어케하는지 모르겠고 나는 그냥 git(https://github.com/kahing/goofys)에서 리눅스꺼 찾아서 대충 했따,,^^

- goofys를 통해 object storage 마운트

일단 credentials 파일을 만든다.

$ mkdir /root/.aws
$ vi /root/.aws/credentials
[default]
aws_access_key_id = access_key
aws_secret_access_key = secret_key

해당 키는 네이버클라우드 포탈 (콘솔 아님) > 마이페이지 > 계정 관리 > 인증 관리에서 확인 가능하당.

$ goofys --endpoint https://kr.object.ncloudstorage.com/ pod-mount /pod-mount
                    (네이버클라우드 objectstorage 주소,    버킷 이름, 마운트 위치)

성공 실패는 로그를 통해 확인할 수 있따.

$ tail -f /var/log/syslog
Nov 19 17:21:20 [node-name] /usr/bin/goofys[129478]: main.INFO File system has been successfully mounted.

연동 여부도 확인.

$ cd /pod-mount
$ /pod-mount# ls
$ /pod-mount# mkdir node-1
$ /pod-mount# ls
node-1

짜잔~

현재는 임시 마운트이기 때문에 /etc/fstab 아래에도 등록해준다.

$ vi /etc/fstab
goofys#pod-mount   /pod-mount        fuse     _netdev,allow_other,--file-mode=0666,--dir-mode=0777    0       0

- 파드 마운트

마운트 해준 위치를 호스트패스로 사용하는 파드를 하나 생성해본다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello 
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - name: hello
        image: nginxdemos/hello:plain-text
        ports:
        - containerPort: 80
        volumeMounts:
        - name: log
          mountPath: /var/log/nginx 
      volumes:
      - name: log
        hostPath:
          path: /pod-mount/nginx-log
          type: Directory

콘솔내에서 확인해본다.

문제점은... 느리다 ㅋㅋ.. 이걸 스토리지로 봐도 되는건가? 싶을정도로 양방향 동작이 느리다.

(2) 파드에 마운트하여 사용