Kubernetes
[ Kans 3 Study - 6w ] 3. Host 기반 라우팅 / 카나리 업그레이드
su''@
2024. 10. 13. 00:08
CloudNetaStudy - Kubernets Networtk 3기 실습 스터디 게시글입니다.
Host 기반 라우팅
- ingress2.yaml
출처 : https://kschoi728.tistory.com/266
cat <<EOT> ingress2.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-2 spec: ingressClassName: nginx rules: - host: kans.com http: paths: - path: / pathType: Prefix backend: service: name: svc3-admin port: number: 8080 - host: "*.kans.com" http: paths: - path: /echo pathType: Prefix backend: service: name: svc3-admin port: number: 8080 EOT
- 인그레스 생성 및 확인
- 인그레스(Nginx 인그레스 컨트롤러)를 통한 접속(HTTP 인입) 확인 오브젝트 삭제 kubectl delete deployments,svc,ingress --all
- 오브젝트 삭제 kubectl delete deployments,svc,ingress --all
카나리 업그레이드
- 배포 자동화 지원(최소 중단, 무중단) - 롤링 업데이트, 카나리 업데이트, 블루/그린 업데이트 - 링크 링크2 하이커퍼넥스-블로그
롤링 업데이트
- canary-svc1-pod.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: dp-v1 spec: replicas: 3 selector: matchLabels: app: svc-v1 template: metadata: labels: app: svc-v1 spec: containers: - name: pod-v1 image: k8s.gcr.io/echoserver:1.5 ports: - containerPort: 8080 terminationGracePeriodSeconds: 0 --- apiVersion: v1 kind: Service metadata: name: svc-v1 spec: ports: - name: web-port port: 9001 targetPort: 8080 selector: app: svc-v1
- canary-svc2-pod.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: dp-v2 spec: replicas: 3 selector: matchLabels: app: svc-v2 template: metadata: labels: app: svc-v2 spec: containers: - name: pod-v2 image: k8s.gcr.io/echoserver:1.6 ports: - containerPort: 8080 terminationGracePeriodSeconds: 0 --- apiVersion: v1 kind: Service metadata: name: svc-v2 spec: ports: - name: web-port port: 9001 targetPort: 8080 selector: app: svc-v2
- 생성 및 확인
# 터미널1 watch -d 'kubectl get ingress,svc,ep,pod -owide' # 생성 curl -s -O https://raw.githubusercontent.com/gasida/NDKS/main/7/canary-svc1-pod.yaml curl -s -O https://raw.githubusercontent.com/gasida/NDKS/main/7/canary-svc2-pod.yaml kubectl apply -f canary-svc1-pod.yaml,canary-svc2-pod.yaml # 확인 kubectl get svc,ep,pod # 파드 버전 확인: 1.13.0 vs 1.13.1 for pod in $(kubectl get pod -o wide -l app=svc-v1 |awk 'NR>1 {print $6}'); do curl -s $pod:8080 | egrep '(Hostname|nginx)'; done Hostname: dp-v1-cdd8dc687-gcgsz server_version=nginx: 1.13.0 - lua: 10008 for pod in $(kubectl get pod -o wide -l app=svc-v2 |awk 'NR>1 {print $6}'); do curl -s $pod:8080 | egrep '(Hostname|nginx)'; done Hostname: dp-v2-785f69bd6-hh624 server_version=nginx: 1.13.1 - lua: 10008
- 오브젝트 삭제 kubectl delete deployments,svc,ingress --all