Kubernetes

Kubernetes v1.24 릴리즈

Operation CWAL 2022. 5. 6. 16:49

2022년 5월 4일, Kubernetes v1.24가 정식 릴리즈되었다. EKS, AKS와 같은 Managed K8s 서비스는 v1.22나 v1.23이 대부분이기 때문에 당장은 영향이 없겠지만, 어떤 점이 바뀌었는지를 파악하고 준비할 필요가 있다. 

Kubernetes Github

k8s v1.24 변경점

마이너 버전업이지만 생각보다 많은 기능의 추가, 변경 및 삭제가 이루어졌는데 그 중에서 눈여겨볼 만한 변화는 다음과 같다. 

 

Dockershim 삭제

아마 이번 업데이트의 가장 큰 변화가 아닐까 생각된다. 기존 Docker의 CRI(Container Runtime Interface) 호환을 위해 존재했던 dockershim이 마침내 kubelet에서 제거되었다. 이미 작년부터 dockershim이 deprecation될 예정이라고 선언했기 때문에 지금 시점에서 Docker를 그대로 사용하고 있는 클러스터는 별로 없겠지만, 만약 그렇다면 이젠 정말 containerd나 CRI-O로 전환해야할 시점이 도래했다. 본인이 사용중인 K8s 클러스터가 얼마나 영향을 받게될지 궁금하다면 관련 칼럼을 한번 읽어보길 추천한다.

 

Is Your Cluster Ready for v1.24?

Author: Kat Cosgrove Way back in December of 2020, Kubernetes announced the deprecation of Dockershim. In Kubernetes, dockershim is a software shim that allows you to use the entire Docker engine as your container runtime within Kubernetes. In the upcoming

kubernetes.io

 

CSI 볼륨 확장

v1.8부터 등장해서 v1.23까지 Beta로 존재하던 볼륨 확장(Volume Expansion) 기능이 이제는 공식적(GA)으로 제공된다. 기존 PVC의 .spec.resources.requests.storage 값을 올리는 방식으로 동작한다. 너무나 당연하게도 CSI 수준에서 해당 기능을 구현한 Storage Class인 경우에 가능하다.

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi # specify new size here

 

 

gRPC Probe

기존 HTTP, TCP, Shell만 제공하던 Health Probe(startup, liveness, readiness)에서 드디어 gRPC도 Beta 기능으로 사용할 수 있다. 사용방법도 아래 예시와 같이 HTTP Probe와 비슷하지만, 아직 Named Port 기능은 제공하고 있지 않다.

apiVersion: v1
kind: Pod
metadata:
  name: etcd-with-grpc
spec:
  containers:
  - name: etcd
    image: k8s.gcr.io/etcd:3.5.1-0
    command: [ "/usr/local/bin/etcd", "--data-dir",  "/var/lib/etcd", "--listen-client-urls", "http://0.0.0.0:2379", "--advertise-client-urls", "http://127.0.0.1:2379", "--log-level", "debug"]
    ports:
    - containerPort: 2379
    livenessProbe:
      grpc:
        port: 2379
      initialDelaySeconds: 10

 

Beta API 비활성화

Default 설정으로 구성된 클러스터의 경우, 앞으로 새로 추가되는 Beta API(ex: ab.cd.ef/v1beta1)를 바로 사용할 수 없다. 이는 클러스터 업그레이드시, deprecated된 Beta API에 의존성이 있는 Application이  정상적으로 동작하지 않는 리스크를 줄이기 위해 나온 정책의 결과로 보인다.

예를 들어, PodSecurityPolicy(policy/v1beta1)와 같은 리소스는 v1.21에 deprecated되었고 v1.25부터는 완전히 제거될 예정이므로 가급적 사용하지 않는 것이 좋다.

기존 Beta API는 영향을 받지 않으며, 그대로 사용 가능하다.

ServiceAccount 생성시, Seret이 더 이상 같이 생성되지 않음

K8s API 서버를 접근해야 하는 애플리케이션은 보통 ServiceAccount가 설정된 Pod으로 정의한다. 이번 1.24 업데이트에선 ServiceAccount 생성시, 더 이상 Token을 Secret으로 같이 생성하지 않도록 변경되었다.

하지만 Secret이 없다고 해서 사용자가 따로 만들 필요는 없다. 다음과 같이 'hello' ServiceAccount를 사용하는 Pod을 정의해보자.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  serviceAccount: hello
  containers:
  - image: nginx
    name: main

Pod을 생성하고, 아래와 같이 실제 Token이 존재하는지 확인하면 아래와 같은 결과를 얻을 수 있다.

참고

'Kubernetes' 카테고리의 다른 글

K8s Cluster Tier 분류  (0) 2022.07.22
Kubernetes: The Documentary  (0) 2022.02.04
PodDisruptionBudget을 활용한 Application 보호  (0) 2021.09.22
ETCD Backup&Restore  (0) 2021.05.29
Open Policy Agent  (0) 2021.05.05