kubectl label pod <pod명> <key>=<value>
레이블 넣는법 다시알아보기
/etc/kubernetes/manifests
쿠버네티스의 정적경로에 .yaml파일을 넣어서 스케쥴러를 사용하지않고 고정적으로 실행 시킬 수 있다.
근데 사실 스케쥴러 안쓰고 하면 오케스트레이션을할 수가없어서 쓸일 거의없음.
그냥 마스터노드의 기본 파드(스케쥴러,etcd,API서버,컨트롤러)가 이런식으로 돌아간다고만 알아두자.
probe가 파드의 컨테이너를 탐사함.
Porbe의 체크 방식은 3가지가 잇다
apiVersion: v1
kind: Pod
metadata:
labels:
run: liveness-exec
name: liveness-exec
spec:
containers:
- name: tardy-nginx
image: sysnet4admin/tardy-nginx
livenessProbe:
exec:
command:
- cat
- /tmp/healthy-on
initialDelaySeconds: 10 #처음 initial타임을 10초를 준다는 뜻
periodSeconds: 10 #10초마다 체크해서 안올라오면 리스타트
apiVersion: v1
kind: Pod
metadata:
labels:
run: liveness-httpget
name: liveness-httpget
spec:
containers:
- name: healthz-nginx
image: sysnet4admin/healthz-nginx
livenessProbe:
#tcpSocket: #tcpSocket방식은 그냥 포트만 확인
#port: 80
httpGet:
path: /healthz
port: 80
httpHeaders:
- name: purpose
value: health-check
#purposeKey에 health-check라는 값을 받으면 성공
initialDelaySeconds: 3
periodSeconds: 3
apiVersion: v1
kind: Pod
metadata:
labels:
run: readiness-exec
name: readiness-exec
spec:
containers:
- name: tardy-nginx
image: sysnet4admin/tardy-nginx
readinessProbe:
exec:
command:
- cat
- /tmp/healthy-on
initialDelaySeconds: 10
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: readiness-exec-lb
spec:
selector:
run: readiness-exec
ports:
- name: http
port: 80
targetPort: 80
type: LoadBalancer
readinessProbe는 엔드포인트를 뺄뿐 애플리케이션을 재시작하진 않는다.
apiVersion: v1
kind: Pod
metadata:
labels:
run: startup-w-others
name: startup-w-others
spec:
containers:
- name: tardy-nginx
image: sysnet4admin/tardy-nginx
startupProbe:
exec:
command:
- cat
- /tmp/healthy-on
initialDelaySeconds: 10
periodSeconds: 60
livenessProbe:
exec:
command:
- cat
- /tmp/healthy-on
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
exec:
command:
- cat
- /tmp/healthy-on
initialDelaySeconds: 5
periodSeconds: 5
startupProbe는 단독으로는 거의 사용하지 않는다
변환을 하는 개념
멀티패턴의 패턴엔 사이드카,앰버서더,어댑터 3방식이 있긴한데
사실 크게 구분하면서 사용하진 않는다
파드를 어피니티 설정하려면 기준파드가 필요하다
apiVersion: v1
kind: Pod
metadata:
labels:
run: sleepy
affinity: leader
name: w1-affinity-leader
spec:
containers:
- image: sysnet4admin/sleepy
name: sleepy
nodeSelector:
kubernetes.io/hostname: w1-k8s
labels에 affinity: leader 설정으로 파드 리더설정을했다.
nodeSelector의 kubernetes.io/hostname: w1-k8s는 무조건적으로 워커노드 1번에 기준을 잡는설정이다.
그후 Deployment를 기준파드에 스케쥴링 하도록 설정할 수 있다.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: deploy-podaffinity
name: deploy-podaffinity
spec:
replicas: 4
selector:
matchLabels:
app: deploy-podaffinity
template:
metadata:
labels:
app: deploy-podaffinity
spec:
containers:
- image: nginx
name: nginx
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: affinity
operator: In
values:
- leader
topologyKey: kubernetes.io/hostname
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: deploy-topologyspreadconstraints
name: deploy-topologyspreadconstraints
spec:
replicas: 4
selector:
matchLabels:
app: deploy-topologyspreadconstraints
template:
metadata:
labels:
app: deploy-topologyspreadconstraints
spec:
containers:
- image: nginx
name: nginx
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/region
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: deploy-topologyspreadconstraints
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: deploy-topologyspreadconstraints```