-
k8s service 에서 label 을 바꿀때의 다운타임?DevOps/Kubernetes 2022. 4. 25. 00:38
서비스에서 라벨을 바꿀 때의 다운타임
Kubernetes에서 애플리케이션을 배포하고 운영하는 과정에서, 서비스의 라벨을 변경해야 하는 상황이 발생할 수 있다. 이러한 변경 과정에서 서비스의 가용성을 유지하는 것이 중요하다.
새로운 Deployment 준비
첫 번째 단계는 새로운 Deployment를 준비하는 것이다. 새로운 Deployment는 기존 Deployment와 동일한 역할을 수행하지만, 새로운 라벨을 가진다. 이를 통해 서비스 셀렉터가 변경될 때 새로운 Deployment로 트래픽을 라우팅할 수 있다.
apiVersion: apps/v1 kind: Deployment metadata: name: new-deployment spec: replicas: 3 selector: matchLabels: app: my-app version: v2 template: metadata: labels: app: my-app version: v2 spec: containers: - name: my-container image: my-new-image readinessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 5 periodSeconds: 10 lifecycle: preStop: exec: command: ["/bin/sh", "-c", "sleep 10"]
위의 예시에서 새로운 Deployment는 version: v2 라벨을 가지고 있다. 이 라벨은 나중에 서비스 셀렉터가 참조할 라벨이다.
새로운 Deployment의 준비 상태 확인
새로운 Deployment의 모든 Pod가 Ready 상태가 되기 전까지 서비스 셀렉터를 변경하지 않는다. 이를 위해 kubectl get pods -l app=my-app,version=v2 명령어를 사용하여 모든 Pod가 Ready 상태인지 확인한다.서비스 셀렉터 업데이트
새로운 Deployment가 완전히 준비된 후, 서비스의 셀렉터를 업데이트하여 트래픽을 새로운 Pod로 라우팅한다. 이 과정에서 다운타임이 발생하지 않도록 하기 위해서는 반드시 새로운 Pod가 Ready 상태인지 확인한 후 셀렉터를 변경해야 한다.apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app version: v2 ports: - protocol: TCP port: 80 targetPort: 8080
이 설정을 적용하면, 서비스는 이제 version: v2 라벨을 가진 Pod로 트래픽을 전달하게 된다.
이전 Deployment 종료
서비스가 새로운 Deployment로 안정적으로 트래픽을 전달하는 것이 확인되면, 이전 Deployment를 종료한다. 이를 통해 불필요한 리소스를 해제하고, 시스템의 복잡성을 줄일 수 있다.kubectl delete deployment old-deployment
Kubernetes에서 서비스 라벨을 변경할 때 다음과 같은 단계로 해보자.
1. 새로운 Deployment를 준비한다.
2. 새로운 Deployment의 Pod가 완전히 Ready 상태가 되었는지 확인한다.
3. 서비스 셀렉터를 새로운 라벨로 업데이트한다.
4. 이전 Deployment를 종료한다.
이러한 단계를 준수하면, 서비스의 가용성을 유지하면서 라벨 변경 작업을 수행할 수 있다. 이를 통해 클라이언트에게 안정적인 서비스를 제공할 수 있다.'DevOps > Kubernetes' 카테고리의 다른 글
io.kubernetes.client.openapi.ApiException configmaps is forbidden (0) 2024.04.08 Deployment의 파드가 서비스의 대상이 되려면 (0) 2022.03.30 clusterRole, clusterRoleBinding (0) 2021.10.29 Kubernetes 인그레스 요청 흐름 (0) 2021.07.19 kubernetes Tutorials 4. 서비스를 사용해서 App을 공개하기 (0) 2020.05.06