DevOps/Kubernetes

Kubernetes Deprecated API Version Check 방법 (클러스터 버전 업그레이드 사전 작업)

Jen'_' 2023. 5. 23. 19:50
반응형

개요

Kubernetes Version을 업그레이드하기 전에 현재 사용 중인 API Version이 Deprecated 되지 않는지 확인해야 한다.

Deprecated 된다면 클러스터를 업그레이드 하기 전에 해당 워크로드를 업그레이드해야 한다.

 

 

1.  공식 문서 확인

Deprecation Guide 확인

https://kubernetes.io/docs/reference/using-api/deprecation-guide/

 

Deprecated API Migration Guide

As the Kubernetes API evolves, APIs are periodically reorganized or upgraded. When APIs evolve, the old API is deprecated and eventually removed. This page contains information you need to know when migrating from deprecated API versions to newer and more

kubernetes.io

 

API-Group 확인 (v1.25)

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/

 

Kubernetes API Reference Docs

 

kubernetes.io

 

하지만, 실제 배포한 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

 

GitHub - doitintl/kube-no-trouble: Easily check your clusters for use of deprecated APIs

Easily check your clusters for use of deprecated APIs - GitHub - doitintl/kube-no-trouble: Easily check your clusters for use of deprecated APIs

github.com

kubent는 Deprecated API Version 사용에 대해 클러스터를 확인할 수 있는 도구이다.

 

https://repost.aws/ko/knowledge-center/eks-plan-upgrade-cluster

 

Amazon EKS 클러스터의 업그레이드 전략 계획

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터를 업그레이드할 경우 모범 사례를 따르고 싶습니다.

repost.aws

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를 업그레이드 하러 가야겠다.

반응형