안녕하세요.
해당 포스팅은 minikube를 활용한 샘플 애플리케이션 배포 실습 과정입니다.
주된 목적은 yml 작성 연습 및 이해입니다.
따라서, 튜토리얼 진행 중 작성자가 궁금한 내용을 (쿠버네티스 공식 튜토리얼 외) 실습으로 포함할 수 있습니다.
https://kubernetes.io/ko/docs/tutorials/hello-minikube/
minikube는 설치되어 있다고 가정합니다.
minikube 클러스터 만들기
minikube start
minikube dashboard
실행 결과 화면
참고:
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 목록에선 확인되지 않는 것을 볼 수 있는데요.
대시보드에서 보여주듯 각 생성 명령어마다 생성 및 관리 위치를 간단히 알 수 있습니다.
- 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 실습
기억을 되살려서 먼저 정리를 해보면 아래와 같습니다.
- image 주소 확인
- deployment create
- deployment 조회
- expose 공개 설정
- service 연결
- 접근 확인
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 예제로 실습해볼 예정입니다.
감사합니다!
'kubernetes' 카테고리의 다른 글
kubernetes localhost 연결 - sonarqube (0) | 2022.07.21 |
---|---|
k8s: yaml 파일 구조 - 2 (0) | 2022.05.31 |
쿠버네티스 아키텍처 - 클러스터 (0) | 2020.06.15 |
쿠버네티스의 클러스터 - 개념정리 (0) | 2020.06.06 |
쿠버네티스 시작하기 - RUN (0) | 2020.06.06 |