Data Engineering
[Kubernetes] Deployment
snoony
2024. 6. 11. 12:35
쿠버네티스 명령들이 잘 실행되지 않아 다음과 같이 minikube를 삭제하고 다시 시작하였다.
[rocky@localhost kube1]$ minikube delete
🔥 docker 의 "minikube" 를 삭제하는 중 ...
🔥 Deleting container "minikube" ...
🔥 /home/rocky/.minikube/machines/minikube 제거 중 ...
💀 "minikube" 클러스터 관련 정보가 모두 삭제되었습니다
[rocky@localhost kube1]$ minikube start --driver=docker
deloyment001.yml
apiVersion: apps/v1 # 버전, 앱관련
kind: Deployment # 리소스의 종류
metadata:
name: echo-deploy # 이름
spec: # 사양
replicas: 4 # 생성할 파드의 수
selector: # 파드를 선택하는 기준
matchLabels: # 라벨을 기준으로 파드를 생성
app: echo # app=echo 라벨을 가진 파드를 선택
tier: app # tier=app 라벨을 가진 파드를 선택
template: # 파드 템플릿
metadata: # 파드의 메타데이터
labels: # 파드라벨
app: echo
tier: app
spec: # 파드사양
containers: # 파드에 적재될 컨테이너
- name: echo
image: ghcr.io/subicura/echo:v1
[rocky@localhost kube1]$ kubectl apply -f deployment001.yml
deployment.apps/echo-deploy created
# 히스토리 확인
kubectl rollout history deploy/echo-deploy
# revision 1 히스토리 상세 확인
kubectl rollout history deploy/echo-deploy --revision=1
# 바로 전으로 롤백
kubectl rollout undo deploy/echo-deploy
# 특정 버전으로 롤백
kubectl rollout undo deploy/echo-deploy --to-revision=2
deployment002.yml
apiVersion: apps/v1 # 버전, 앱관련이므로
kind: Deployment # 리소스의 종류
metadata:
name: echo-deploy-st # 이름
spec: # 사양
replicas: 4 # 생성할 파드의 수
selector: # 파드를 선택하는 기준
matchLabels: # 라벨을 기준으로 파드를 생성
app: echo # app=echo 라벨을 가진 파드를 선택
tier: app # tier=app 라벨을 가진 파드를 선택
minReadySeconds: 5 # 새로운 파드는 최소 5초동안 실행하고 준비상태
strategy:
type: RollingUpdate
rollingUpdate: # 파드가 생성되고 준비되면 오래된 파드는 삭제
maxSurge: 3 # 업데이트중에 원하는 최대 파드수
maxUnavailable: 3 # 업데이트중에 최대 3개 의 사용불능파드
template: # 파드 템플릿
metadata: # 파드의 메타데이터
labels: # 파드라벨
app: echo
tier: app
spec: # 파드사양
containers: # 파드에 적재될 컨테이너
- name: echo
image: ghcr.io/subicura/echo:v1
livenessProbe: # 파드의 생존여부 확인
httpGet:
path: /
port: 3000
[rocky@localhost kube1]$ kubectl apply -f deployment002.yml
deployment.apps/echo-deploy-st created
image 변경
[rocky@localhost kube1]$ kubectl set image deploy/echo-deploy-st echo=ghcr.io/subicura/echo:v2
deployment.apps/echo-deploy-st image updated
이벤트 확인
[rocky@localhost kube1]$ kubectl describe deploy/echo-deploy-st
multi-pod-service.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
spec:
selector:
matchLabels:
app: counter
tier: db
template:
metadata:
labels:
app: counter
tier: db
spec:
containers:
- name: redis
image: redis
ports:
- containerPort: 6379
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
ports:
- port: 6379
protocol: TCP
selector:
app: counter
tier: db
[rocky@localhost kube1]$ kubectl apply -f multi-pod-service.yml
deployment.apps/redis created
service/redis created
실행중인 것들 확인하기
[rocky@localhost kube1]$ kubectl get all
삭제하기
[rocky@localhost kube1]$ kubectl delete --all deployment
deployment.apps "echo-deploy" deleted
deployment.apps "echo-deploy-st" deleted
deployment.apps "redis" deleted
[rocky@localhost kube1]$ kubectl delete --all service
service "kubernetes" deleted
service "redis" deleted
재실행
[rocky@localhost kube1]$ kubectl apply -f multi-pod-service.yml
deployment.apps/redis created
service/redis created
[rocky@localhost kube1]$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/redis-694bccc6cd-g9sn6 1/1 Running 0 9s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 87s
service/redis ClusterIP 10.110.87.81 <none> 6379/TCP 9s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/redis 1/1 1 1 9s
NAME DESIRED CURRENT READY AGE
replicaset.apps/redis-694bccc6cd 1 1 1 9s
[rocky@localhost kube1]$
counter-app.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: counter
spec:
selector:
matchLabels:
app: counter
tier: app
template:
metadata:
labels:
app: counter
tier: app
spec:
containers:
- name: counter
image: ghcr.io/subicura/counter:latest
env:
- name: REDIS_HOST
value: "redis"
- name: REDIS_PORT
value: "6379"
[rocky@localhost kube1]$ kubectl apply -f counter-app.yml
deployment.apps/counter created
[rocky@localhost kube1]$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/counter-75b6b4b5-nts2b 0/1 ContainerCreating 0 4s
pod/redis-694bccc6cd-g9sn6 1/1 Running 0 5m59s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7m17s
service/redis ClusterIP 10.110.87.81 <none> 6379/TCP 5m59s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/counter 0/1 1 0 4s
deployment.apps/redis 1/1 1 1 5m59s
NAME DESIRED CURRENT READY AGE
replicaset.apps/counter-75b6b4b5 1 1 0 4s
replicaset.apps/redis-694bccc6cd 1 1 1 5m59s
[rocky@localhost kube1]$
실행중인 컨테이너에 접근하기
[rocky@localhost kube1]$ kubectl get po
NAME READY STATUS RESTARTS AGE
counter-75b6b4b5-nts2b 1/1 Running 0 67s
redis-694bccc6cd-g9sn6 1/1 Running 0 7m2s
[rocky@localhost kube1]$ kubectl exec -it ^C
[rocky@localhost kube1]$ kubectl exec -it counter-75b6b4b5-nts2b -- sh
/app # curl localhost:3000
1
/app # telnet redis 6379
Connected to redis
^C
Console escape. Commands are:
l go to line mode
c go to character mode
z suspend telnet
e exit telnet
/app #
/app #
kubectl 명령어 alias 설정
[rocky@localhost kube1]$ alias k="kubectl"
counter-nodeport.yml
apiVersion: v1
kind: Service
metadata:
name: counter-np
spec:
type: NodePort
ports:
- port: 3000
protocol: TCP
nodePort: 31000
selector:
app: counter
tier: app
[rocky@localhost kube1]$ k apply -f counter-nodeport.yml
service/counter-np created
[rocky@localhost kube1]$ k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
counter-np NodePort 10.111.7.96 <none> 3000:31000/TCP 40s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 41m
redis ClusterIP 10.110.87.81 <none> 6379/TCP 40m
[rocky@localhost kube1]$
counter-lb.yml
apiVersion: v1
kind: Service
metadata:
name: counter-lb
spec:
type: LoadBalancer
ports:
- port: 30000
targetPort: 3000
protocol: TCP
selector:
app: counter
tier: app
[rocky@localhost kube1]$ gedit counter-lb.yml
[rocky@localhost kube1]$ k apply -f counter-lb.yml
service/counter-lb created
[rocky@localhost kube1]$ k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
counter-lb LoadBalancer 10.98.6.125 <pending> 30000:30107/TCP 47s
counter-np NodePort 10.111.7.96 <none> 3000:31000/TCP 3h22m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h2m
redis ClusterIP 10.110.87.81 <none> 6379/TCP 4h1m
[rocky@localhost kube1]$