kubernetes RevisionHistoryLimit

# kubernetes(k8s) deployment 적용(재시작)시 replicaset 이 새로 생성되는데
# 이전 replica 가 삭제되 않고 유지되는 경우가 있다.
kubectl get replicaset | grep -E "NAME|ysoftman"
NAME                       DESIRED   CURRENT     READY     AGE
ysoftman-deployment-11111  0         0           0         1d
ysoftman-deployment-22222  0         0           0         2d
ysoftman-deployment-33333  1         1           1         1d

# deployment 설정에서 revisionHistoryLimit 을 0 으로 주면 이전 replica 를 유지 하지 않고 삭제한다.
# revisionHistoryLimit 디폴트 값은 10이다.
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#clean-up-policy
spec:
  revisionHistoryLimit:0

# replicatset 에 patch 로 바로 적용할 수 있다.
kubectl patch deployment/ysoftman-deployment -p '{"spec":{"revisionHistoryLimit":0}}'

# deployment 전체 재시작 후
kubectl rollout restart deployment

# deployment 전체 replica 이전 revision 삭제
kubectl patch deployment $(kubectl get deployment | awk '{print $1}') -p '{"spec":{"revisionHistoryLimit":0}}'

# 참고
# patch 명령시 --type='strategic'가 디폴트다.
# [] 부분 변경시 다음과 같이 해당 원소(오브젝트) 전체를 명시한다.
# 예) ingress host 변경시 host 가 포함된 오브젝트 전체 명시
kubectl patch ingress ysoftman_ing -n ysoftman_ns -p \
'{
  "spec": {
    "rules": [
      {
        "host": "ysoftman.host",
        "http": {
          "paths": [
            {
              "backend": {
                "service": {
                  "name": "ysoftman_service",
                  "port": {
                    "name": "http"
                  }
                }
              },
              "path": "/abc",
              "pathType": "Prefix"
            }
          ]
        }
      }
    ]
  }
}'

comments:

댓글 쓰기