마짱짱의 지식창고
[Kubernetes] WorkLoad - Pod 본문
반응형
워크로드 - 파드(Pod)
파드란?
-
객체모델중에서 만드고 배포할 수 있는 가장작은 단위
-
쿠버네티스 클러스터 내에서 어플리케이션을 배포하며 동작하는 프로세스
-
파드는 어플리케이션 컨테이너이고, 하나 이상의 컨테이너로 구성될 수 있다.
-
2가지 방법
-
단일 컨테이너만 동작하는 파드
-
(함께 동장하는 작업이 필요한)다중 컨테이너가 동작하는 파드
-
파드 정의
* 참고
API 리소스의 지원되는 필드의 목록은 kubectl explain 명령으로 확인가능
API버전 : v1
오브젝트 : POD
파드 오브젝트 이름 : mynapp-pod
컨테이너정의
컨테이너이미지 : msw951023/myweb
컨테이너이름 : mynapp
포트정의
응답대기 : 8080
프로토콜 : TCP
파드생성
$ kubectl create -f mynapp-pod.yml
실행중인 파드 정의 확인
$ kubectl get pods mynapp-pod -o yaml
파드 로그 확인
$ kubectl logs mynapp-pod
파드 포트 포워딩
$ kubectl port-forward mynapp-pod 8080:8080
레이블
- 쿠버네티스 클러스터의 모든 오브젝트(파드포함)에 키/값 쌍으로로 리소스를 식별하고 속성을 지정하는데 사용
- 오브젝트 개수가 많아진다면 식별하는데 매우 어려울 수 있으며,
오브젝트의 적절한 레이블을 부여하여 성격을 정의하고 검색을 용이하게 할 수 있다.
파드생성
$ kubectl create -f mynapp-pod-label.yml
파드 레이블 확인
$ kubectl get pods --show-labels
파드 특정레이블 필드로 확인
$ kubectl get pods -L env,tier
describe로도 레이블 확인가능
$ kubectl describe pods mynapp-pod-label
레이블 없는 파드에 레이블 추가하기
$ kubectl label pods mynapp-pod env=dev
기존에 있는 레이블에 수정하기
$ kubectl label pods mynapp-pod env=deb
- 하지만 오류가 뜰 것이다. 왜냐면 이미 dev 값이 있기 떄문 그래서
- overwrite 를 사용해야한다
$ kubectl label pods mynapp-pod env=debug --overwirte
레이블 셀렉터
-
오브젝트에 부여되어있는 레이블을 식별하고 검색할 수 있다.
-
검색 방법 2가지
- 특정 키가 있는/없는 레이블 포함
- 특정 키와 값이 있는/없는 레이블 포함
균등 기반 레이블 셀렉터
tier 키가 포함되어있는 레이블
$kubectl get pods --show-labels -l tier
tier 키를 제외한 레이블
$kubectl get pods --show-labels -l '!tier'
env 키에 debug 값이 포함되어 있는 레이블
$kubectl get pods --show-labels -l env=debug
env 키를 가지지만 --show-labels -l 'env!=debug'
$kubectl get pods --show-labels -l 'env!=debug'
ㅿ 참고
메타문자가 쉘에 의해 해석되지 않도록 따옴표로 묶어준다.집합성 기반 레이블 셀렉터
dev 키에 debug 또는 dev 값이 포함되어 있는 레이블
$kubectl get pods --show-labels -l 'env in (debug,dev)'
tier 킬르 가지지만 frontend 값이 포함되어 있지 않은 레이블
$kubectl get pods --show-labels -l 'tier notin (frontend)'
어노테이션(Annotation)
- 주석 이라고도하며 오브젝트에 메타데이터를 할당할 수 있다.
- 레이블과 비슷하게 키/값을 가지고 있지만, 레이블은 레이블 셀렉터를 이용하여 식별 및 검색할 수있지만,
어노테이션은 가지고 있지 않다. 즉 메타데이터를 추가해 추가적인 정보를 제공하기 위함이다.
네임스페이스(namespace)
- 모든 오브젝트에는 레이블을 부여할 수 있지만 레이블 셀렉터를 이용해서 식별 및 검색을 할 수 있을 뿐,
논리적으로 분리되어 있지 않다. - 많은 오브젝트를 관리할 떄 논리적으로 오브젝트의 분리해주는 역할
(Docker container의 핵심요소인 Linux Namespace와 관련 없다.)
네임스페이스 확인
$kubectl get namspaces
- 네임스페이스아직 완성안됨
기타 정보들
Pod내의 컨테이너 여러개있을경우 같은 네트워크를 사용하므로 같은 포트를 사용할 수 없다.
8080,8081은 왜 안됑?
반응형
'Kubernetes' 카테고리의 다른 글
[k8s] docker, kubeadm, Calico 설치 (0) | 2022.03.23 |
---|---|
[K8s] drain, cordon, taint 비교 (0) | 2021.03.25 |
Ubuntu 18.04 Kubeadm & Calico 구성하기 (0) | 2021.03.12 |
Ubuntu 18.04 Docker install (도커 설치하기) (0) | 2021.02.22 |
Kubernetes? 쿠버네티스? (0) | 2020.07.21 |