Skip to content

Kustomize

About

Kustomize는 쿠버네티스 구성을 사용자 정의화하는 도구이다. 이는 애플리케이션 구성 파일을 관리하기 위해 다음 기능들을 가진다.

  • 다른 소스에서 리소스 생성
  • 리소스에 대한 교차 편집 필드 설정
  • 리소스 집합을 구성하고 사용자 정의

Install

curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash

winget 으로 설치:

winget install --id Kubernetes.kustomize -e

Usage

보통 Pipe 로 연결하여 -f - 옵셥으로 사용하더라 (대표적으로 kubeflow):

kustomize build ./example | kubectl apply -f -

또는 -k 옵션으로 사용할 수 있다:

kubtctl apply -k ./example

설치된거 제거 방법

# 1. 일반 리소스 삭제
kubectl delete -k . --ignore-not-found=true

# 2. 강제 삭제 (타임아웃 시)
kubectl delete -k . --grace-period=0 --force --ignore-not-found=true

Example

kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deploy/deployment.yaml
  - deploy/service.yaml

deploy/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: inspekt-deployment
  labels:
    app: inspekt
spec:
  replicas: 1
  selector:
    matchLabels:
      app: inspekt
  template:
    metadata:
      labels:
        app: inspekt
    spec:
      containers:
        - name: inspekt
          image: premist/inspekt:latest
          env:
            - name: NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: HOST_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.hostIP
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          ports:
            - containerPort: 8000
          livenessProbe:
            httpGet:
              path: /
              port: 8000
            initialDelaySeconds: 3
            periodSeconds: 3

deploy/service.yaml

apiVersion: v1
kind: Service
metadata:
  name: inspekt
  namespace: default
spec:
  ports:
  - name: http
    targetPort: 8000
    port: 80
  selector:
    app: inspekt

deploy/ingress-example.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: inspekt
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: inspekt
              servicePort: http

See also

Favorite site