2. k8s 플러그인 활용

krew 플러그인 관리자 설치

설치는 공식 페이지의 내용을 복붙하기만 하면 된다.

https://krew.sigs.k8s.io/docs/user-guide/setup/install/

 

Installing · Krew

© 2023 The Kubernetes Authors. Krew is a Kubernetes SIG CLI project. Edit Page ·

krew.sigs.k8s.io

  • git 설치
  • krew 설치
(
  set -x; cd "$(mktemp -d)" &&
  OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
  KREW="krew-${OS}_${ARCH}" &&
  curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
  tar zxvf "${KREW}.tar.gz" &&
  ./"${KREW}" install krew
)
  • PATH 등록
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"

 

neat : 첫번째로 선정한 플러그인

모든 쿠버네스트 오브젝트는 YAML 파일로 설치/실행하고, 실행중인 모든 오브젝트는 YAML 파일로 가져올 수(export) 있다. 실제 설치할 때 쓰인 YAML과 export 한 YAML 사이에는 다른 점이 있는데, 설치 시 필요하지 않은 현재 상태 정보도 포함된다. neat 는 이런 불필요한 정보를 제거해서 설치시 원본 YAML 파일이 없어도 쉽게 오브젝트 설치 파일을 만들 수 있다. krew를 이용해서 neat 를 설치해 보자.

kubectl krew install neat

설치된 nginx deployment 를 export 해보자.

kubectl get deployment web-server -o yaml | kubectl neat

결과로는 아래와 같이 나온다.

apiVersion: v1
items:
- apiVersion: apps/v1
  kind: Deployment
  metadata:
    annotations:
      deployment.kubernetes.io/revision: "1"
    labels:
      app: web-server
    name: web-server
    namespace: default
  spec:
    progressDeadlineSeconds: 600
    replicas: 1
    revisionHistoryLimit: 10
    selector:
      matchLabels:
        app: web-server
    strategy:
      rollingUpdate:
        maxSurge: 25%
        maxUnavailable: 25%
      type: RollingUpdate
    template:
      metadata:
        creationTimestamp: null
        labels:
          app: web-server
      spec:
        containers:
        - image: nginx
          imagePullPolicy: Always
          name: nginx
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
        dnsPolicy: ClusterFirst
        restartPolicy: Always
        schedulerName: default-scheduler
        terminationGracePeriodSeconds: 30
kind: List
metadata:
  resourceVersion: ""

neat 보내지 않고 export 된 모습과 비교해보자.

kubectl get deployment -o yam
apiVersion: v1
items:
- apiVersion: apps/v1
  kind: Deployment
  metadata:
    annotations:
      deployment.kubernetes.io/revision: "1"
    creationTimestamp: "2023-10-29T21:57:48Z"
    generation: 1
    labels:
      app: web-server
    name: web-server
    namespace: default
    resourceVersion: "12926"
    uid: 347a4ea0-daec-462f-a9ef-f88cd65be9ff
  spec:
    progressDeadlineSeconds: 600
    replicas: 1
    revisionHistoryLimit: 10
    selector:
      matchLabels:
        app: web-server
    strategy:
      rollingUpdate:
        maxSurge: 25%
        maxUnavailable: 25%
      type: RollingUpdate
    template:
      metadata:
        creationTimestamp: null
        labels:
          app: web-server
      spec:
        containers:
        - image: nginx
          imagePullPolicy: Always
          name: nginx
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
        dnsPolicy: ClusterFirst
        restartPolicy: Always
        schedulerName: default-scheduler
        securityContext: {}
        terminationGracePeriodSeconds: 30
  status:
    availableReplicas: 1
    conditions:
    - lastTransitionTime: "2023-10-29T21:58:02Z"
      lastUpdateTime: "2023-10-29T21:58:02Z"
      message: Deployment has minimum availability.
      reason: MinimumReplicasAvailable
      status: "True"
      type: Available
    - lastTransitionTime: "2023-10-29T21:57:48Z"
      lastUpdateTime: "2023-10-29T21:58:02Z"
      message: ReplicaSet "web-server-6484c4f547" has successfully progressed.
      reason: NewReplicaSetAvailable
      status: "True"
      type: Progressing
    observedGeneration: 1
    readyReplicas: 1
    replicas: 1
    updatedReplicas: 1
kind: List
metadata:
  resourceVersion: ""

현재 deployment 의 상태를 나타내는 속성들이 정리되어 나온다. 설치되어 있는 오브젝트들을 분석하기 좋은 플러그인이다.

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유