쿠버네티스에서는 Pod라는 단위로 컨테이너를 묶어서 관리한다.
1개의 Pod는 1개의 컨테이너 or 2개 이상의 컨테이너를 포함한다. (일반적으로는 단일 컨테이너를 포함해서 사용한다)
다수의 컨테이너를 포함할 경우, 항상 포드 전체가 단일 워커노드에서 실행된다.
(다시 말해, 1개의 포드가 여러 워커노드에 걸쳐있을 수 없다는 말이다)
왜 여러 개의 컨테이너를 Pod단위로 묶어서 배포할까?
여러개의 프로세스를 하나의 컨테이너로 묶으면 안되기 때문에, 컨테이너를 단일 단위로 관리할 수 있는 상위 레벨 구조가 필요하다. 이를 통해, 마치 하나의 컨테이너에서 실행되는것 처럼 환경을 제공하면서 다소 격리된 상태로 유지할 수 있다.
Pod 특성
- Pod는 자체IP주소를 가지며, pod내의 컨테이너는 IP와 Port를 공유한다.
- 즉 2개 이상의 컨테이너가 하나의 Pod를 통해 배포되었을 때, 다른컨테이너화 Localhost로 통신 가능하다.
- 동일한 Pod의 컨테이너에서 실행중인 프로세스는 동일한 포트번호에 바인딩 되지 않도록 주의해야 한다.
- Pod내에 배포된 컨테이너 간에는 디스크 볼륨을 공유할 수 있음.
- Ex. 어플리케이션 과 로그 수집기와같은 다른 솔루션과 함께 배포되는 케이스도 가능하다.
- 포드간에 통신은 항상 단순하다. 모든 포드는 1개의 플랫 네트워크에 위치하며, 다른 모든 포드에 액세스할 수 있다.
컨테이너를 포드 전체에 적절하게 구성하려면,
- 다수의 pod로 어플리케이션 분할하기
Ex. 웹서버와 DB가 실제로 같은 머신에서 실행되어야 할까? 답은 아니다.
포드를 2개로 구분한다면, 하나의 노드에서 프론트엔드(웹서버)와 다른 노드에서 백엔드(DB)를 스케줄링 할 수 있으므로 인프라의 활용도가 높다.
- 각각 사이즈 스케일링이 가능한 포드로 분할해야한다.
Ex. 프론트엔드 웹서버와 백엔드 DB서버의 경우, 이를 개별적으로 구성해서 스케일업 등의 요구가 있을때 개별적로 대응해야한다.
[Yaml or JSON으로 pod 생성]
$ Kubectl create -f kubia-manual.yaml |
kubia-manual.yaml
apiVersion: v1
Kind: Pod
Metadata:
name: kubia-manual
annotations : kubernetes.io/createby=testuser
Spec:
containers:
- image : luksa/kubia
name: kubia
ports:
- containerPort: 8080
- protocol: TCP
디스크립터를 읽어보면, 쿠버네티스 API v1버전을 준수한다.
Kubia-manual이라는 이름의 Pod를 생성한다.
luksa/kubia 이미지를 기반으로 하는 컨테이너로 구성되며, 8080포트를 대기중(listening)이다.
위에서 포트를 지정하지 않아도 연결되는데는 문제되지 않는다. 명시적으로 나열되지 않더라도 다른 포트가 연결될 수 있다. 그러나, 클러스터를 사용하는 모든 사용자가 포트를 빠르게 확인할 수 있도록 명시적으로 정의하는것이 좋습니다.
실행중인 포드 정의 검색
$ kubectl get po kubia-manual -o yaml |
$ kubectl get po kubia-manual -o json |
포드에 주석달기
포드와 그밖의 객체에도 주석을 넣을 수 있습니다. Annotation 이라고 하는데, 비교적 큰 용량(256KB)까지 포함될 수 있습니다.
포드 생성시에 yaml이나 json 에 포함해서 생성할 수 있지만, 생성 후에 추가하거나 수정할 수 있습니다.
$ kubectl annotate pod kubia-manual mycompany.com/annote="test"
포드의 삭제
먼저 이름으로 삭제하는 방법
$ kubectl delete po kubia-manual |
네임스페이스로 삭제
$ kubectl delete ns custom-namespace |
'IT Knowledge > Kubernetes' 카테고리의 다른 글
Kubernetes 별칭 및 자동완성 (0) | 2021.01.22 |
---|---|
kubernetes Deploy Strategy(배포전략) (0) | 2020.12.29 |
Kubernetes, Docker 지원중단(Deprecation) 발표 12.02 (4) | 2020.12.22 |
Kubernetes 기본 명령어 정리(kubectl) (0) | 2020.12.21 |
Kubernetes Ingress 설명(개념) (0) | 2020.12.17 |
댓글