220518 Today I Learned
일지
특이사항 없음
주요 키워드
Pod
Lable
Selector
Annotation
Namespace
오늘의 할일
- 220518 TIL 작성
- 정보공유 스터디 진행
- AWS 스터디 준비
수업 정리
Pod
- 쿠버네티스 클러스터에서 워크로드를 처리하기 위한 리소스의 최소 단위
- 하나 이상의 컨테이너로 구성
- 최소 2개의 컨테이너로 구성(container 네트워크 구성에 필요한 Pause컨테이너)
- 리소스의 상태 조회시에는 1개로 표시됨
- Pause 컨테이너는 내부적인 용도를 위해서 사용되고, 표시되지 않음
- 파드는 여러 노드에 걸쳐 실행될 수 없음 - 단일 노드에서 모든 컨테이너가 구동
- 파드는 일부 속성을 공유함
- 네트워크(IP)
- IP를 공유하며, 각자 포트를 열어서 서비스 가능
- 파드 내 컨테이너 간 통신을 localhost 주소를 사용하여 통신
- 볼륨: 파드에 연결된 볼륨은 모든 컨테이너에서 사용 가능
- 네트워크(IP)
기본 Pod 리소스의 오브젝트 구성
testpod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- image: c1t1d0s7/myweb
name: test-pod-container
ports:
- protocol: TCP
containerPort: 8080
파드 생성
kubectl create -f <파일명>
kubectl apply -f <파일명>파일명>파일명>
파드 정보 확인
kubectl get pod [파드이름] // 기본정보 출력
kubectl get pod [파드이름] -o wide // IP, NODE 등 추가정보 출력
kubectl get pod [파드이름] -o yaml // YAML 포맷으로 파드 전체 정보 출력
kubectl describe pod [파드이름] // 파드에 대한 상세정보 출력
파드 및 리소스 세부 필드 확인
kubectl explain <리소스명>
kubectl explain <리소스명>.<필드명>...필드명>리소스명>리소스명>
로그 확인
kubectl logs <파드이름>파드이름>
파드로 포트포워딩
kubectl port-forward <파드명> <호스트포트>:<파드포트>파드포트>호스트포트>파드명>
레이블(Label)
- 리소스의 세부항목 중 metadata에 포함
- 키/값 형식을 사용: 값이 반드시 있어야 할 필요는 없음
- 리소스를 식별하기 위한 용도로 사용
- 파드 및 기타 리소스에 광범위하게 사용
- 필수항목은 아님
- 형식: 키이름, 접두사/키이름
- 예시
- release: stable, alpha, beta
- environment: production, dev, qa
- tier: webserver, was, database
레이블을 반영한 파드 생성
apiVersion: v1
kind: Pod
metadata:
name: test-pod2
labels:
release: beta
tier: web
spec:
containers:
- image: c1t1d0s7/myweb
name: test-pod-container
ports:
- protocol: TCP
containerPort: 8080
파드에 반영된 레이블 정보 확인
kubectl get pod <파드명> --show-labels kubectl get pod <파드명> -o wide // metadata.labels 항목 kubectl describe pod <파드명> // labels 항목파드명>파드명>파드명>
레이블 변경
kubectl label pod <파드명> <키>=<값> // 없는 키 생성 kubectl label pod <파드명> <키>=<값> --overwrite // 존재하는 키의 값 변경 kubectl label pod <파드명> <키>= --overwrite // 키의 값 삭제 kubectl label pod <파드명> <키>- // 키 삭제키>파드명>키>파드명>값>키>파드명>값>키>파드명>
셀렉터(Selector)
검색방식
- 존재 유무: 키가 존재하느냐, 존재하지 않느냐
- 일치성 기준: 같으냐, 같지 않느냐
- 집합성 기준: ~~ 안에 포함되어 있느냐, ~~ 안에 포함되어 있지 않느냐
kubectl 명령 사용시 대상을 식별하는 레이블 조건: -l
-l ‘<키>’ : 키가 존재하는 대상 -l ‘!<키>’ : 키가 존재하지 않는 대상 -l ‘<키>=<값>’ 또는 -l ‘<키>==<값>’ : 키과 값이 일치하는 대상 -l ‘<키>!=<값>’ : 키와 값이 일치하지 않는 대상 -l ‘<키> in (<값1>,<값2>...)’ : 값1, 값2… 안에 키의 값이 해당되는 대상 -l ‘<키> notin (<값1>,<값2>...)’ : 값1, 값2… 안에 키의 값이 해당되지 않는 대상값2>값1>키>값2>값1>키>값>키>값>키>값>키>키>키>
어노테이션(Annotations)
- label과 유사하게 키/값 구조를 가지는 데이터
- 개체 식별용도로 사용하지 않음
- 부가적인 설명 등이 필요한 항목 기술
- 리소스 관련 기본 정보
- 모니터링 관련 정보
- 디버깅 정보
- 다른 요소와의 관련 정보
- 책임자 등
- 쿠버네티스 클러스터 내에서 API서버 및 다른 요소에서 참고하는 용도로 사용
annotation 예시
apiVersion: v1
kind: Pod
metadata:
name: test-pod3
annotations:
developer: Michael Jackson
manager: Bill Gates
spec:
containers:
- image: c1t1d0s7/myweb
name: test-pod-container
ports:
- protocol: TCP
containerPort: 8080
네임스페이스(Namespace)
쿠버네티스 내 리소스를 논리적으로 분리
기본적으로 생성되어 있는 네임스페이스
- kube-node-lease: 쿠버네티스 노드의 가용성을 체크하기 위한 리소스용
- kube-public: 기본적으로 생성되어 모든 사용자가 읽기 권한으로 접근 가능한 네임스페이스. 일반적으로 사용하지 않음
- kube-system: 기본적인 쿠버네티스 클러스터의 리소스(컨트롤플레인)
- default: 기본적으로 생성된 사용자용 네임스페이. 기본값
네임스페이스 리소스 파일 예시
apiVersion: v1
kind: Namespace
metadata:
name: my-private-namespace
네임스페이스 생성
- 오브젝트 파일 사용
kubectl create -f mynamespace.yaml - 명령 사용
kubectl create namespace mynamespace
네임스페이스에 리소스 생성
- 리소스 정의 내에 네임스페이스 지정: .metadata.namespace
… metadata: name: testpod namespace: mynamespace …
- 생성 명령 실행 시 네임스페이스 지정:
kubectl create -f testpod.yaml –namespace mynamespace -
- kubectl 명령 사용환경에서 기본 네임스페이스 지정
- ServiceAccount 부분에서 확인예정
Leave a comment