개요

쿠버네티스의 어플리케이션 크기와 복잡성등 스케일아웃 환경을 고려하여, 레이블과 애노테이션 설정이 필요하다.

레이블은 또 다른 카테고리화 수준으로 확인할 수 있으며 관리 측면에서 매우 유용하다.

주로 태그와 비슷하게 인식되며 일반적으로 디스커버리의 기초, 태스크 관리등 모든 자원의 구성, 표시, 교차, 색인등으로 적절하게 그룹화하여 표현할 수 있다.

라벨은 파드와 리플리카세트등 쿠버네티스 객체에 첨부하여 키/값 쌍으로 구성한다.

또한 파드와, 리클리카세트, 듀플리케이트 컨트롤러, 서비스등에서 사용된다.

레이블은  셀렉터처럼 작동하며 다양한 작업을 수행하기 위해 쿠버네티스로 리소스 할당에 유용하다.

라벨은 식별정보를 첨부하는데 유용하며 객체를 그룹화 하는 기초를 제공한다.

애노테이션은 라벨과 유사한 저장 메카니즘으로 제공하는데, 도구와 라이브러리에서 활용할 수 있게 식별 불가능한 정보를 유지하기 위하여 설계 되었다.


시작하기전



Lavel

객체의 메타데이터를 식별하는 기능을 제공.

그룹화, 보기, 동작에서 사용될 객체의 기본적인 특성.

라벨은 쿠버네티스의 리소스를 선택하는데 사용이 된다. 각 리소스는 라벨을 가질 수 있고, 라벨 검색 조건에 따라서 특정 라벨을 가지고 있는 리소스만을 선택할 수 있다.

이렇게 라벨을 선택하여 특정 리소스만 배포하거나 업데이트할 수 있고 또는 라벨로 선택된 리소스만 Service에 연결하거나 특정 라벨로 선택된 리소스에만 네트워크 접근 권한을 부여하는 등의 행위를 할 수 있다.

라벨은 metadata 섹션에 키/값 쌍으로 정의가 가능하며, 하나의 리소스에는 하나의 라벨이 아니라 여러 라벨을 동시에 적용할 수 있다.

셀렉터를 사용하는 방법은 오브젝트 스펙에서 selector 라고 정의하고 라벨 조건을 적어 놓으면 된다.

쿠버네티스에서는 두 가지 셀렉터를 제공하는데, 기본적으로 Equaility based selector와, Set based selector 가 있다.

Equality based selector는 같냐, 다르냐와 같은 조건을 이용하여, 리소스를 선택하는 방법으로

  • environment = dev

  • tier != frontend

식으로, 등가 조건에 따라서 리소스를 선택한다.

이보다 향상된 셀렉터는 set based selector로, 집합의 개념을 사용한다.

  • environment in (production,qa) 는 environment가 production 또는 qa 인 경우이고,

  • tier notin (frontend,backend)는 environment가 frontend도 아니고 backend도 아닌 리소스를 선택하는 방법이다.

다음 예제는 my-service 라는 이름의 서비스를 정의한것으로 셀렉터에서 app: myapp 정의해서 Pod의 라벨 app이 myapp 것만 골라서 이 서비스에 바인딩해서 9376 포트로 서비스 하는 예제이다.

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376


Label 적용

# kubectl run alpaca-prod \
> --image=gcr.io/kuar-damo/kuard-amd64:1 \
> --replicas=2 \
> --labels="ver=1,app=alpaca,env=prod"

# kubectl run alpaca-test \
> --image=gcr.io/kuar-demo/kuard-amd64:2 \
> --replicas=1 \
> --labels="ver=2,app=alpaca,env=test"

# kubectl run bandicoot-prod \
> --image=gcr.io/kuar-demo/kuard-amd64:2 \
> --replicas=2 \
> --labels="ver=2,app=bandicoot,env=prod"

# kubectl run bandicoot-staging \
> --image=gcr.io/kuar-demo/kuard-amd64:2 \
> --replicas=1 \
> --labels="ver=2,app=bandicoot,env=staging"

Label 찾기

# kubectl get rc -l deployment=test
# kubectl get services -l container
# kubectl get services -l "titleName in (label1,label2,label3)"
# kubectl get deployments --show-labels
NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE       LABELS
alpaca-prod         2         2         2            2           41s       app=alpaca,env=prod,ver=1
alpaca-test         1         1         1            1           1h        app=alpaca,env=test,ver=2
bandicoot-prod      2         2         2            2           1h        app=bandicoot,env=prod,ver=2
bandicoot-staging   1         1         1            1           1h        app=bandicoot,env=staging,ver=2


라벨 수정.

라벨은 객체를 생성한 후, 객체에 적용 또는 업데이트를 한다.

# kubectl label deployments alpaca-test "canary=true"
# kubectl get deployments --show-labels
NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE       LABELS
alpaca-prod         2         2         2            2           8m        app=alpaca,env=prod,ver=1
alpaca-test         1         1         1            1           1h        app=alpaca,canary=ture,env=test,ver=2
bandicoot-prod      2         2         2            2           1h        app=bandicoot,env=prod,ver=2
bandicoot-staging   1         1         1            1           1h        app=bandicoot,env=staging,ver=2

kubectl label 은 디플로이먼트의 라벨만 변경가능.

디플로이먼트가 생성하는 객체(리플리카, 포드)에는 영향을 미치지 않음.

강제 변경할 경우 디플로이먼트에 포함된 템플릿을 변경해야 함.


-L 옵션을 사용한 kubectl get을 사용하여 라벨값을 열로 표시가능.

# kubectl get deployments -L canary
NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE       CANARY
alpaca-prod         2         2         2            2           22m       
alpaca-test         1         1         1            1           1h        ture
bandicoot-prod      2         2         2            2           1h        
bandicoot-staging   1         1         1            1           1h 


라벨 제거.

# kubectl label deployments alpaca-test "canary-"
deployment.extensions "alpaca-test" labeled
# kubectl get deployments --show-labels
NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE       LABELS
alpaca-prod         2         2         2            2           24m       app=alpaca,env=prod,ver=1
alpaca-test         1         1         1            1           1h        app=alpaca,env=test,ver=2
bandicoot-prod      2         2         2            2           1h        app=bandicoot,env=prod,ver=2
bandicoot-staging   1         1         1            1           1h        app=bandicoot,env=staging,ver=2


라벨 검출 및 필터, 선택

라벨 선택기는 라벨의 집합을 기반으로 쿠버네티스 객체를 필터하는데 사용됨.

# kubectl get pods --selector="ver=2" //ver 라벨이 2인경우.
NAME                                 READY     STATUS    RESTARTS   AGE
alpaca-test-6658d779cc-ll6c5         1/1       Running   0          2h
bandicoot-prod-7bddc557cc-hbn9r      1/1       Running   0          1h
bandicoot-prod-7bddc557cc-sgxlw      1/1       Running   0          1h
bandicoot-staging-7f4788b6df-lrmfc   1/1       Running   0          1h
# kubectl get pods --selector="app=bandicoot,ver=2" //쉼표로 구분가능.
NAME                                 READY     STATUS    RESTARTS   AGE
bandicoot-prod-7bddc557cc-hbn9r      1/1       Running   0          1h
bandicoot-prod-7bddc557cc-sgxlw      1/1       Running   0          1h
bandicoot-staging-7f4788b6df-lrmfc   1/1       Running   0          1h
# kubectl get pods --selector="app in (alpaca,bandicoot)" //app 라벨이 alpaca, bandicoot 인경우.
NAME                                 READY     STATUS    RESTARTS   AGE
alpaca-prod-65587bf567-cjf4f         1/1       Running   0          32m
alpaca-prod-65587bf567-wrpfn         1/1       Running   0          32m
alpaca-test-6658d779cc-ll6c5         1/1       Running   0          2h
bandicoot-prod-7bddc557cc-hbn9r      1/1       Running   0          1h
bandicoot-prod-7bddc557cc-sgxlw      1/1       Running   0          1h
bandicoot-staging-7f4788b6df-lrmfc   1/1       Running   0          1h
# kubectl get deployments --selector="canary"
No resources found.

애노테이션

애노테이션은 도구와 라이브버리를 지원하는 목적으로 객체에 추가적인 메타데이터를 저장하는 장소제공.

쿠버네티스를 구동하는 다른 프로그램들이 api를 통해 객체에 추가적인 데이터를 저장하는 방법.

외부 시스템간 설정 정보를 전달하거나 도구 자체에 대한 정보를 제공하기 위해 사용.

  • 객체에 대한 최신 업데이트의 이유 추적.
  • 특별한 스케줄링 정책을 스케줄러에 전달.
  • 최신 도구에 대한 데이터를 확장해 자원을 업데이트한 내용과 업데이트하는 방법.
  • 라벨에 적합하지 않는 작성, 릴리즈, 또는 이미지정보.
  • 롤아웃을 관리하는 리플리카셋을 추적하기 위하여 디플로이먼트 객체를 활성화.
  • UI의 시각적품질과 유용성을 향상하기 위해 추가데이터 제공,
  • 쿠버네티스의 알파기능을 프로토타입화.

.

.


모든 디폴로이먼튼 삭제.

# kubectl delete deployments --all



  • No labels
Write a comment…