Minio(2/3) - 쿠버네티스 위에서 Minio 동작하기(k8s+minio, NodePort 방식)

이현우·2022년 4월 19일
0

쿠버네티스

목록 보기
8/11

노드 포트 방식

1. Deployment와 Service의 야믈파일

1-1 minio-deployment.yml

MiniO 서비스를 위한 Deployment

apiVersion: apps/v1
# 종류 : Deployment
kind: Deployment
metadata:
  # Deployment 이름
  name: minio
spec:
  # 복제 1개
  replicas: 1
  selector:
    matchLabels:
      # app: minio의 라벨을 가지면 매치
      app: minio
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: minio
    spec:
      # key: localhost의 라벨을 가진 node를 선택
      nodeSelector:
        key: localhost
      nodeName: da-pc-0118
      volumes:
      - name: storage
        hostPath:
          path: /data/minio
      containers:
      - name: minio
        image: minio/minio:latest
        args:
        - server
        - --console-address
        - ":9001"
        - "/storage"
        env:
        - name: MINIO_ACCESS_KEY
          value: "minio"
        - name: MINIO_SECRET_KEY
          value: "minio123"
        - name: TZ
          value: Asia/Seoul
        - name: LANG
          value: ko_KR.utf8
        ports:
        - containerPort: 9000
          hostPort: 9000
        - containerPort: 9001
          hostPort: 9001
        volumeMounts:
        - name: storage
          mountPath: "/storage"

1-2 minio-service.yml

MiniO 서비스를 외부로 노출하기 위한 Service를 선언

apiVersion: v1
kind: Service
metadata:
  name: minio
  labels:
    run: minio
spec:
  # type: NodePort로 지정(기본값: clusterIP)
  # NodePort : 고정 포트로 각 노드의 IP에 서비스를 노출
  type: NodePort
  ports:
  - port: 9000
    targetPort: 9000
    nodePort: 30333
    name: api
  - port: 9001
    targetPort: 9001
    nodePort: 30334
    name: ui
  selector:
    app: minio

1-3 포트 부가설명

전체 서비스 흐름으로 보면 NodePort --> Port --> targetPort

1-3-1 Port 유형

NodePort

  • 외부에서 접속하기 위해 사용하는 포트

port

  • Cluster 내부에서 사용할 Service 객체의 포트

targetPort

  • Service객체로 전달된 요청을 Pod(deployment)로 전달할때 사용하는 포트

2. 실행

2-1. 쿠버네티스(rancher-desktop)

rancher-desktop을 이용하여 진행(wsl-ubuntu 사용)

  1. rancher-desktop 다운로드(https://rancherdesktop.io/)
  2. rancher-desktop 설치
  3. WSL Integration에서 사용하고 있는 Ubuntu를 체크하면 됨.

2-2. MiniO 사용

  1. 가지고 있는 yml파일을 이용해 create
  2. 외부 주소를 이용해 파일을 create

참고 내용

  • apply VS create
    • apply : 리소스가 존재하지 않을 경우 새로운 리소스가 생성/ 리소스가 이미 존재할 경우 리소스를 구성(부분적인 spec을 적용)
    • create : 리소스가 존재하지 않을 경우 새로운 리소스가 생성 / 리소스가 이미 존재할 경우 ERROR가 발생

2-2-1. 가지고 있는 yml 파일을 이용해 create

  1. Deployment 생성
kubectl create -f minio-deployment.yml
#또는
kubectl apply -f minio deployment.yml
  1. Deployment 확인
kubectl get deployment

  1. service 생성
kubectl create -f minio-deployment.yml
# 또는
kubectl apply -f minio deployment.yml
  1. service 확인
kubectl get svc

  1. pods 확인
kubectl get pods
#또는
kubectl get pod 

  1. 상세 내용 확인
# pod 전체
kubectl describe pods
# 해당 포드 상세 내용 확인
kubectl describe pods {포드명}

2-3. MniO console 브라우저 접속

  • 주소창에 localhost:30333 입력
    • console port를 30333으로 지정해 놓았음. 별도로 지정하지 않는다면 랜덤한 숫자가 부여됨
  • 아이디 minio / 비밀번호 minio123
    • 아이디와 비밀번호를 해당 문자로 지정해 놓았음.

  • 접속 완료 화면

3. 이슈 사항 정리

3-1. 노드 선택

  • deployment에서 노드를 지정하지 않아서 에러가 발생했었다.
    • nodename을 명시해 주어 해결

3-2. Pod 무한 생성

  • deployment를 create하는 순간 pod가 무한 생성 된다.
  • describe로 확인해보면 아래와 같은 이벤트가 보인다.
  • deployment에서 nodeSelector로 key : localhost를 명시해 주었는데 현재 노드에 라벨링 되어 있지 않아서 발생하는 문제였던것 같다.
    • node에 라벨링을 해주어서 해결
kubectl label nodes da-pc-0484 key=localhost

이렇게 로컬 환경에서 rancher-desktop을 이용해 kubernetes를 사용 하고 kubernets위에 MiniO를 띄워 MiniO 콘솔 브라우저에 접속하는 실습을 진행해 보았습니다.

profile
GitHub - https://github.com/jenu8628

0개의 댓글