Kubernetes Deprecated API Version Check 방법 (클러스터 버전 업그레이드 사전 작업)
개요
Kubernetes Version을 업그레이드하기 전에 현재 사용 중인 API Version이 Deprecated 되지 않는지 확인해야 한다.
Deprecated 된다면 클러스터를 업그레이드 하기 전에 해당 워크로드를 업그레이드해야 한다.
1. 공식 문서 확인
Deprecation Guide 확인
https://kubernetes.io/docs/reference/using-api/deprecation-guide/
API-Group 확인 (v1.25)
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/
하지만, 실제 배포한 API Version과 표시되는 API Version이 다르다.
참고 이슈: https://github.com/kubernetes/kubernetes/issues/58131
그렇기 때문에 kubectl로 배포한 경우에는 kubectl.kubernetes.io/last-applied-configuration을 확인해야 하고
helm으로 배포한 경우에는 secret 또는 configmap에 저장된 helm manifest를 확인해야 한다.
helm의 경우 helm get manifest 명령어를 통해 디코딩을 하지 않고 확인할 수 있다.
이를 kubent를 사용하면 Deprecate API Version을 손쉽게 확인할 수 있다.
아래 내용은 kubent에서 특히 지원하는 도구에 대한 설명이다.
In particular following tools are supported:
- file - local manifests in YAML or JSON
- kubectl - uses the kubectl.kubernetes.io/last-applied-configuration annotation
- Helm v3 - uses Helm manifests stored as Secrets or ConfigMaps directly in individual namespaces
2. kubent 사용
https://github.com/doitintl/kube-no-trouble
kubent는 Deprecated API Version 사용에 대해 클러스터를 확인할 수 있는 도구이다.
https://repost.aws/ko/knowledge-center/eks-plan-upgrade-cluster
AWS 공식 지식센터에도 소개하고 있는 믿을만한 놈이다.
1.22 버전 EKS에서 1.25 버전 타겟 예시
-t 옵션을 사용해서 타켓 버전을 설정할 수 있다.
$ kubent -t 1.25
1:49PM INF >>> Kube No Trouble `kubent` <<<
1:49PM INF version 0.7.0 (git sha d1bb4e5fd6550b533b2013671aa8419d923ee042)
1:49PM INF Initializing collectors and retrieving data
1:49PM INF Target K8s version is 1.25.0
1:49PM INF Retrieved 128 resources from collector name=Cluster
1:49PM INF Retrieved 280 resources from collector name="Helm v3"
1:49PM INF Loaded ruleset name=custom.rego.tmpl
1:49PM INF Loaded ruleset name=deprecated-1-16.rego
1:49PM INF Loaded ruleset name=deprecated-1-22.rego
1:49PM INF Loaded ruleset name=deprecated-1-25.rego
1:49PM INF Loaded ruleset name=deprecated-1-26.rego
1:49PM INF Loaded ruleset name=deprecated-future.rego
__________________________________________________________________________________________
>>> Deprecated APIs removed in 1.25 <<<
------------------------------------------------------------------------------------------
KIND NAMESPACE NAME API_VERSION REPLACE_WITH (SINCE)
PodDisruptionBudget cluster-autoscaler cluster-autoscaler-aws-cluster-autoscaler policy/v1beta1 policy/v1 (1.21.0)
PodDisruptionBudget kube-system ebs-csi-controller policy/v1beta1 policy/v1 (1.21.0)
PodSecurityPolicy <undefined> cluster-autoscaler-aws-cluster-autoscaler policy/v1beta1 <removed> (1.21.0)
PodSecurityPolicy <undefined> eks.privileged policy/v1beta1 <removed> (1.21.0)
PodSecurityPolicy <undefined> loki policy/v1beta1 <removed> (1.21.0)
PodSecurityPolicy <undefined> loki-promtail policy/v1beta1 <removed> (1.21.0)
이를 사용하면 손쉽게 Deprecated API Version을 확인할 수 있다!
이제 cluster-autoscaler, ebs-csi-controller, loki를 업그레이드 하러 가야겠다.