관리 메뉴

피터의 개발이야기

[kubernetes] Datree란, Yaml validation, kubernetes schama validation 본문

Kubernetes/kube 개발환경

[kubernetes] Datree란, Yaml validation, kubernetes schama validation

기록하는 백앤드개발자 2022. 8. 2. 10:42
반응형

 

[kubernetes] 개발환경 목차

ㅁ 개요

 ㅇ kubernetes 구성 시 스크립트 오류는 실행을 해야지만 알 수 있다. 

 ㅇ datree은 코드에서 오류를 자동적으로 검사하여, 오류사항을 미리 예방할 수 있다.

 ㅇ 이 글에서는 datree를 한번 사용해 보고 이를 정리하였다.

 

 

ㅁ Datree란

Datree는 Kubernetes의 잘못된 구성이 프로덕션에 도달하는 것을 방지한다. Datree에서는 개발자의 실수로 인한 프로덕션 장애를 예방하고 장애요소를  개발자들에게 교육하며, 수행하는 Kubernetes 구성 변경을 관리하기 위해 자동화된 검사(내장 및 사용자 정의 가능한 정책 포함)로 추상화 계층을 구현하는 데 도움이 되는 솔루션이다. 다시말해, Datree 클러스터가 프로덕션에서 실패할 수 있는 kubernetes 구성에서 개발자가 오류를 범하지 못하도록 방지함으로써 Kubernetes 사용자를 지원 하는 CLI 도구이다.  이 솔루션은 오픈 소스이므로 Kubernetes 커뮤니티에서 지원할 수 있다.

  DevOps를 제공하는 것 외에도 Datree는 개발자에게 단순화된 Kubernetes 배포 환경을 제공하므로 개발을 관리하는 많은 규칙을 기억할 필요가 없습니다. 인간의 관찰과 기억에 의존하는 대신, 잘못된 구성이 발생하는 즉시 개발자에게 조기에 경고를 보내고 재발을 방지하도록 안내한다. 이 프로세스를 통해 코드가 다음 단계로 이동하기 전에 실수를 포착하고 더 나은 개발자가 될 수 있도록 돕는다.

 

 

ㅁ 시작하기

curl https://get.datree.io | /bin/bash

 ㅇ 시작하기는 여기 공식 문서를 참조하였다.

 

 

 

ㅁ Kubernetes YAML 파일에 대해 CLI를 실행 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: rss-site
  namespace: test
  labels:
    owner: --
    environment: prod
    app: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      namespace: test
      labels:
        app: web
    spec:
      containers:
        - name: front-end
          image: nginx:latest
          readinessProbe:
            tcpSocket:
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 10
          resources:
            requests:
              memory: "64Mi"
              cpu: "64m"
            limits:
              cpu: "500m"
          ports:
            - containerPort: 80
        - name: rss-reader
          image: datree/nginx@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
          livenessProbe:
            httpGet:
              path: /healthz
              port: 8080
              httpHeaders:
                - name: Custom-Header
                  value: Awesome
          readinessProbe:
            tcpSocket:
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 10
          resources:
            requests:
              cpu: "64m"
              memory: "128Mi"
            limits:
              memory: "128Mi"
              cpu: "500m"
          ports:
            - containerPort: 88

ㅇ 설치하면 기본적으로 k8s-demo.yaml이 존재한다. 위는 그 파일의 내용이다.

 

 

datree test ~/.datree/k8s-demo.yaml

 ㅇ CLI에서 다음 출력을 얻을 수 있다.

 ㅇ Yaml 파일의 validation을 체크한다.

 ㅇ kubernetes 버젼에 따른 스키마 validation을 체크해 준다.

 ㅇ policy check에서는 운영환경에서의 위험성을 경고하고 있다.

 

 

ㅁ policy check 분석

❌  Ensure each container image has a pinned (tag) version  [1 occurrence]
    - metadata.name: rss-site (kind: Deployment)
💡  Incorrect value for key `image` - specify an image version to avoid unpleasant "version surprises" in the future

x 각 컨테이너 이미지에 고정(태그) 확인
  잘못된 '이미지' 키값 - 향후 불쾌한 "버전 놀라움'을 피하기 위해 이미지 버전을 지정.


❌  Ensure each container has a configured liveness probe  [1 occurrence]
    - metadata.name: rss-site (kind: Deployment)
💡  Missing property object `livenessProbe` - add a properly configured livenessProbe to catch possible deadlocks

x 각 컨테이너에 liveness probe가 구성되어 있는지 확인
  누락된 속성 개체 `livenessProbe` - 가능한 교착 상태를 포착하기 위해 적절하게 구성된 livenessProbe 추가


❌  Ensure each container has a configured memory limit  [1 occurrence]
    - metadata.name: rss-site (kind: Deployment)
💡  Missing property object `limits.memory` - value should be within the accepted boundaries recommended by the organization

x 각 컨테이너에 메모리 제한이 구성되어 있는지 확인. 
  누락된 속성 개체 `limits.memory` - 값은 조직에서 권장하는 허용 범위 내에 있어야 함.


❌  Ensure workload has valid label values  [1 occurrence]
    - metadata.name: rss-site (kind: Deployment)
💡  Incorrect value for key(s) under `labels` - the vales syntax is not valid so the Kubernetes engine will not accept it

x 워크로드에 유효한 레이블 값이 있는지 확인
  `labels` 아래의 잘못된 키 값 - vales 구문이 유효하지 않아 Kubernetes 엔진이 이를 수락하지 않음.

 ㅇ 얼마 전에  [kubernetes 트러블슈팅] error: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1" 

     글을 쓴적이 있었다. 

 ㅇ 원인은 쿠버네티스 버젼 차이로 인한 kubernetes schama validation 체크를 통해 예방할 수 있는 부분이었다.

 ㅇ 운영을 하면서 잠재적으로 장애가 발생할 수 있는 부분을 polich check를 통해 인지하고 예방할 수 있도록 도와주고 있다.

 

 

ㅁ Jenkins pipeline

  ㅇ 젠킨스에 ​Datree를 파이프라인으로 구축할 수 있다.

 

 

 

ㅁ CI config example

pipeline{
    agent any
    stages{
        stage('indentifying misconfigs using datree'){
            steps{
                script{
                        withEnv(['DATREE_TOKEN=<your-account-token>']) {
                              sh 'datree test *.yaml --only-k8s-files'
                        }
                }
            }
        }
    }
}

 

 

ㅁ 함께 보면 좋은 사이트

 

What is Datree? | Datree docs

What is Datree

hub.datree.io

 

 

반응형
Comments