다음을 통해 공유


Helm을 사용하여 Kubernetes 배포와 통합

Kubernetes에서 호스트되는 애플리케이션은 App Configuration 공급자 라이브러리를 사용하여 App Configuration의 데이터에 액세스할 수 있습니다. App Configuration 공급자에는 기본 제공 캐싱 및 새로 고침 기능이 있으므로 애플리케이션은 재배포 없이 동적 구성을 사용할 수 있습니다. 애플리케이션을 업데이트하지 않으려는 경우 이 자습서에서 배포를 통해 Helm을 사용하여 App Configuration의 데이터를 Kubernetes로 가져오는 방법을 확인합니다. 이러한 방식으로 애플리케이션은 Kubernetes 변수 및 비밀에서 구성에 계속 액세스할 수 있습니다. 애플리케이션에서 새 구성 변경 내용을 선택하도록 하려면 Helm 업그레이드를 실행합니다.

Azure 앱 구성에 액세스하기 위해 Kubernetes에서 호스트되는 워크로드에 대한 옵션을 참조하세요.

Helm은 Kubernetes에서 실행되는 애플리케이션을 정의, 설치 및 업그레이드할 수 있는 방법을 제공합니다. Helm 차트에는 Kubernetes 애플리케이션의 인스턴스를 만드는 데 필요한 정보가 포함되어 있습니다. 구성은 차트 자체 외부의 values.yaml이라는 파일에 저장됩니다.

릴리스 프로세스 중에 Helm은 차트를 적절한 구성과 병합하여 애플리케이션을 실행합니다. 예를 들어 values.yaml정의된 변수는 실행 중인 컨테이너 내에서 환경 변수로 참조할 수 있습니다. Helm은 또한 데이터 볼륨으로 탑재되거나 환경 변수로 노출될 수 있는 Kubernetes 비밀 만들기를 지원합니다.

Helm을 실행할 때 명령줄에 추가 YAML 기반 구성 파일을 제공하여 values.yaml 에 저장된 값을 재정의할 수 있습니다. Azure 앱 Configuration은 YAML 파일로 구성 값 내보내기를 지원합니다. 이 내보내기 기능을 배포에 통합하면 Kubernetes 애플리케이션이 App Configuration에 저장된 구성 값을 활용할 수 있습니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • Helm을 사용하여 Kubernetes에 애플리케이션을 배포할 때 App Configuration의 값을 사용합니다.
  • App Configuration에서 Key Vault 참조를 기반으로 Kubernetes 비밀을 만듭니다.

이 자습서에서는 Helm을 사용하여 Kubernetes를 관리하는 기본적인 이해를 가정합니다. Azure Kubernetes Service에서 Helm을 사용하여 애플리케이션을 설치하는 방법에 대해 자세히 알아봅니다.

필수 조건

키-값 추가

App Configuration 저장소에 다음 키 값을 추가하고 레이블콘텐츠 형식에 기본값을 그대로 둡니다. Azure Portal 또는 CLI를 사용하여 저장소에 키-값을 추가하는 방법에 대한 자세한 내용은 키-값 만들기로 이동합니다.

settings.color 흰색
settings.message Azure 앱 구성의 데이터

App Configuration에 Key Vault 참조 추가

  1. Azure Portal에 로그인하고 이름 암호 및 값 myPassword사용하여 Key Vault에 비밀을 추가합니다.

  2. 이전 섹션에서 만든 App Configuration 저장소 인스턴스를 선택합니다.

  3. 구성 탐색기를 선택합니다.

  4. + 키 자격 증명 모음 참조 만들기>를 선택하고 다음 값을 지정합니다.

    • : secrets.password를 선택합니다.
    • 레이블: 이 값을 비워 둡니다.
    • 구독, 리소스 그룹키 자격 증명 모음: 이전 단계에서 만든 키 자격 증명 모음의 값에 해당하는 값을 입력합니다.
    • 비밀: 이전 섹션에서 만든 암호라는 비밀을 선택합니다.

Helm 차트 만들기

먼저, 다음 명령을 사용하여 Helm 차트 샘플을 만듭니다.

helm create mychart

Helm은 아래와 같은 구조를 사용하여 mychart라는 새 디렉터리를 만듭니다.

자세한 내용은 이 차트 가이드 를 따르세요.

mychart
|-- Chart.yaml
|-- charts
|-- templates
|   |-- NOTES.txt
|   |-- _helpers.tpl
|   |-- deployment.yaml
|   |-- ingress.yaml
|   `-- service.yaml
`-- values.yaml

다음으로 deployment.yaml 파일의 spec:template:spec:containers 섹션을 업데이트합니다. 다음 코드 조각은 컨테이너에 두 개의 환경 변수를 추가합니다. 배포 시 해당 값을 동적으로 설정합니다.

env:
- name: Color
    value: {{ .Values.settings.color }}
- name: Message
    value: {{ .Values.settings.message }}

업데이트 후 전체 deployment.yaml 파일은 아래와 같습니다.

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: {{ include "mychart.fullname" . }}
  labels:
    app.kubernetes.io/name: {{ include "mychart.name" . }}
    helm.sh/chart: {{ include "mychart.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ include "mychart.name" . }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ include "mychart.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env:
            - name: Color
              value: {{ .Values.settings.color }}
            - name: Message
              value: {{ .Values.settings.message }}
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /
              port: http
          readinessProbe:
            httpGet:
              path: /
              port: http
          resources:
{{ toYaml .Values.resources | indent 12 }}
    {{- with .Values.nodeSelector }}
      nodeSelector:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.affinity }}
      affinity:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.tolerations }}
      tolerations:
{{ toYaml . | indent 8 }}
    {{- end }}

중요한 데이터를 Kubernetes 비밀로 저장하려면 templates 폴더 아래에 secrets.yaml 파일을 추가합니다.

Kubernetes 비밀을 사용하는 방법에 대해 자세히 알아봅니다.

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: {{ .Values.secrets.password | b64enc }}

마지막으로, 다음 콘텐츠로 values.yaml 파일을 업데이트하여 선택적으로 deployment.yaml 및 secrets.yaml 파일에서 참조한 구성 설정 및 비밀의 기본값을 제공합니다. 실제 값은 App Configuration에서 가져온 구성으로 덮어씁니다.

# settings will be overwritten by App Configuration
settings:
  color: red
  message: myMessage

Helm 설치의 App Configuration에서 구성 전달

먼저 App Configuration에서 myConfig.yaml 파일로 구성을 다운로드합니다. 키 필터를 사용하여 settings.로 시작하는 키만 다운로드합니다. 키 필터가 키 자격 증명 모음 참조의 키를 제외하는 데 충분하지 않은 경우 --skip-keyvault 인수를 사용하여 제외할 수 있습니다.

내보내기 명령에 대해 자세히 알아봅니다.

az appconfig kv export -n myAppConfiguration -d file --path myConfig.yaml --key "settings.*"  --separator "." --format yaml

다음으로, 비밀을 mySecrets.yaml이라는 파일로 다운로드합니다. 명령줄 인수 --resolve-keyvault 는 Key Vault에서 실제 값을 검색하여 Key Vault 참조를 확인합니다. 해당 Key Vault에 대한 액세스 권한이 있는 자격 증명을 사용하여 이 명령을 실행해야 합니다.

Warning

이 파일에 중요한 정보가 포함되어 있으므로 파일을 주의 하여 유지하고 더 이상 필요하지 않은 경우 클린.

az appconfig kv export -n myAppConfiguration -d file --path mySecrets.yaml --key "secrets.*" --separator "." --resolve-keyvault --format yaml

helm 업그레이드의 -f 인수를 사용하여 만든 두 구성 파일을 전달합니다. app Configuration에서 내보낸 값으로 values.yaml정의된 구성 값을 재정의합니다.

helm upgrade --install -f myConfig.yaml -f mySecrets.yaml "example" ./mychart

helm 업그레이드에 --set 인수를 사용하여 리터럴 키-값을 전달할 수도 있습니다. --set 인수를 사용하면 중요한 데이터를 디스크에 유지하지 않는 것이 좋습니다.

$secrets = az appconfig kv list -n myAppConfiguration --key "secrets.*" --resolve-keyvault --query "[*].{name:key, value:value}" | ConvertFrom-Json

foreach ($secret in $secrets) {
  $keyvalues += $secret.name + "=" + $secret.value + ","
}

if ($keyvalues){
  $keyvalues = $keyvalues.TrimEnd(',')
  helm upgrade --install --set $keyvalues "example" ./mychart
}
else{
  helm upgrade --install "example" ./mychart
}

Kubernetes 대시보드에 액세스하여 구성 및 비밀이 성공적으로 설정되었는지 확인합니다. App Configuration의 메시지 값이 컨테이너의 환경 변수에 채워진 것을 볼 수 있습니다.

Quickstart app launch local

App Configuration에서 Key Vault 참조로 저장되는 하나의 비밀인 password도 Kubernetes 비밀에 추가되었습니다.

Screenshot that highlights the password in the Data section.

리소스 정리

이 문서에서 만든 리소스를 계속 사용하지 않으려면 여기서 만든 리소스 그룹을 삭제하여 요금이 부과되지 않도록 합니다.

Important

리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹 및 포함된 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 합니다. 유지하려는 다른 리소스가 포함된 리소스 그룹 내에서 이 문서에 대한 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 해당 창에서 각 리소스를 개별적으로 삭제합니다.

  1. Azure Portal에 로그인하고 리소스 그룹을 선택합니다.
  2. 이름으로 필터링 상자에서 리소스 그룹의 이름을 입력합니다.
  3. 결과 목록에서 리소스 그룹 이름을 선택하여 개요를 확인합니다.
  4. 리소스 그룹 삭제를 선택합니다.
  5. 리소스 그룹 삭제를 확인하는 메시지가 표시됩니다. 리소스 그룹의 이름을 입력하여 확인하고 삭제를 선택합니다.

잠시 후, 리소스 그룹 및 모든 해당 리소스가 삭제됩니다.

다음 단계

이 자습서에서는 Helm을 사용하여 Kubernetes 배포에 사용할 Azure 앱 구성 데이터를 내보냈습니다. App Configuration을 사용하는 방법에 대해 자세히 알아보려면 Azure CLI 샘플로 계속 진행하세요.