본문 바로가기

Programming/Cloud

DAY 174. 쿠버네티스(Kubernetes) - Pod 사용하기

 

Pod

Kubernetes에서 컨테이너를 만들고 관리할 수 있는 가장 작은 배포 가능 단위

쿠버네티스의 오브젝트 종류 중 하나

컨테이너를 실행하기 위한 환경

1개의 포드는 1개 이상의 컨테이너가 존재할 수 있다.

일반적으로 1개의 컨테이너를 생성해서 사용한다.

 

- 쿠버네티스에서는 하나의 애플리케이션을 배포하기 위한 가장 작은 단위를 Pod라고 부른다.

- Pod는 하나의 애플리케이션을 나타내기 위한 컨테이너 그룹이다.

- Pod 하나는 하나의 완전한 애플리케이션이라고 생각하면 된다.

- 하나의 Pod 안에는 하나의 컨테이너, 혹은 여러 개의 컨테이너가 존재할 수 있다.

- 하나의 애플리케이션을 여러 개의 컨테이너가 필요하다면 추상적으로 하나의 단위로 컨테이너를 묶는 것을 Pod라고 한다.

- Pod != 컨테이너

- 주컨테이너사이드카컨테이너로 나뉜다.

 

 


 

[ 실습 환경 만들기 ] 테스트용 이미지를 만들기

- index.jsp 파일 준비

- 이미지 만들기

-  Dockerfile 빌드

- 현재 Pod 내부에 있는 IP를 찍어보자.

 

 

이미지가 잘 만들어진 것을 확인할 수 있다.

 

 

 

Pod 생성하기

kubectl run Pod명 --image=이미지명 [옵션]

- 일반적으로 Yaml 파일을 이용해서 생성하는 것을 권장

예시 > kubectl run kuweb1 --image=testweb:1.0 --port=8080
--port :
컨테이너가 노출하는 포트

 

 

▶ Pod의 목록 확인

kubectl get pods [옵션]

▷ - o : 아웃풋을 어떻게 할 것인지 옵션

- + wide : 상세보기

- + json : JSON 스타일로 보이기

 

 

 

▷ NAME : Pod의 이름

▷ READY : /구동 완료된 것

▷ STATUS : 상태값

- ContainerCreating : 아직 만드는 중

- Running : 모든 컨테이너가 만들어져서 구동됨)

▷ RESTARTS : Pod가 실행된 시간?

▷ AGE

▷ IP : Pod의 IP

▷ NODE : 노드에 대한 정보

 

 

▶ pod 상세 정보 확인

kubectl describe pod

 

 

 

 

▶ Pod 컨테이너 명령 실행

kubectl exec Pod명 [-c 컨테이너명] [옵션] -- 명령어 [args ...]

 

▷ 외부에서 명령어 실행

- pwd : 현재 작업 경로 출력하는 명령어

예시 > kubectl exec kuweb -- pwd

 

▷ 컨테이너 내부에서 명령어 실행

- /bin/bash : 쉘로 접근해서 명령어 실행 (종료 = exit)

예시 > kubectl exec kuweb -it -- /bin/bash

 

 

 

 

 

▶ 접속 확인

- 컨테이너가 만들어진 상태이지만, 실제로 외부에 노출된 것은 아니다. 브라우저에서 접근할 수 없다.

 

- 쿠버네티스에서는 외부에서 Pod에 접근할 수 있도록 하려면(Pod를 외부에 노출시키려면) 쿠버네티스 서비스 오브젝트를 따로 만들어야 한다.

 

- 외부에서는 불가능하지만, 내부에서 접근할 때는 Pod를 하나 더 만들고 Pod IP를 통해서 접속 가능하다.

 

- 내부에서 접속 테스트를 위해서 임시로 서버 설치 후 Curl 도구 활용해서 테스트 진행

(Curl : HTTP, HTTPs 기타 프로토콜을 사용해서 URL을 통해서 요청을 보낼 수 있다. 다양한 통신 프로토콜을 이용해서 데이터를 주고 받을 수 있도록 하는 프로그램)

 

 

 

 리눅스 서버 설치

kubectl run -it kuserver --image=alpine:latest

 

 

 

▶ Pod 삭제

kubectl delete pod Pod이름

 

 

 

다른 Powershell 2 띄워서 이렇게 보면 IP를 확인할 수 있다.

 

 

더보기

[지금 어떤 상황이냐면]

쿠버네티스가 Pod를 안에 2개를 만든 상황임

첫 번째 Pod의 IP는 10.1.0.6이고, 두 번째 Pod의 IP는 10.1.0.8이다.

외부에서 접근하는 것은 불가능한 상황이다. (서비스 오브젝트가 필요하다.)

그래서 지금은

쿠버네티스 내부에 있는 Pod들 끼리는 IP를 가지고 요청, 응답을 주고 받을 수 있다.

요청을 보내고 응답을 받기 위한 도구로 CURL을 활용한다.

명령어를 curl 10.1.0.6:8080 (컨테이너가 톰캣 포트를 개방했기 때문에) 로 요청을 보내면

응답하는 화면을 보내주게 된다.

 

 

아까 index.jsp 에 적은대로 보이게 된다.

 

 

 

실습에 사용한 명령어들

kubectl get pods

kubectl exec -it kuserver -- /bin/ash : 셸로 들어감

 

curl 설치

 

kubectl get pods -o wide

 

 

 

/ # curl 10.1.0.20:8080

 

 

 

Pod는 포트로 구분한다.