7/9 데몬셋, 잡 컨트롤러, metal lb 등 실습
- -
데몬셋
1. 모든노드에 하나씩 배치(무조건 하나씩이여야 함)
2. 특정노드에만 하나씩 배치(")
원하는 노드에만 배치가능(레이블을 이용)
쿠베프록시: 쿠버네티스의 모든 노드는 쿠베프록시란 파드가 배치된다.
칼리코 : 네트워크 애드온(반드시 얘가 배치되어야함)
이런것들을 에이전트라고함(일을 대신해주는것)
* 데몬셋 생성
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: myapp-ds
spec:
selector:
matchLabels:
app: myapp-ds
template:
metadata:
labels:
app: myapp-ds
spec:
nodeSelector:
node: development
containers:
- name: myapp
image: ghcr.io/c1t1d0s7/go-myweb
ports:
- containerPort: 8080
kubectl create -f myapp-ds.yaml
kubectl get daemonsets.apps
kubectl get nodes --show-label
* 노드레이블 지정
kubectl label nodes k-node1 node=development (뒤에 - 붙이면 지워짐)
kubectl get k-node1 --show-labels
kubectl get node k-node1 --show-label
* 데몬셋 확인
kubectl get daemonsets.apps
kubectl get pods
*잡
언젠가는 끝나는 작업. 종료되는 것을 보장
레이블 셀렉터로 직접 지정하지않음
restart policy(재시작 정책)의 기본값이 always(다시시작) 인데, 이걸로 설정하여 잡컨트롤러를 만들면 오류생김. 그래서 never 아니면 onFailure로 해줘야함.
apiVersion: batch/v1
kind: Job
metadata:
name: myapp-job
spec:
template:
metadata:
labels:
app: myapp-job
spec:
restartPolicy: OnFailure
containers:
- name: myapp
image: busybox
command: ["sleep", "60"]
vi myapp-job.yaml
kubectl create -f myapp-job.yaml
kubectl get jobs.batch
kubectl get pods
kubectl delete -f myapp-job.yaml
* 다중 잡 컨트롤러 생성
apiVersion: batch/v1
kind: Job
metadata:
name: myapp-job-comp
spec:
completions: 3
template:
metadata:
labels:
app: myapp-job-comp
spec:
restartPolicy: OnFailure
containers:
- name: myapp
image: busybox
command: ["sleep", "20"]
vi myapp-job-comp.yaml
kubectl create -f myapp-job-comp.yaml
kubectl get jobs.batch
watch kubectl get po,rs,ds
kubectl delete -f myapp-job-comp.yaml
* 병렬 다중 잡 컨트롤러 생성
apiVersion: batch/v1
kind: Job
metadata:
name: myapp-job-para
spec:
completions: 3
parallelism: 3
template:
metadata:
labels:
app: myapp-job-para
spec:
restartPolicy: OnFailure
containers:
- name: myapp
image: busybox
command: ["sleep", "20"]
kubectl create -f myapp-job-para.yaml
kubectl get jobs.batch
kubectl get po --watch
kubectl delete -f myapp-job-para.yaml
* 잡의 종료
- 유효 데드라인이 설정된 오브젝트 만들기
apiVersion: batch/v1
kind: Job
metadata:
name: myapp-job-atvdl
spec:
backoffLimit: 3
activeDeadlineSeconds: 30
template:
metadata:
labels:
app: myapp-job-atvdl
spec:
restartPolicy: OnFailure
containers:
- name: myapp
image: busybox
command: ["sleep", "20"]
크론잡은 베타버전을 사용함. 버전이 다른거 기억해두기
* 크론잡 컨트롤러 생성 및 파드 확인
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: myapp-cj
spec:
schedule: "*/2 * * * *"
jobTemplate:
spec:
template:
metadata:
labels:
app: myapp-cj
spec:
restartPolicy: OnFailure
containers:
- name: myapp
image: busybox
command: ["sleep", "20"]
kubectl create -f myapp-cj.yaml
kubectl get cronjobs.batch
kubectl get po --watch
kubectl delete -f myapp-cj.yaml
*네트워크
로드밸런서는 기본적으로 리버스 프록시임
클러스터 아이피는 클러스터 내부에서만 접속가능
서비스를 만들면 똑같은 이름의 앤드포인트 생성됨
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: myapp-rs
vi myapp-svc.yaml
kubectl create -f myapp-svc.yaml
kubectl get services myapp-svc
kubectl get endpoints myapp-svc
kubectl create -f myapp-rs.yaml
kubectl get endpoints myapp-svc
kubectl get pods -o wide
kubectl run nettool -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash
bash-5.1# curl 10.107.6.102
Hello World!
myapp-rs-cqn7t
* 서비스의 세션 어피니티 구성
apiVersion: v1
kind: Service
metadata:
name: myapp-svc-ses-aff
spec:
sessionAffinity: ClientIP
ports:
- port: 80
targetPort: 8080
selector:
app: myapp-rs
MetalLB, bare metal load-balancer for Kubernetes
MetalLB is a load-balancer implementation for bare metal Kubernetes clusters, using standard routing protocols. MetalLB is a young project. You should treat it as a beta system. The project maturity page explains what that implies. Why? Kubernetes does not
metallb.universe.tf
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.200.200-192.168.200.210 -> 로드밸런서가 사용할 아이피 지정(200번대)
192.168.200.200 은 로드밸런서 아이피
apiVersion: v1
kind: Service
metadata:
name: myapp-svc-np
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
nodePort: 31111
selector:
app: myapp-rs
* 레디니스 프로브
어플리케이션의 작동여부를 주기적으로 체크하는게 라이브니스 프로브
웹서버 필수아님
다음주월욜 점심 12시까지
노트북에 메탈까지 설정해야함.
'Kubernetes' 카테고리의 다른 글
7/13 Storage (0) | 2021.07.13 |
---|---|
kube 설치 및 노드 업그레이드 (0) | 2021.07.12 |
7/8 레플리카셋, 수평 스케일링, 디플로이먼트 등 실습 (0) | 2021.07.08 |
7/7 kubeadm, kubelet, kubectl (0) | 2021.07.07 |
7/6 Kubernetes 설치 및 Cluster 만들기 실습 (0) | 2021.07.06 |
소중한 공감 감사합니다