## 파드란 무엇인가?
파드(Pod) 는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이다.
쉽게 이야기하여 docker image를 실행시킨 컨테이너를 감싸고있는 단위라고 생각할 수 있다.
한 파드 안에 여러개의 컨테이너가 생성 될 수 있으며 그 컨테이너끼리는 로컬로 통신하기 때문에 같은 포트를 사용할 수 없다. 파드는 휘발성이기 때문에 삭제하고 재 생성할 때 마다 IP가 바뀐다.
## 파드 생성하기 ( 명령어로 진행)
먼저 kubectl run 명령어를 실행 해 준다.
위 내용을 살펴보면 webserver라는 이름을 생성하고, image는 nginx 이미지를 사용하고 port는 80 포트를 사용한다.
pod/webserver가 생성되었다는 것을 알 수 있다.
kubectl run 파드 이름 --image=생성하려는 이미지 --port 포트 넘버
그 후 kubectl get pods -o wide 라는 명령어를 써서 pods의 상태를 확인 해 봤다.
현재 webserver 라는 이름의 pod가 실행되고 있고 worker node1에서 파드가 실행되는 것을 확인할 수 있다.
또한 curl 명령어를 통해서 내부 IP와 포트를 입력 해 보니 성공적으로 nginx 웹 서버가 띄워진 것을 확인할 수 있다.
이 전에는 kubectl run 명령어를 사용했다. run 명령어는 1개의 파드를 띄우는 데 적합하다.
하지만 여러개의 파드를 띄우기 위해서는 create deployment 명령어를 사용해야 한다. 파드의 이름과 image를 선택한 다음 replicas 라는 옵션을 통해서 webserver 라는 이름을 가진 파드를 총 4개를 생성 해 주었다.
kubectl create deployment 파드이름 --image=이미지이름:버전 --replicas=생성하려는 숫자
그 후 kubectl get pods라는 명령을 통해서 4개의 파드가 성공적으로 띄워진 것을 확인 할 수 있다.
또한 worker1과 2에 두개 씩 파드가 생성 된 것을 확인할 수 있었다.
그리고 kubectl get deployments.apps 라는 명령어를 입력하면 우리가 위에서 생성했던 deployment.apps의 이름과 몇개가 생성되었고 몇개가 사용 가능한 지 등의 정보를 확인할 수 있다.
=========================================================================================
## 실습 2 파드 외부 노출
그렇다면 이러한 파드를 외부에 오픈하려면 어떻게 해야할까?
먼저 kubectl get services 라는 명령어를 입력한다.
그렇다면 쿠버네티스라는 서비스 하나만 찾을 수 있다.
이는 클러스터를 시작할 시 기본적으로 생성되는 것이라고 생각하면 된다.
새로운 서비스를 만들고 외부 트래픽으로 노출시키기 위해 nodeport를 파라미터로 사용하는 expose 명령어를 사용해야 한다.
여기서 NodePort라는 파라미터는 외부에서 노드 IP의 특정 포트로 들어오는 요청을 감지하여 해당 포트와 연결된 파드로 트래픽을 전달하는 유형의 서비스이다.
먼저 nginx라는 이름을 가진 nginx 이미지 하나를 띄운다.
그 다음 위에서 언급한 expose 라는 명령어를 통해서 파드를 외부로 노출시켜 준다.
kubectl get service 명령어를 통해 service의 리스트를 확인해 보니 webserver의 포트를 확인할 수 있다.
현재 내가 생성한 pod는 worker1 Node 안에 있다.
그러므로 Worker1 Node의 internal ip를 입력한 후 위에서 확인한 32713 포트를 입력한다면 외부에서 역시 접근이 가능 할 것이다.
nginx 화면이 잘 뜬 것을 확인할 수 있다.
여기서 좀 많이 해맸다.
나는 virtual box를 사용하였고 NatNetwork 설정을 통해서 네트워크 설정을 해 두었다.
Nat network 설정시 외부에서 접속하기 위해서는 virtualbox에서 포트포워딩 규칙을 지속적으로 추가하고 삭제해 줘야 한다.
이 역시 localhost 32713 으로 들어가면 Worker1의 32713으로 들어갈 수 있게 포트 포워딩을 해 주니 비로소 nginx 화면이 뜨는 것을 확인 할 수 있었다.
============================================================================================
## 파드 생성하기 (yaml로 생성)
먼저 폴더를 하나 생성 해 준다. 그 후 whoami.yml이라고 하는 yml 파일을 생성 해 줄 것이다.
vi 편집기로 연 다음 위의 내용을 입력 해 준다.
apiVersion, kind, metadata의 name 값은 필수 값이다.
apiVersion은 v1이 될 수도 있고 beta가 될 수도 있다.
kind는 Pod인지 Service인지 등을 선택할 수 있다.
metadata는 컴포넌트를 서로 구분지어줄 수 있는 이름 및 설명을 입력하는 부분이다.
Pod의 상세한 내용을 spec에 작성한다.
containers는 배열이지만 하나만 넣을 것이고 이름은 app이고 이미지를 작성하면 된다.
그 후 wq로 저장해준다.
작성이 완료되면 yamlfolder로 들어간 후 kubectl apply -f (file 이름)을 입력 해 준다.
정상적으로 입력이 완료 되었다면 pod가 created 된 것을 확인할 수 있다.
그렇다면 성공적으로 whoami가 생성 된 것을 확인 할 수 있다.
현직에서는 명령어보다는 yaml 파일을 많이 쓴다고 하니 yaml 생성 방법 또한 잘 숙지해야 한다.
참조
Nodeport를 이용해 외부에서 접속이 안됩니다. - 인프런 | 질문 & 답변 (inflearn.com)
'[Kubernetes]' 카테고리의 다른 글
sample devops end to end project v1- devops project | ci/cd declarative pipeline using devops tools (0) | 2023.07.22 |
---|---|
[마이크로 서비스] 사용하지 않는 경우!! (0) | 2023.07.11 |
[k8s] Deployments란 무엇인가? & Update 방식 (0) | 2022.11.23 |
[k8s] YAML 기본 문법 및 k8s yaml 작성방법 (0) | 2022.11.23 |
[k8s] kubernetes의 Service가 무엇인가? (0) | 2022.11.22 |
[k8s] Helm을 통해 Prometheus, Grafana 적용하기 (0) | 2022.11.22 |
[K8s] 쿠버네티스란 무엇인가? (0) | 2022.11.16 |
[k8s] 프로메테우스란 무엇인가? (개념 및 아키텍쳐) (0) | 2022.11.15 |
댓글