Kubenetes

Kubenetes 정리#3(helm)

PON_Z 2022. 9. 29. 15:12

- 컨테이너 인프라 환경을 구성하는 도커와 쿠버네티스에 대해 알아보았다. 새로 개발한 어플리케이션으 쿠버네티스에서 사용하는 과정은 docker build -> docker push -> kubectl create -> kubectl expose 이다. 이러한 과정을 흔히 파이프라인(Pipeline)이라고 한다. 대부분의 IT작업은 파이프라인 자동화를 시켜 진행한다.

 

- 자동화는 흔히 CI/CD 두 가지로 정의 된다. 간단히 설명하면 CI는 빌드/테스트 자동화 과정이고, CD는 배포 자동화 과정이다. CI를 마친 어플리케이션은 신뢰할 수 있는 상태가 되며 CD는 CI과정을 거친 어플리 케이션을 실제 사용하는 환경에 자동으로 배포하는것을 말한다.

 

- CI/CD를 컨테이너 인프라 관점에서 보자면, 개발자가 소스를 커밋(Commit)하고 푸시(Push) 하면 CI 단계로 진입한다. CI 단계에서는 애플리케이션이 자동 빌드되고 테스트를 거쳐 배포할 수 있는 애플리케이션인지 확인한다. 테스트를 통과하면 신뢰할 수 있는 애플리케이션으로 간주하고 CD 단계로 넘어간다. CD 단계에서는 애플리케이션을 컨테이너 이미지로 만들어서 파드, 디플로이먼트, 스테이트풀셋 등 다양한 오브젝트 조건에 맞춰 미리 설정한 파일을 통해 배포한다.

 

- 헬름(Helm)은 쿠버네티스의 템플릿들을 모아 패키지 형태로 손쉽게 관리할 수 있도록 도와주는 툴이다. 즉 CD단계에서 쓰이는 쿠버네티스 배포 자동화 툴이라고 보면 이해하기 쉽다. 또한 같은 서비스에서 사용할 app들을 묶어서 관리할 수 있다는 이점이 있다.

 

- 물론 헬름이 배포 자동화 기능만 제공하는 것은 아니다. GO언어를 통해 동적으로 오브젝트를 관리할 수 있는 기능도 제공한다. 하지만 일반적인 경우에는 사용하지 않아도 문제는 없다. 

 

- 헬름도 도커와 마찬가지로 허브 개념이 존재한다. 이미 만들어진 헬름 차트를 제공받고 싶다면 링크를 참고하길 바란다.

 

- 헬름의 설치는 Linux나 다른 OS의 경우 공식 홈페이지를 참고하고, windows의 경우 아래를 참고 바란다.

 

1. 헬름 다운로드(github.com/helm/helm/releases)

2. 로컬디스크 내PC/C에 압축 풀기

3. 환경 변수 설정 :

시스템 환경 변수 새로만들기 =>

시스템 변수 PATH에 추가 =>

- helm을 create하면 아래와 같은 트리구조가 생성된다. templates 안에 배포할 yaml 파일을 넣어 두면 된다. 각각의 yaml 파일에서 사용할 image, namespace, name등을 values에 따로 정의하여 이를 import해서 사용하는 형식으로 작동한다.

아마 처음 helm create를 하면 예제 파일 자동으로 생성될 텐데 삭제해도 상관없다.

- 아래는 values.yaml의 예시이다. 아래와 같이 작성하고

replicaCount: 1

namespace: test

image:
  elasticsearch:
    repository: docker.elastic.co/elasticsearch/elasticsearch
    pullPolicy: Always
    tag: "7.17.5"
  fluentd:
    repository: docker.elastic.co/fluentd/fluentd
    pullPolicy: Always
    tag: "1.0.1"
  kibana:
    repository: docker.elastic.co/kibana/kibana
    pullPolicy: Always
    tag: "7.17.5"


nameOverride:
  elasticsearchName: "elasticsearch"
  fluentdName: "fluentd"
  kibanaName: "kibana"


imagePullSecrets: []

fullnameOverride: ""


serviceAccount:
  # Specifies whether a service account should be created
  create: false
  # Annotations to add to the service account
  annotations: {}
  name: ""

- 아래와 같이 사용하면 된다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{.Values.nameOverride.elasticsearchName}}
  namespace: {{.Values.namespace}}
  labels:
    app: elasticsearch
spec:
  replicas: 1
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      containers:
      - name: {{.Values.nameOverride.elasticsearchName}}
        image: "{{ .Values.image.elasticsearch.repository }}:{{ .Values.image.elasticsearch.tag }}"
        resources:
          requests:
            cpu: "2"
            memory: "2Gi"
          limits:
            cpu: "2"
            memory: "2Gi"
        env:
        - name: discovery.type
          value: single-node
        ports:
        - containerPort: 9200

 

ref) https://seosh817.tistory.com/104

728x90

'Kubenetes' 카테고리의 다른 글

Kubenetes 정리#2(k8s)  (1) 2022.09.29