지난 8월에 Kubernetes v1.31이 릴리즈되었습니다. 프로젝트 네임은 Elli인데요.

Kubernetes 10주년 이후 처음 릴리즈되는 이번 버전에서도 다양한 기능이 안정화되고 새로운 기능도 추가되었습니다.

그중 아래 주요 업데이트에 대해 소개해드리겠습니다.

  • AppArmor 지원 기능 Stable 단계로 상향
  • PersistentVolume의 lastTransitionTime Stable 단계로 상향
  • 이미지 볼륨 지원 기능 추가 (Alpha 단계)

🛡️AppArmor 지원 기능 Stable 단계로 상향

AppArmor리눅스 서버를 보호하기 위해 특정 애플리케이션이 네트워크나 파일 등에 접근하는 것을 제한하는 보안 모듈입니다. Ubuntu나 SUSE 등 많은 리눅스 배포판에서 AppArmor가 기본으로 적용되어 있는데요.

특정 애플리케이션에 누군가 악의적으로 침투해서 동작 중인 리눅스 호스트로 접근하는 것을 막기 위해 AppArmor가 사용되는 거죠.

AppArmor의 보호 대상으로서 접근이 제한되는 리소스를 정의한 것을 Profile이라고 하는데요. 리눅스 호스트에는 여러 개의 Profile을 정의해서 관리할 수도 있습니다.

이전부터 AppArmor의 Profile을 Kubernetes 상에서 배포된 애플리케이션에도 적용할 수 있도록 securityContextappArmorProfile 필드를 지원하고 있었는데요.

그동안 Beta 단계였던 AppArmor 지원 기능이 이번 Kubernetes 1.31 버전 릴리즈부터 Stable 단계로 상향되었고, 이제 Kubernetes에서 AppArmor를 안정적으로 지원한다고 볼 수 있습니다.

만약 Kubernetes 클러스터에 배포하는 애플리케이션의 호스트 리소스 접근을 제한하고 싶다면 AppArmor를 고려해보는 건 어떠신가요?

Info

참고로 Kubernetes v1.30 이전까진 Pod의 securityContext 필드가 아닌 annotations 필드에서 AppArmor Profile을 사용했습니다. Kubernetes v1.30 이후부터 securityContext 필드에서 AppArmor Profile을 정의하도록 지원하기 시작했답니다.

⏱️PersistentVolume의 lastTransitionTime 기능 Stable 단계로 상향

Persistent Volume(PV)은 Pod에서 로컬이나 외부 스토리지를 부분적으로 사용할 수 있도록 만들어진 Kubernetes 리소스입니다. PV는 아래 3가지 중 하나의 상태를 가집니다.

  • Pending: PV와 Pod가 연동되기 위해 준비하는 상태
  • Bound: PV와 Pod가 연동된 상태
  • Released: Pod가 종료되거나 기타 이유로 PV를 사용하지 않아 Pod와 PV간의 연동이 끊어진 상태

Kubernetes v1.28부터 이런 PV의 상태가 변경되는 시점을 기록하는 lastTransitionTime 필드가 도입되었는데요. lastTransitionTime 기능을 사용하면 PV가 상태를 변경할 때마다 업데이트되어 PV의 최근 상태 변경 시점을 알 수 있게 됩니다.

그렇기 때문에 아래와 같이 활용 가능합니다.

  • Retention(데이터 보존 및 삭제) 정책 구현
    • 예: 특정 기간 동안 계속 Released 상태인 PV 삭제
  • 스토리지의 Health 모니터링
    • 예: 비정상적으로 긴 시간 동안 Pending 상태인 PV 감지 및 조치

만약 PV 관리와 관련된 정책이나 모니터링이 필요하다면 PV의 lastTransitionTime 필드가 도움이 될 것입니다.

💿이미지 볼륨 지원 기능 추가 (Alpha 단계)

v1.31 버전부터 Alpha 단계로 새로 추가된 기능도 다양한데요. 그 중 이번에 소개드릴 기능은 이미지 볼륨 지원 기능입니다.

이미지 볼륨 지원 기능이란, Pod가 PV로 일반적인 스토리지를 사용하는 것처럼 Container Image를 볼륨으로 사용할 수 있도록 지원함을 의미합니다.

이미지 볼륨을 사용하는 Pod의 Yaml의 예시는 아래와 같습니다.

kind: Pod
spec:
  containers:
    - 
      volumeMounts:
        - name: my-volume
          mountPath: /path/to/directory
  volumes:
    - name: my-volume
      image:
        reference: my-image:tag

이 기능은 특히 인공지능 개발 분야에서 활용될 것으로 기대된다고 하는데요. 인공지능 모델 서버 컨테이너에 모델 Weight가 담긴 이미지를 볼륨 마운트한다면, 인공지능 모델을 서비스하는 이미지와 모델이 저장된 이미지를 분리해서 운용할 수 있기 때문에 효율적인 배포가 가능할 것이라고 합니다.

그 외에도 여러 컨테이너에 공용으로 필요한 데이터가 담긴 이미지를 볼륨으로 마운트해서 보안 사고 가능성과 전체적인 이미지 크기를 함께 줄이는 등, 다양하게 활용할 수 있을 것으로 보입니다.

References