kubernetes

k8s: minikube 클러스터 만들기 - 1

PSAwesome 2022. 5. 18. 18:08
반응형

안녕하세요.

해당 포스팅은 minikube를 활용한 샘플 애플리케이션 배포 실습 과정입니다.

주된 목적은 yml 작성 연습 및 이해입니다.

따라서, 튜토리얼 진행 중 작성자가 궁금한 내용을 (쿠버네티스 공식 튜토리얼 외) 실습으로 포함할 수 있습니다.

https://kubernetes.io/ko/docs/tutorials/hello-minikube/

 

Hello Minikube

이 튜토리얼에서는 Minikube와 Katacoda를 이용하여 쿠버네티스에서 샘플 애플리케이션을 어떻게 실행하는지 살펴본다. Katacode는 무료로 브라우저에서 쿠버네티스 환경을 제공한다. 참고: 로컬에서

kubernetes.io

 

minikube는 설치되어 있다고 가정합니다.

 

minikube 클러스터 만들기

 

minikube start
minikube dashboard

 

minikube 실행 명령어

 

실행 결과 화면

 

참고:

kubectl 명령어 설명인데, 먼저 훑어보고 명령어 진행하시면 좋을 것 같아 링크 걸어둡니다.

https://kubernetes.io/ko/docs/reference/kubectl/overview/

 

 

이제 튜토리얼로 돌아가서!

 

디플로이먼트 만들기

- deployment를 생성하고 pod를 관리하도록 합니다.

 

kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4

 

 

kubectl get deployments

 

kubectl get pods

 

 

위 결과물로 봤을 때
파드를 디플로이먼트에 생성하면
deployments, pods 
두 곳에서 확인이 가능합니다.

 

디플로이먼트가 죠르디(?) 느낌으로 pod를 모니터링하며 관리하는 것이 떠오릅니다.

 

반면, pod로 직접 생성한 h2는 deployment 목록에선 확인되지 않는 것을 볼 수 있는데요.

대시보드에서 보여주듯 각 생성 명령어마다 생성 및 관리 위치를 간단히 알 수 있습니다.

kubernetes dashboard

  • deployment 생성 (kubectl create deployment)
    • pod
    • replica set
  • pod 생성 (kubectl run h2 --image=h2)
    • pod

 

클러스터 이벤트 보기

kubectl get events

 

kubectl 환경설정 보기

kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority: /Users/nhn/.minikube/ca.crt
    extensions:
    - extension:
        last-update: Tue, 17 May 2022 13:37:33 KST
        provider: minikube.sigs.k8s.io
        version: v1.25.2
      name: cluster_info
    server: https://127.0.0.1:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    extensions:
    - extension:
        last-update: Tue, 17 May 2022 13:37:33 KST
        provider: minikube.sigs.k8s.io
        version: v1.25.2
      name: context_info
    namespace: default
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /Users/nhn/.minikube/profiles/minikube/client.crt
    client-key: /Users/nhn/.minikube/profiles/minikube/client.key

 

 

 

서비스 만들기

파드는 기본적으로 쿠버네티스 클러스터 내부의 ip 주소로만 접근 가능.

외부에서 파드에 접근하려면 서비스로 노출해야 합니다.

kubectl expose deployment hello-node --type=LoadBalancer --port=8080

 

서비스 상태 확인 (아직 사용자 pc에서 접근이 되지 않음)

kubectl get services

  • h2-tcp, hello-node 상태가 pending 
  • external-ip:8080 접근 시 hello-node에 접근이 되지 않는 상태입니다.

 

minikube 클러스터를 사용하는 상태에서의 LoadBalancer 타입은 `minikube service` 명령어를 입력하여 서비스 접근이 가능합니다.

명령어 이후에도 pending이 지속된다면 아래 명령어를 입력해주세요.

(LoadBanalcer 연결 명령어입니다.)

minikube tunnel

* 위 내용을 몰라서 h2 service를 만들었음에도 로컬 pc에서 접근하지 못했습니다.

참고로 minikube 클러스터 사용이란, `minikube start` 로 클러스터를 가동시킨 상태를 의미합니다. (되새김질)

 

서비스 연결하기

minikube service hello-node

 

external-ip:8080 확인

http://10.103.22.68:8080

 

파드에 정상 접근이 가능한 것을 확인했습니다.

이제 제가 이 과정에서 하고 싶었던 h2 database 를 실습해보도록 하겠습니다.

 

H2 실습

 

기억을 되살려서 먼저 정리를 해보면 아래와 같습니다.

  1. image 주소 확인
  2. deployment create
  3. deployment 조회
  4. expose 공개 설정
  5. service 연결
  6. 접근 확인

 

1. image 주소 확인

https://hub.docker.com/r/oscarfonts/h2

 

docker pull oscarfonts/h2

oscarfonts/h2

이미지를 사용할 예정입니다.

running 예제를 보아하니, 1521 포트와 81 포트를 사용하는 것 같습니다.

docker run -d -p 1521:1521 -p 81:81 -v /path/to/local/data_dir:/opt/h2-data -e H2_OPTIONS=-ifNotExists --name=MyH2Instance oscarfonts/h2

 

 

2. deployment 생성

 

kubectl create deployment h2 --image=oscarfonts/h2

 

 

3. 조회 

kubectl get deployments

정상적으로 생성이 되었습니다.

 

4. expose 공개 설정

kubectl expose deployment h2 --type=LoadBalancer --port=81

 

5. service 연결 확인 (minikube tuunel 실행 중이라 자동으로 연결이 되었습니다.)

kubectl get services

 

 

6. 접근확인

http://10.102.118.62:81/

원활한 서비스 이용은 안되지만 일단 접근이 가능해진 것을 확인했습니다.

여러 port 전달이나 환경 변수는 추후 yml 파일로 생성할 때 다시 h2 예제로 실습해볼 예정입니다.

 

감사합니다!

 

반응형