https://loy124.tistory.com/400
위 minikube 설치에 이어 진행한다.
이제 쿠버네티스의 큰 흐름에 대해 알아보고 진행하려고 한다.
쿠버네티스에 대해 이해하려면 먼저 클러스터라는 개념에 대해 이해하고 있어야한다.
쿠버네티스 클러스터
간단하게 클러스터는 영어로 군체, 집속체, 무리라는 뜻으로 쿠버네티스에서도 각 컨테이너화 된 애플리케이션을 실행하는 집합 요소들 이라는 의미를 가지고 있다.
- Control plane (Master Node)
쿠버네티스 클러스터 전체를 컨트롤하는 시스템이다.
스케줄링, 스케일링, 반영등 모든 기능들을 조율한다. - Worker Node
마스터 노드에 의해 명령을 받고 실제로 서비스 하는 컴포넌트
즉 마스터노드와 워커 노드로 나뉘어져 있으며 마스터 노드에서 워커 노드를 관리한다! 라고 생각할수 있겠다.
minikube를 활용하면 한대의 컴퓨터에서 편리하게 마스터 노드와 워커 노드들을 모두 구성할수 있다.
이제 간단하게 명령어를 정리하고 쿠버네티스 워커 노드들을 추가해 보자.
minikube 명령어
minikube node [add|start|stop|delete|list] 를 통한 제어가 가능하다.
minikube 는 운영환경에서 사용하는게 아닌 로컬환경에서 공부를 위해 사용되다보니
간략하게 정리하였고 자세한 내용은 아래 사이트에서 확인이 가능하다.
https://minikube.sigs.k8s.io/docs/commands/node/
일단 해당 minikube 명령어를 활용해 node를 추가해주겠다.
minikube node add
여기에서 worker node를 하나 더 추가해주겠다.
현재 이런 상태가 구성된것이다. 이제 나는 해당 워커 노드에 nginx를 추가 해서 서비스 하고싶다.
쿠버네티스 공식문서에서도
- 클러스터 만들기 (minikube로 실행시 클러스터가 생성된다)
- 앱 배포하기
- 앱 탐색하기
- 앱을 공개적으로 노출하기
- 앱 스케일링하기
- 앱 업데이트하기
순으로 되어있으니 비슷한 방식으로 가보려고 한다.
현재 1. 클러스터 만들기만 진행한 상태니 이제 앱을 배포해볼 상태다.
쿠버네티스 Deploy
쿠버네티스에서는 기본적으로 명령어 형식이 kubectl action resource 방식인데
kubectl get node - 현재 노드들 조회
kubectl get deployment - 현재 배포 조회
kubectl create deployment - 배포 생성하기
위와같은 식으로 동작한다.
이제 쿠버네티스 배포를 해보겠다.
kubectl create deployment nginx --image=nginx
kubectl get deployment
위와 같이 deployment가 정상적으로 수행된것을 확인할 수 있다.
deployment가 정상적으로 수행된 경우 그 결과를 기반으로 pod가 생성이 된다.
pod
- 쿠버네티스에서 만들고 관리할수 있는데 가장 작은 컴퓨팅 단위
- 볼륨으로 공유스토리지
- 고유한 클러스터 IP주소로 네트워킹 가능
- 컨테이너 이미지 버전 또는 특정 포트등 정보가 들어있다.
kubectl get pod -o wide
생성되어있는 pod 조회를 해보면
현재 워커 노드중 minikube-m02에 pod가 생성된것을 확인할 수 있다. (나머지 m03에도 nginx를 추가하는건 추후 scale에서 다룬다.)
여기까지 어떻게? 해당 pod들이 생성되었을까에 대한 세부 정보들을 조회하기 위해서는
kubectl describe
상세 정보 조회시 사용한다.
kubectl describe pod
위와같은 명령어를 통해 세부 정보 또한 조회가 가능하다.
kubectl logs
쿠버네티스에서 로그를 조회할 때 사용한다.
kubectl get pod
kubectl logs $파드이름
kubectl exec
특정 파드에 접속하고 싶을때 사용한다.
(접속 후 나갈때는 exit를 통해 나오면된다.)
kubectl exec -it 파드이름 -- bash
( bash 쉘을 활용해서 해당 파드에 접근하는 명령어)
쿠버네티스 Service
현재 배포를 하게 되면 각 노드에 맞게 pod가 생성되어있는 상태이다.
이제 생성된 애플리케이션을 외부나 내부에서 접근할수 있도록 해주는 작업이 Service 이다.
즉 디플로이로 파드를 생성하고 해당 파드들에 접근하는게 서비스이다.
이제 해당 deployment를 기반으로 노출을 시켜보겠다.
kubectl get deployment
kubectl expose deployment nginx --type=NodePort --port=80
kubectl get service
kubectl expose deployment nginx --type=NodePort --port=80
이름이 nginx 라고 되어있는 deployment 의 80번대 port를 노출하겠다라는 뜻
위까지 진행하면 이제 성공적으로 service 배포까지 완료하였다.
여기서 우리가 만든 서비스에 접근하고 싶다면
minikube가 아닌경우 -> 내 ip:30457 (get service 시 나온 port) 로 진행하면 된다
minikube인 경우
minikube service 서비스이름
위 코드가 실행됨과 동시에 새로 local에 포트가 할당되고 nginx가 실행되는것을 확인할 수 있다.
여기까지 진행하면 일단 간단하게 쿠버네티스를 통해 deploy -> service를 통해 실제 애플리케이션 동작까지 확인하였다.
스케일링
서버(컨테이너)를 여러개로 늘리는 행위를 스케일링이라 하는데 쿠버네티스에서도 해당 스케일링을 지원해준다.
이제 현재 하나의 노드에만 pod가 배포되어있는 상태인데 스케일링을 통해 pod의 수를 늘려보려고한다.
해당 작업을 위해 기존에 존재하는 service와 deployment를 지워주겠다.
kubectl delete service nginx
kubectl delete deployment nginx
kubectl scale
쿠버네티스에서 각 컨테이너 갯수를 조절할때 사용하는 명령어로
--replicas 에 만들고 싶은 갯수를 작성하면 된다.
kubectl create deployment nginx --image=nginx
kubectl scale deployment nginx --replicas=3
마지막으로 동일한 방법으로 service를 만들어주면 완성이다.
kubectl expose deployment nginx --type=NodePort --port=80
kubectl get service
minikube service nginx
여기까지 진행하면 앱을 만들고~ 서비스 하고 스케일링 하는것 까지 맛을 본거 같다.
하지만 불편한 요소가 존재했다.
반복 작업
같은 nginx를 배포하는 명령어가 지금은 짧지만 길다고 가정하면 이를 작성하는것 또한 일이다.
(개발자는 단순 반복작업의 귀찮은게 싫다..)
이제 해당 deployment와 service를 파일로 관리하는 법에 대해 적용해보고 service 배포시 NodePort라는 방식을 사용했는데 해당 방식이 어떤거고 어떤 방식을 또 활용할수 있는지 알아보려 한다.
'Docker, CI > 쿠버네티스' 카테고리의 다른 글
쿠버네티스 공부하기 3 - yaml 파일을 활용한 deploy/service 하기 (0) | 2023.07.23 |
---|---|
쿠버네티스 공부하기 1 - minikube 설치하기 (0) | 2023.07.13 |