[Kubernetes] Annotation (어노테이션)DevOps/Kubernetes2022. 5. 18. 15:39
Table of Contents
728x90
✔️ Annotation (어노테이션)
어노테이션 | Kubernetes
label과 거의 흡사하나 비식별 메타데이터이다.
식별하는 용도로 사용하는 것이 아니기 때문에 레이블 셀렉터의 기능을 가지지 않고 단순히 정보를 설정한다.
"metadata": {
"annotations": {
"key1" : "value1",
"key2" : "value2"
}
}
다음은 어노테이션에 기록할 수 있는 정보의 예제이다.
- 필드는 선언적 구성 계층에 의해 관리된다. 이러한 필드를 어노테이션으로 첨부하는 것은 클라이언트 또는 서버가 설정한 기본 값, 자동 생성된 필드, 그리고 오토사이징 또는 오토스케일링 시스템에 의해 설정된 필드와 구분된다.
- 빌드, 릴리스, 또는 타임 스탬프, 릴리스 ID, git 브랜치, PR 번호, 이미지 해시 및 레지스트리 주소와 같은 이미지 정보.
- 로깅, 모니터링, 분석 또는 감사 리포지터리에 대한 포인터.
- 디버깅 목적으로 사용될 수 있는 클라이언트 라이브러리 또는 도구 정보: 예를 들면, 이름, 버전, 그리고 빌드 정보.
- 다른 생태계 구성 요소의 관련 오브젝트 URL과 같은 사용자 또는 도구/시스템 출처 정보.
- 경량 롤아웃 도구 메타데이터. 예: 구성 또는 체크포인트
- 책임자의 전화번호 또는 호출기 번호, 또는 팀 웹 사이트 같은 해당 정보를 찾을 수 있는 디렉터리 진입점.
- 행동을 수정하거나 비표준 기능을 수행하기 위한 최종 사용자의 지시 사항.
- 어노테이션을 사용하는 대신, 이 유형의 정보를 외부 데이터베이스 또는 디렉터리에 저장할 수 있지만, 이는 배포, 관리, 인트로스펙션(introspection) 등을 위한 공유 클라이언트 라이브러리와 도구 생성을 훨씬 더 어렵게 만들 수 있다.
클라이언트가 메타데이터를 get 할 수 있다.
파드에 어노테이션에 여러개 붙어 있을 때 client (다른 App)이 파드의 어노테이션 정보를 가져갈 수 있다.
k8s 입장에서는 단순히 정보이지만 다른 App의 입장에서는 해당 정보를 가지고 무언가를 할 수 있다.
✔️ 어노테이션 명령어
명령형 커맨드
kubectl annotate pods myweb created-by=Jang
kubectl annotate pods myweb created-by=Kim --overwrite
kubectl annotate pods myweb created-by-
vagrant@k8s-node1:~/annotation$ kubectl get pods myweb -o yaml | more
apiVersion: v1
kind: Pod
metadata:
annotations:
cni.projectcalico.org/containerID: 1eca292c96a1ff5ddf7c30bf43ed7f96affc8209d05c4a37ddd843db16f46984
cni.projectcalico.org/podIP: 10.233.96.6/32
cni.projectcalico.org/podIPs: 10.233.96.6/32
직접 만든적이 없지만 calico에 의해 어노테이션이 붙어있다.
calico가 파드에 비식별 메타데이터를 붙여놓았다.
calico가 파드를 관리를 위해 파드의 목록이나 컨테이너 id, ip 정보를 관리하기 위해 붙여놓았다.
다른 App이 꼭 파드가 아니어도 해당되는 특정 리소스의 어노테이션을 참조할 수 있다.
예시로 어플리케이션이 기록을 자동으로 한다던지 이 정보를 가져가서 관리의 목적으로 쓴다던지 할 수 있다.
✔️ 어노테이션 생성
vagrant@k8s-node1:~/annotation$ kubectl annotate pods myweb created-by=Shin
pod/myweb annotated
vagrant@k8s-node1:~/annotation$ kubectl get pods myweb -o yaml | head
apiVersion: v1
kind: Pod
metadata:
annotations:
cni.projectcalico.org/containerID: 1eca292c96a1ff5ddf7c30bf43ed7f96affc8209d05c4a37ddd843db16f46984
cni.projectcalico.org/podIP: 10.233.96.6/32
cni.projectcalico.org/podIPs: 10.233.96.6/32
created-by: Shin
creationTimestamp: "2022-05-17T12:58:28Z"
labels:
✔️ 어노테이션 변경
vagrant@k8s-node1:~/annotation$ kubectl annotate pods myweb created-by=Kim
error: --overwrite is false but found the following declared annotation(s): 'created-by' already has a value (Shin)
vagrant@k8s-node1:~/annotation$ kubectl annotate pods myweb created-by=Kim --overwrite
pod/myweb annotated
vagrant@k8s-node1:~/annotation$ kubectl get pods myweb -o yaml | head
apiVersion: v1
kind: Pod
metadata:
annotations:
cni.projectcalico.org/containerID: 1eca292c96a1ff5ddf7c30bf43ed7f96affc8209d05c4a37ddd843db16f46984
cni.projectcalico.org/podIP: 10.233.96.6/32
cni.projectcalico.org/podIPs: 10.233.96.6/32
created-by: Kim
creationTimestamp: "2022-05-17T12:58:28Z"
labels:
✔️ 어노테이션 삭제
vagrant@k8s-node1:~/annotation$ kubectl annotate pods myweb created-by-
pod/myweb annotated
vagrant@k8s-node1:~/annotation$ kubectl get pods myweb -o yaml | head
apiVersion: v1
kind: Pod
metadata:
annotations:
cni.projectcalico.org/containerID: 1eca292c96a1ff5ddf7c30bf43ed7f96affc8209d05c4a37ddd843db16f46984
cni.projectcalico.org/podIP: 10.233.96.6/32
cni.projectcalico.org/podIPs: 10.233.96.6/32
creationTimestamp: "2022-05-17T12:58:28Z"
labels:
APP: nginx
✔️ YAML 파일로 어노테이션 생성
apiVersion: v1
kind: Pod
metadata:
name: myweb-label-anno
labels:
APP: apache
ENV: staging
annotations:
Created-by: Jang
spec:
containers:
- name: myweb
image: httpd
ports:
- containerPort: 80
protocol: TCP
vagrant@k8s-node1:~/annotation$ cp ../label/myweb.yaml .
vagrant@k8s-node1:~/annotation$ vi myweb.yaml
vagrant@k8s-node1:~/annotation$ cat myweb.yaml
apiVersion: v1
kind: Pod # kubectl api-resources
metadata:
name: myweb-label-anno
labels:
APP: apache
ENV: staging
annotations:
Created-by: Shin
spec:
containers:
- name: myweb
image: httpd
ports:
- containerPort: 80
protocol: TCP
vagrant@k8s-node1:~/annotation$ kubectl create -f myweb.yaml
pod/myweb-label-anno created
vagrant@k8s-node1:~/annotation$ kubectl get pods myweb-label-anno -o yaml | head
apiVersion: v1
kind: Pod
metadata:
annotations:
Created-by: Shin
cni.projectcalico.org/containerID: d4087795fdcbf6f09f3bb47102d90c246ff7cd2849b789c12ef2f59eb9003623
cni.projectcalico.org/podIP: 10.233.96.7/32
cni.projectcalico.org/podIPs: 10.233.96.7/32
creationTimestamp: "2022-05-17T13:39:27Z"
labels:
728x90
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] ReplicationController & ReplicaSets (0) | 2022.05.19 |
---|---|
[Kubernetes] Pod의 LifeCycle (파드의 생명주기) (0) | 2022.05.19 |
[Kubernetes] Label, LabelSelector (레이블, 레이블셀렉터) (0) | 2022.05.18 |
[Kubernetes] Namespace ( + 오브젝트의 이름와 UID) (0) | 2022.05.18 |
[Kubernetes] Pod Design (0) | 2022.05.17 |
@TTOII :: 뭉게뭉게 클라우드
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!