kubectl explain pod.spec.restartPolicy
실시간 보기
#(상태가 변할때만 보임) - 여러개 지정 불가
kubectl get pods --watch
#(시간별로 보기) - 여러개 지정가능
watch -n1 -d kubectl get pods
HTTP 응답코드
1xx 정보
2xx 성공
3xx 리디렉션
4xx 클라이언트 오류
5xx 서버오류
pods.spec.containers.livenessProbe
ReplicationController (rc)
:파드가 너무 많으면 추가적인 파드를 제거함
너무 적으면 파드를 시작함
kubectl explain rc.spec.template
pod.metadata. = rc.spec.metadata.
pod.spec. = rc.spec.template.spec.
myweb-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb-rc
spec:
replicas: 3
selector:
app: web
# Pod Configure
template:
metadata:
labels:
app: web
spec:
containers:
- name: myweb
image: ghcr.io/c1t1d0s7/go-myweb
ports:
- containerPort: 8080
protocol: TCP
파일을 이용한 rc 생성
kubectl create -f myweb-rc.yaml
rc 확인
watch kubectl get rc,pods --show-labels -o wide
NAME READY STATUS RESTARTS AGE LABELS
pod/myweb-rc-7m4v7 1/1 Running 0 29m app=web
pod/myweb-rc-7s4vp 1/1 Running 0 78m app=web
pod/myweb-rc-jtq7d 1/1 Running 0 78m app=web
rc label 변경
kubectl label pod myweb-rc-jtq7d app=db --overwrite
kubectl label pod myweb-rc-jtq7d app=web --overwrite
명령형 커맨드
kubectl scale rc myweb-rc --replicas=5
명령형 오브젝트 구성
kubectl replace -f myweb-rc.yaml
yaml파일 고치고 create 대신 replace
(단, template 정보는 수정해도 변경이 되지않음 -pod 만들때 최초에 적용)
kubectl patch -f myweb-rc.yaml -p '{"spec": {"replicas": 3}}'
kubectl patch rc myweb-rc.yaml --patch-file replicas.json
replicas.json
{"spec": {"replicas": 3}}
kubectl edit -f myweb-rc.yaml
kubectl edit rc myweb-rc
kubectl edit rc/myweb-rc
선언형 오브젝트 구성
kubectl apply -f myweb-rc.yaml
ReplicationController -> ReplicaSets
rc와 rs는 거의 유사하지만 matchExpressions 이 추가됨
machLabels 사용 (rc와 유사)
apiVersion: apps/v1
kind: ReplicaSets
metadata:
name: myweb-rs
spec:
replicas: 3
selector:
matchLabels:
app: web
env: dev
template:
metadata:
labels:
app: web
env: dev
spec:
containers:
- name: myweb
image: ghcr.io/c1t1d0s7/go-myweb
ports:
- containerPort: 8080
protocol: TCP
matchExpressions 사용 (자기영역을 잘 셀렉팅하여 관리함)
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myweb-rs-set
spec:
replicas: 3
selector:
matchExpressions:
- key: app
operator: In
values:
- web
- key: env
operator: Exists
template:
metadata:
labels:
app: web
env: dev
spec:
containers:
- name: myweb
image: ghcr.io/c1t1d0s7/go-myweb
ports:
- containerPort: 8080
protocol: TCP
: 모든 노드의 파드를 실행
노드가 추가되면 파드도 추가됨
노드가 제거되면 파드는 가비지로 수집됨
데몬셋을 삭제하면 데몬셋이 생성한 파드들이 정리
주용도 agent
app을 보조하거나 infra유지보수관리
노드마다 하나씩 파드 배치
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: myweb-ds
spec:
selector:
matchExpressions:
- key: app
operator: In
values:
- myweb
- key: env
operator: Exists
template:
metadata:
labels:
app: myweb
env: dev
spec:
containers:
- name: myweb
image: ghcr.io/c1t1d0s7/go-myweb
ports:
- containerPort: 8080
protocol: TCP
cd ~/kubespray
노드 제거
ansible-playbook -i inventory/mycluster/inventory.ini remove-node.yml -b --extra-vars="node=node3" --extra-vars reset_nodes=true
노드 추가
ansible-playbook -i inventory/mycluster/inventory.ini scale.yml -b
노드 추가 및 제거 참고링크
https://kubespray.io/#/docs/getting-started
: 성공적으로 종료될 때까지 계속해서 파드를 실행
시작-->완료
apiVersion: batch/v1
kind: Job
metadata:
name: mypi
spec:
template:
spec:
containers:
- image: perl
name: mypi
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: OnFailure
tip. 명령어 작성 시 esc+. 을 치면 마지막 아규먼트, 옵션이 나옴
파드 템플릿의 레이블 / 잡 컨트롤러의 레이블 셀렉터는 지정하지 않는다.
-> 잘못된 매핑으로 기존의 파드를 종료하지 않게 하기 위함
job.spec.activeDeadlineSeconds
: 애플리케이션이 실행될 수 있는 시간 지정
job.spec.ttlSecondsAfterFinished
: 컨트롤러 및 파드 삭제
apiVersion: batch/v1
kind: Job
metadata:
name: mypi
spec:
template:
spec:
containers:
- image: perl
name: mypi
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: OnFailure
ttlSecondsAfterFinished: 10
job.spec.completions
: 완료 횟수
job.spec.parallelism
: 병렬 개수
completions 수 >= parallelism 수
apiVersion: batch/v1
kind: Job
metadata:
name: mypi-para
spec:
completions: 3
parallelism: 3
template:
spec:
containers:
- image: perl
name: mypi
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(1500)"]
restartPolicy: OnFailure
kubectl edit jod mypi
suspend를 true로 변경하여 일시중지 가능 (default 값은 false)
kubectl get po -A로 보는 목록중
뒤에 -node 가 붙어있는 pod들은 static pod이며 kubelet이 관리함
: 주기적으로 동작 시킴
kubectl explain cj --api-version=batch/v1beta1 (다른버전 상세 확인)
1.8 ~ 1.20 -> v1beta1
1.21 -> v1
apiVersion: batch/v1
kind: CronJob
metadata:
name: sleep-cj
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: sleep
image: ubuntu
command: ["sleep", "80"]
restartPolicy: OnFailure
#concurrencyPolicy: ( Allow | Forbid | Replace )
cj.spec.concurrencyPolicy
100회이상의 일정이 누락되면 잡을 실행하지않고 에러 로그를 남김