ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kubernetes] last-applied-configuration annotation 알아보기
    Kubernetes 2024. 4. 20. 17:18
    728x90
    반응형

     

    - 목차

     

    키워드.

    • annotations

     

    last-applied-configuration ?

    이번 글에서는 k8s 리소스의 Annotation 중의 하나인 "kubectl.kubernetes.io/last-applied-configuration" 에 대해서 알아보려고 합니다.

    last-applied-configuration 어노테이션은 "kubectl apply" 명령어로 생성된 k8s 리소스의 어노테이션 중의 하나이구요.

    가장 최근의 kubectl apply 명령어를 통해서 생성 또는 수정된 Configuration 정보가 들어있습니다.

    간단한 예시를 들어보도록 하겠습니다.

     

    cat <<EOF> /tmp/pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
    EOF

     

    kubectl apply -f /tmp/pod.yaml

     

    위와 같이 생성된 Pod 의 metadata.annotations 는 아래와 같습니다.

    annotations 하위에 "kubectl.kubernetes.io/last-applied-configuration" 인 key 와 value 가 생성됩니다.

    value 에 해당하는 값은 이전에 설정하였던 Pod 리소스의 명세에 해당합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: default
      uid: 5d891f68-1b3f-439d-9615-4c42218fbf97
      resourceVersion: '1301'
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: >
          {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"spec":{"containers":[{"image":"nginx:1.14.2","name":"nginx","ports":[{"containerPort":80}]}]}}

     

    이 상태에서 Pod 의 명세를 수정해도록 하겠습니다.

    간단하게 new: ok 라는 새로운 Label 을 추가하였구요.

    이를 kubectl apply 명령어를 통해서 API 를 실행하게 되면, 변경된 Pod 의 annotation 을 확인할 수 있습니다.

    cat <<EOF> /tmp/pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels: 
        new: ok
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
    EOF
    kubectl apply -f /tmp/pod.yaml

     

    아래의 Pod 의 결과를 확인해보시면,

    metadata.annotations 하위의 last-applied-configuration 값에 labels 이 추가됨을 확인할 수 있습니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: default
      uid: 5d891f68-1b3f-439d-9615-4c42218fbf97
      resourceVersion: '1751'
      labels:
        new: ok
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: >
          {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"labels":{"new":"ok"},"name":"nginx","namespace":"default"},"spec":{"containers":[{"image":"nginx:1.14.2","name":"nginx","ports":[{"containerPort":80}]}]}}

     

    이러한 방식으로 k8s 리소스들은 자신에게 적용된 가장 최신의 설정을 보관하고 있으며,

    이 last-applied-configuration 정보를 통해서 새로 추가된 설정인지, 제거해야할 설정인지 여부를 파악할 수 있습니다.

     

     

    반응형
Designed by Tistory.