[Kubernetes] 쿠버네티스에서 POD(파드)란? 그리고 POD 생성하기
[Kubernetes] 쿠버네티스에서 POD(파드)란? 그리고 POD 생성하기
l Kubernetes
파드(Pod)는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이다. 도커가 가장 일반적으로 잘 알려진 컨테이너 런타임이지만, 쿠버네티스는 도커 외에도 다양한 컨테이너 런타임을 지원한다.
파드는 하나 이상의 컨테이너의 그룹이며 스토리지 및 네트워크를 공유하고, 해당 컨테이너를 구동하는 방식에 대한 명세를 갖는다. 파드의 컨텐츠는 항상 함께 배치되고, 스케줄되며, 공유 컨텍스트에서 실행된다. 즉, 파드는 공유 네임스페이스와 공유 파일시스템 볼륨이 있는 컨테이너들의 집합과 비슷하다.
파드는 각 애플리케이션의 "논리 호스트"를 모델링한다. 여기에는 상대적으로 밀접하게 결합된 하나 이상의 애플리케이션 컨테이너가 포함된다. 클라우드가 아닌 컨텍스트에서, 동일한 물리 또는 가상 머신에서 실행되는 애플리케이션은 동일한 논리 호스트에서 실행되는 클라우드 애플리케이션과 비슷하다.
애플리케이션 컨테이너와 마찬가지로, 파드에는 파드 시작 중에 실행되는 초기화 컨테이너가 포함될 수 있다. 클러스터가 제공하는 경우, 디버깅을 위해 임시 컨테이너를 삽입할 수도 있다. 쿠버네티스에서는 이러한 파드를 생성하기 위한 방법으로 kubectl run, kubectl create, kubectl apply 로 3가지가 있다. 각 각의 특징에 대해서 알아본다.
[kubectl run]
kubectl run은 kubernetes 클러스터에서 파드나 작업을 생성하는 명령어이다. 가장 간단하게 pod를 만드는 방식이며, 실행 명령어 뒤에 각종 옵션 정보를 입력해서 생성한다. 가장 간편한 실행 방법인 반면 입력 정보가 남지 않기 때문에 재실행 및 문제가 발생했을 때 원인을 찾거나 해결 방법을 공유하는 등의 어려움이 있다. 일반적인 개발 단계에서 간편하게 pod를 생성할 때 유용하지만 많은 옵션을 함께 사용해야 할 경우 모든 명령어를 입력해야하기 때문에, yaml을 작성하여 사용하는 것이 일반적이다. 기본 구조는 아래와 같다.
Kubectl run [파드이름] –image=[이미지 이름] |
아래 예시는 파드 생성시 실행할 이미지를 지정한다.
kubectl run nginx --image=nginx |
아래 예시는 실행할 파드의 개수를 지정한다. Nginx 이미지를 사용하여 3개의 파드를 생성한다. 파드가 중간에 삭제되면 지정한 개수만큼 파드가 유지되도록 파드가 자동 생성된다.
kubectl run nginx --image=nginx --replicas=3 |
아래 예시는 파드를 생성할 때 포트 번호를 노출시킨다.
kubectl run nginx --image=nginx --port=80 |
아래 예시는 파드를 생성할 때 다양한 환경변수를 대입하여 파드를 실행한다.
kubectl run my-proxysql --image=my-proxysql --port=6033 --image-pull-policy=Never --restart=Never --env PROXY_ADMIN_PWD=pwd --env PROXY_ADMIN_ID=id |
[kubectl create]
Kubectl create 명령은 kubernetes에서 새로운 리소스를 생성할 때 사용한다. 이 명령을 사용하면 yaml파일을 생성하지 않고도 명령어 자체에서 리소스를 생성할 수 있다. 기본구조는 아래와 같다.
kubectl create [리소스 종류] [리소스 이름] |
아래 예시는 Nginx 이미지를 사용하는 my-nginx라는 pod 리소스를 생성한다.
kubectl create pod my-nginx --image=nginx |
아래 예시는 Nginx 이미지를 사용하는 my-deployment 이름을 가진 Deployment 리소스를 생성한다.
Kubectl create deployment my-deployment --image=nginx |
아래 예시는 80포트를 8080으로 매핑하는 my-service라는 이름의 ClusterIP 서비스 리소스를 생성한다.
Kubectl create service clusterip my-service --tcp=80:8080 |
아래 예시는 key1=value1, key2=value2 데이터를 가진 my-config 이름을 가진 ConfigMap 리소스를 생성한다.
kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2 |
아래 예시는 password=1234데이터를 가진 my-secret 이름의 secret 리소스를 생성한다.
Kubectl create secret generic my-secret --from-literal=password=1234 |
아래 예시는 리소스를 생성하지 않고 생성 결과만 미리 확인한다.
kubectl create deployment my-deployment --image=nginx --dry-run |
아래 예시는 파일(yaml 또는 json)을 사용하여 리소스를 생성한다.
kubectl create -f test.yaml |
아래 예시는 리소스가 생성될 네임스페이스를 지정한다.
Kubectl create deployment my-deployment --image=nginx -n my-namespace |
아래 예시는 컨테이너의 재시작 정책을 지정한다. 상태는 Always, OnFailure, Never 중 하나를 사용한다.
Kubectl create pod my-pod --image=nginx --restart-policy=OnFailure |
[kubectl apply]
kubectl apply는 kubectl create와 동일하지만 가장 큰 차이점은 기존에 동일한 pod가 없다면 새로운 pod를 생성하고, 이미 동일한 pod가 존재하는 경우 기존 config와 비교하여 수정된 부분만 업데이트 한다.
[kubectl delete]
파드나 리소스를 삭제하기 위해서는 kubectl delete 명령을 사용한다. 기본 구조는 아래와 같다.
Kubectl delete [리소스 유형] [리소스 이름] |
아래 예시는 nginx라는 파드를 삭제한다.
kubectl delete pod nginx |
삭제할 때 다양한 옵션을 함께 사용할 수 있다.
l --all : 모든 리소스를 삭제
l --force : 강제로 삭제
l ---grace-period=<second> : 대기시간(초) 이후 삭제 설정
l --timeout=<second> : 명령이 실행될 때 대기할 최대 시간(초) 설정
2023-09-08 / Sungwook Kang / https://sungwookkang.com
Kubernetes, 쿠버네티스, pod, 파드, kubectl, create, delete, apply, 파드생성, 리소스 생성