컨테이너를 표현하는 k8s API의 최소 단위
하나 또는 여러 개의 컨테이너의 그룹
$ kubectl run NAME --image=iamge [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json] [--command] [args....]
$ kubectl get pods
$ kubectl get pods -o wide
파드 템플릿은 파드를 생성하기 위한 명세이다.
파드 템플릿은 yaml 형식이나 json 형식을 가진다.
파드 템플릿을 사용하여 실제 파드가 동작된다.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx:1.14
name: nginx
ports:
- containerPort: 80
$ kubectl run nginx --image=nginx:1.14 --port=80 --dry-run=client -o yaml > pod-nginx.yaml
$ kubectl get pods
$ kubectl describe pod nginx
$ kubectl edit pod nginx
$ kubectl delete pod nginx
$ kubectl logs nginx
$ kubectl exec -it nginx -- /bin/bash
$ kubectl create deployment webserver --image=nginx:1.14 --replicas=2 --port=80
$ kubectl get deployments.apps
$ kubectl get pods
$ kubectl get pods -o wide
$ kubectl expose deployment webserver --port=80
$ kubectl get service
하나의 pod에는 여러개의 컨테이너가 포함될 수 있다.
하나의 Pod에 여러 개의 컨테이너를 포함하는 경우 모든 컨테이너가 항상 단일 Node에서 실행된다.
보통 multiple-container pod에 포함된 컨테이너들은 밀접하게 관련된 프로세스를 함께 실행하거나 동일한 IP 및 Port를 사용한다.
apiVersion: v1
kind: Pod
metadata:
name: multiple-pod
spec:
containers:
- name: nginx-container
image: ningx:1.14
ports:
- containerPort: 80
- name: centos-container
image: centos:7
command:
- sleep
- "10000"
Label은 Pod와 같은 오브젝트에 첨부된 Key와 Value의 쌍이다.
Label은 오브젝트의 특성을 식별하는데 사용되어 사용자에게 중요하지만, 코어 시스템에 직접적인 의미는 없다.
Label로 오브젝트의 하위 집합을 선택하고, 구성하는데 사용할 수 있다.
Label은 오브젝트를 생성할 떄에 붙이거나 생성 이후에 붙이거나 언제든지 수정이 가능하다.
오브젝트마다 key와 value로 Label을 정의할 수 있다. 오브젝트의 key는 고유한 값이어야 한다.
name과 UID와 다르게 label은 고유하지 않다.
Label Selector를 통해 클라이언트와 사용자는 오브젝트를 식별할 수 있다.
집합성 기준 레이블 요건에 따라 값 집합을 키로 필터링할 수 있다.
(in, notin, exists)
- Label
matadat:
label:
rel: stable
name: mainui
- Selector
selector:
matchLabels:
key: value
matchExpressions:
- {key: name, operator: In, values: [mainui]}
- {key: rel, operator: NotIn, values: ["beta", "canary"]}
apiVersion: v1
kind: Pod
metatdata:
name: appjs-pod
labels:
apps: web
release: stable
spec:
containers:
name: appjs-container
image: smlinux/appjs
ports:
containerPort: 80
$ kubectl get pods --show-labels
$ kubectl get pods -L <label_name>
$ kubectl label pod <name> key=value
$ kubectl label pod <name> key=value --overwrite
$ kubectl label pod <name> --show-labes
$ kubectl label pod <name> key-
Label과 동일하게 key-value를 통해 리소스의 특성을 기록
Kubernetes에게 특정 정보 전달할 용도로 사용
관리를 위해 필요할 정보를 기록할 용도로 사용
릴리즈, 로깅, 모니터링에 필요한 정보들을 기록
Label과 달리 오브젝트를 식별하여 select하지 않음
apiVersion: v1
kind: Pod
metadata:
name: anon-pod
annotation:
imageregistry: "http://hub.docker.com/"
spec:
containers:
name: nginx
image: nginx:1.14
Worker node에 할당된 label을 이용해 node를 선택
Node Label 설정
$ kubectl label nodes <node 이름> <label key>=<label value>
$ kubectl label nodes node1.example.com gpu=true
$ kubectl get nodes -L gpu
$ kubectl label nodes <node 이름> key=value
$ kubectl get nodes --show-labels
$ kubectl get nodes -L <label name>
$ kubectl label nodes <name> key=value
$ kubectl label nodes <name> key=value --overwrite
$ kubectl label nodes <name> key-
apiVersion: v1
kind: Pod
metadata:
name: testpod
spec:
containers:
name: nginx
image: ngnix:1.14
nodeSlector:
type: ssh
Pod Resource 요청 및 제한
Resource Requests
Resource Limits
Pod Resources 단위
apiVersion: v1
kind: Pod
metadata:
name: pod
spec:
containers:
name: nginx-container
image: nginx:1.14
resources:
requests:
cpu: 100m
memory: 250Mi
limits:
cpu: 500m
memory: 500Mi