파드는 응집력있는 서비스 단위를 형성하는 여러 협력 프로세스(컨테이너)를 지원하도록 설계되었다. 파드의 컨테이너는 클러스터의 동일한 물리 또는 가상 머신에서 자동으로 같은 위치에 배치되고 함께 스케줄된다. 컨테이너는 리소스와 의존성을 공유하고, 서로 통신하고, 종료 시기와 방법을 조정할 수 있다.
예를 들어, 다음 다이어그램에서와 같이 공유 볼륨의 파일에 대한 웹 서버 역할을 하는 컨테이너와, 원격 소스에서 해당 파일을 업데이트하는 별도의 "사이드카" 컨테이너가 있을 수 있다.
일부 파드에는 앱 컨테이너 뿐만 아니라 초기화 컨테이너를 갖고 있다. 초기화 컨테이너는 앱 컨테이너가 시작되기 전에 실행되고 완료된다.
main: web sercer / second: file puller
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers: #required
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
apiVersion, kind, metadata, spec은 yaml 파일로 쿠버네티스를 작성할 때 필수로 들어가는 항목들이다. (순서는 딱히 상관 없음)
kubectl explain
명령어로 해당 명령어에 대한 설명을 볼 수 있다.
ports에서 multiports를 사용하는 경우도 있기 때문에 list로 작성해야 한다.
kubectl create -f myapp-pod.yaml #생성
kubectl delete -f myapp-pod.yaml #삭제
kubectl apply -f myapp-pod.yaml #생성
kubectl get pods #pods 목록 확인
kubectl get pods -o wide #pod 출력 확장
kubectl get pods -o yaml # yaml형태로
kubectl describe pod myapp-pod #상세정보 확인
-o wide와 pods의 차이
-o yaml
kubectl describe pod myapp-pod
kubectl describe에서 Events 등을 확인할 수 있다.
kubectl logs myapp-pod
logs는 여타 다른 명령어처럼 리소스의 종류가 명령어에 들어가지 않는데, 이는 logs가 어플리케이션 로그이기 때문에 pod만 존재하기 때문이다.
어플리케이션의 log와 해당되는 오브젝트의 log는 다른데, 오브젝트의 log는 describe 명령어로 확인할 수 있다.
kubectl port-forward pod/myapp-pod 8080:8080
어플리케이션만 포트포워딩을 할 수 있기 때문에 pod 이름만 지정하면 된다. 호스트 포트:컨테이너 포트 순으로 지정한다(컨테이너 포트는 변경할 수 없음)
foreground 상태에서 실행되기 때문에 새로운 터미널을 열어서 명령어를 실행해야 한다.
기본적으로 테스트로 사용하는 명령어이고, 외부로 영구적으로 노출시키기 위해서는 expose 명령어를 사용하여 service를 만들고 외부로 노출시킨다.