programing

구성 맵 kubernetes 여러 환경

shortcode 2023. 7. 22. 13:37
반응형

구성 맵 kubernetes 여러 환경

Kubernetes 클러스터의 구성 데이터를 사용하여 Spring Boot 애플리케이션을 배포하려고 합니다.저는 쿠버네티스 클러스터에서 메시지를 읽어 메시지를 출력하는 간단한 Rest Controller를 가지고 있습니다.

    private String message = "Message not coming from Kubernetes config map";

@RequestMapping(value="/echo", method=GET)
public String printKubeConfig() {
    return message;
}

내 애플리케이션에서 구성 맵의 이름을 지정했습니다.yml

spring:
  application:
    name: echo-configmap

에코 구성 맵

apiVersion: v1
kind: ConfigMap
metadata:
  name: echo-configmap
data:
  application.properties: |-
    message=Hello from dev Kubernetes Configmap
  application_qa.properties: |-
    message=Hello from qa Kubernetes Configmap

QA, int, test 등과 같은 여러 환경이 있습니다.

  1. 구성 맵에서 환경별 속성을 지정하는 가장 좋은 방법은 무엇입니까?Spring boot 애플리케이션에서 액세스하는 방법은 무엇입니까?
    qa에 , 내 from Configmap"를 반환해야 . "qa Kubernetes Configmap" 메시지는 "hello"입니다.
  2. 또한 향후 GIT에서 이러한 구성 파일을 읽을 계획도 있습니다.그 사용 사례를 어떻게 처리합니까?

대부분의 상자에 설치되어 있는 것 이상의 도구를 사용하지 않고 필요한 것을 제공하는 답변을 제공해 드리겠습니다.먼저 이 방법을 사용해 보고, 이 접근 방식을 관리하고 확장하는 것이 어려워진 경우 좀 더 정교한 방법으로 전환하십시오.

1단계: 환경별 버전 제어 구성 맵

다과같은만들기와 같은 .k8s/configmaps환경당 하나의 구성 맵을 생성합니다.

k8s/configmaps/properties.dev.yaml
k8s/configmaps/properties.qa.yaml
k8s/configmaps/properties.sit.yaml
k8s/configmaps/properties.uat.yaml

각 구성 맵에는 환경별 설정이 포함되어야 합니다.

2단계: 환경별 네임스페이스 보유

환경별로 다음과 같은 k8s 네임스페이스를 생성합니다.

 application-dev
 application-qa
 application-sit
 application-uat

3단계: 환경별 구성 맵 생성

약간의 타격은 여기에 도움이 될 것입니다.

#!/usr/bin/env bash
# apply-configmaps.sh
namespace="application-${ENVIRONMENT}"
for configmap in ./k8s/configmaps/*.${ENVIRONMENT}.yml; do
    echo "Processing ConfigMap $configmap"
    kubectl apply -n ${namespace} -f $configmap
done

이제 모든 환경에 대한 구성 맵을 만들거나 업데이트하기만 하면 됩니다.

ENVIRONMENT=dev ./update-configmaps.sh

4단계: CI/CD로 작업 완료

이제 CI/CD 파이프라인을 만들 수 있습니다. 구성 맵 소스가 변경되면 위에 표시된 명령을 실행하십시오.

요약

특별한 도구 없이 원시 명령을 사용하여 다음을 수행할 수 있습니다.

  • 버전 제어 구성
  • 환경별 구성 관리
  • 구성 코드가 변경될 때 구성 업데이트 또는 생성
  • 필요한 경우 CI/CD 파이프라인에서 동일한 접근 방식을 쉽게 적용

보다 정교한 도구를 사용하여 동일한 문제를 해결하기 전에 이 기본적인 '첫 번째 원칙'을 따르는 것이 좋습니다. 대부분의 경우 큰 힘을 들이지 않고 직접 작업을 수행할 수 있으며, 핵심 개념을 학습하여 나중에 필요할 때까지 보다 정교한 도구를 절약할 수 있습니다.

도움이 되길 바랍니다!

이것은 헬름에게 좋은 사용 사례처럼 들립니다.기본적으로 템플릿에서 Kubernetes 리소스(ConfigMaps, Deployments 및 기타 필요한 모든 리소스)를 생성할 수 있는 Helm Chart로 애플리케이션을 배포할 수 있습니다.

조타 장치 차트의 설명서를 사용하여 조타 장치를 시작할 수 있습니다.으로 차트를 작성한 후에는 다음과 같이 표시됩니다.templates/ YAML 수 입니다. ConfigMap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ printf "%s-%s" .Release.Name .Chart.Name }}
  labels:
    app: {{ .Chart.Name | trunc 63 | trimSuffix "-" }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
data:
  application.properties: |-
    message={{ .Values.properties.message }}

개체에 두 할 수 실제로는 YAML 템플릿).helm create이미 적절한 기본 배포를 생성합니다.).ConfigMap을 볼륨으로 추가하기만 하면 됩니다.

containers:
  - name: {{ .Chart.Name }}
    # [...]
    volumes:
      - name: property-volume
        mountPath: /etc/your-app/properties
volumes:
  - name: property-volume
    configMap:
      name: {{ printf "%s-%s" .Release.Name .Chart.Name }}

장치 에는 각조장차는에가 .values.yaml템플릿을 채우는 데 사용되는 기본값을 정의할 수 있는 파일입니다.은 이렇게 수 에는 " " " " " " (ConfigMap " " " " " " " " " (" ConfigMap " " " " 이 포함되어 ).{{ .Values.properties.message }}식):

replicaCount: 1
image:
  repository: your-docker-image
  tag: your-docker-tag
properties:
  message: Hello!

그런 다음 이 도움말 차트와 명령을 사용하여 다른 구성으로 원하는 만큼 응용 프로그램을 배포합니다.다른 YAML 파일을 제공할 수 있습니다. 이 파일에서 특정 값을 재정의할 수 있습니다.values.yaml을 덮어씁니다.--set:

$ helm install --name dev --set image.tag=latest --set replicaCount=1 path/to/chart
$ helm install --name prod --set image.tag=stable --set replicaCount=3 --set properties.message="Hello from prod" path/to/chart

두 번째 질문과 관련하여: 물론 헬름 차트를 버전 관리에 넣어야 합니다.그런 다음 명령을 사용하여 이미 배포된 응용 프로그램에 변경 사항을 적용할 수 있습니다.

기밀이 아닌 데이터에 대한 각 Git 프로젝트에 이 도구를 사용할 것입니다.https://github.com/kubernetes-sigs/kustomize

메타데이터에서 포드를 필터링할 수 있습니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mycomponent
    env: dev
    tier: backend
  name: mycomponent
  namespace: myapplication

kubectl get pods -n my application -l env=dev, tier=dll, app=mycomponent

으로 응용 이 일적으애실때행에서 .qa 응프용방않음에서 실행되는 productionKubernetes를 사용하면 다른 환경에 대해 다른 네임스페이스를 사용하여 이러한 분리를 수행할 수 있습니다.그런 식으로, 위에 있는 물체들은prod는 네스페개 다릅다에 .qa네임스페이스입니다.또 다른 더 비싼 접근 방식은 다른 환경에 다른 k8s 클러스터를 사용하는 것입니다.

설정을 하여 " " " 를 합니다.Deployment해당 네임스페이스의 개체입니다.이것.Deployment을 이용할 것입니다.ConfigMapSpring Boot 속성을 포함하는 개체입니다.이것을 부르자.ConfigMap 예를 들어 에코 속성.

이러한 방식으로 모든 네임스페이스는 에코 속성의 고유한 복사본을 가질 것입니다. ConfigMap각각은 자신이 속한 환경에 대한 특정 구성을 포함합니다.

Deployment는 개가사다니를 합니다.ConfigMap환경 변수를 사용하거나 파일을 읽음으로써 속성을 확인할 수 있습니다.여기서 중요한 점은 에코 속성을 변경하면 ConfigMap기본적으로 응용 프로그램에서 이러한 새 값을 볼 수 없습니다.쿠베르네테스는 지금까지 이 기능이 없습니다.비교할 수 없습니다.ConfigMap동적 구성 솔루션인 Spring Cloud Config로 이동합니다.

유사한 동작을 수행할 수 있는 접근 방식으로는 클러스터에서 fabric8 ConfigMap 컨트롤러를 사용할 수 있습니다.이 컨트롤러는 클러스터에서 실행되는 프로세스이며 다음과 같은 경우에 응용 프로그램을 다시 시작합니다.ConfigMap새 구성 값을 읽을 수 있도록 변경합니다.

변경될 시작하지될 수 있는 하고 Spring Cloud Config를 사용해야 .ConfigMaps응용 프로그램 이름 또는 포트와 같은 변경되지 않는 다른 속성에 대해 설명합니다.

사용 사례를 살펴봐야 할 것처럼 들립니다.spring-cloud-config- https://cloud.spring.io/spring-cloud-config/

config-server는 git 저장소에 위치할 수 있는 구성을 제공하는 인프라 구성 요소입니다.

은 config-client 파일에 합니다.config-server시작 시 현재 프로필에 적용 가능한 구성을 로드합니다.

환경에 따라 분기가 다르거나 환경별로 프로파일을 사용할 수 있습니다.에서 kubernetes를 할 수 .SPRING_PROFILES_ACTIVE환경 변수입니다.

언급URL : https://stackoverflow.com/questions/47728512/config-map-kubernetes-multiple-environments

반응형