INFRA/CICD

minikube - 쿠버네티스

SHIN SANHA 2024. 7. 22. 23:41
반응형

 


 

 

0. Kubernetes?

컨테이너화 되어있는 패키지를 사용하기 위해서 자동 배포와 스케일링 등을 제공하는 관리 플랫폼이다.

여기서 주의점은 쿠버네티스는 소스 코드 배포와 빌드 기능은 제공하지 않는다. 또한 로깅과 모니터링 기능도 없다.

나는 도커에 배포되어 있는 결과물을 관리할 수 있는 용도로 사용해보고자 한다.

 

쿠버네티스 클러스터는 아래 두 노드를 묶어 칭한다.

  • master 노드에서는 각 PC의 모든 워크 노드를 관리한다.
  • work 노드에서는 실제로 컨테이너 자체를 운영하고 스케줄링을 해준다. 우리가 사용할 컨테이너를 pod라는 형태로 묶어 관리한다. pod에는 여러 컨테이너가 들어있을 수 있다.


namespace?

  • 쿠버네티스의 오브젝트들이 모여있는 가상의 공간

 

 

1. 미니큐브

미니큐브는 테스트 용도로 또는 개발 용도로 간단하게 사용할 수 있는 Kubernetes 버전이다.

싱글 노드로 실행되는데, 싱글 노드는 마스터 역할과 워커노드 역할도 한다는 의미이다.

 

도커 데스크탑 > 우측 상단 설정 표시 > Kubernetes 메뉴 > Enable Kubernetes & Show system containers 선택 > 우측 하단 Apply&restart 클릭

 

쿠버네티스를 사용하기 위해선 컨테이너가 작동 중인 상태여야 한다.

Kubernetes에서 관리하고자 하는 최소한의 단위인 pod 안에는 우리가 실행하고자 하는 어떤 서비스, 어떤 미드웨어, 어떤 운영체제 어플리케이션들이 컨테이너로 패키징화되어 있어서 사용할 수 있는 상태가 되어야 한다.

 

 

2. 설치 확인

kubectl get nodes

 

 

minikube는 싱글 노드이다. 하나의 노드가 마스터와 워크노드 역할을 모두 한다.

 

 

3. 사용하고 있는 서비스 확인

kubectl get services

 

 

 

4. Nginx 다운받기

큐브 컨트롤(kubectl) 명령어를 통해서 간단하게 Nginx라는 웹서버를 다운로드 받아서 컨테이너 방식으로 기동하고, 다운로드 받았던 Nginx 이미지를 스크립트에 작성 및 실행할 것이다.

 

 

4-1) 이미지 실행

kubectl run sample-nginx --image=nginx --port=80

 

pod의 이름이 sample-nginx이다.

 

 

4-2) pod 확인

kubectl get pods

 

 

4-3) Nginx 설치

4-1 에서 실행했던 Nginx 이미지에서 Nginx를 설치한다.

kubectl create deployment sample-nginx --image=nginx

 

deployment는 우리가 가진 pod를 replicas 즉, 여러 개의 형태로 스케일링, 스케줄링 작업, 히스토리 작업을 할 때 사용할 수 있는 설치 개념이다. 또는 pod를 배포하는 개념이라고도 볼 수 있다.

 

 

kubectl get deployments

명령어를 통해 잘 만들어졌는지 확인이 가능하다.

 

 

sample-nginx라는 deployment에는 pod가 1개가 묶여서 정상적으로 실행되고 있다.

 

 

4-4) pod 삭제

아래 명령어를 통해 pod 삭제가 가능하다.

kubectl delete pod/sample-nginx-56dfc8544d-mjg2v

 

 

 

그러나 다시 pod가 새롭게 생겨나는 것을 볼 수 있다. deployment 형태로 pod를 실행하면 최소 pod 갯수를 유지한다.

그래서 Pod가 문제가 생겼을 때 최소 개수(replicas)만큼은 무조건 유지한다.

 

 

4-5) 최소 pod 개수 변경하기

kubectl scale deployment sample-nginx --replicas=2

 

 

4-6) deployment 삭제

kubectl delete deployment.apps/sample-nginx

 

 

5) Nginx 외부 배포 및 실행하기

호스트pc에서 사용하고 싶다면 현재 pod가 사용하고 있는 포트를 외부에서 사용할 수 있는 서비스 형태로 오픈을 시켜야한다.

그래야 윈도우, 맥OS에서도 사용할 수 있다.

 

 

5-1) pod 내부 접속하기

kubectl exec -it sample-nginx-56dfc8544d-mrlwl -- /bin/bash

 

 

5-2) apt-get 업데이트하기

nginx는 apt-get 즉 우분투 계열의 리눅스를 베이스로 한다.

apt-get update

 

 

 

5-3) curl과 wget 설치

apt-get install -y curl wget

 

 

5-4) 호스트 네임(ip) 확인

내가 접속한 pod의 ip를 확인한다.

hostname -i

 

 

5-5) nginx 웹서버를 설치했을 때 보이는 기본적인 내용을 확인하기

curl -X GET http://10.1.0.67

 

 

5-6) 서비스 생성 -> 외부공개

kubectl expose deployment nginx-deployment --port=80 --type=NodePort

 

NodePort : 각각의 노드에 포워딩이 된 상태로 쓸 수 있게 만들어 준다.

 

 

5-7) 만들어진 서비스 확인

kubectl get services

 

port에 80:31061 이런식으로 나오는데 앞쪽은 pod가 가진 포트번호 이고, 뒤는 host pc에서 사용할 수 있는 포트이다.

localhost:31061로 접속하면 nginx에 접속 가능하다.

반응형