2017-11-07 2 views
1

Kubernetes 설명서 사이트의 여러 곳에서 구성 YAML 파일을 소스 제어 내에 저장하여 쉽게 버전 추적, 롤백 및 배포 할 것을 권장합니다.소스 제어에 kubernetes 구성을 저장하는 모범 사례

제 동료와 저는 현재 우리 자식 저장소의 구조를 결정하려고합니다.

  • 구성이 앱 코드를 변경하지 않고 변경 될 수 있으므로 구성을 별도의 공유 저장소에 저장하고 싶다고 결정했습니다.
  • 주어진 환경 (클러스터) 내에서 여러 버전의 일부 구성 요소가 나란히 실행되어야 할 수도 있습니다. 이러한 버전은 서로 다른 구성을 가질 수 있습니다.

잠재적 인 변형이 많은 것처럼 보이며, 모두 단점이 있습니다. 그러한 저장소를 구조화하는 데있어 받아 들여지는 방법은 무엇입니까?

+0

우리는 개발자가 구성 변경을 푸는 것을 잊어 버렸기 때문에 기본적으로'git pull && kubectl apply'를 루프에서 실행하는 [autoapply] (https://github.com/pascalgn/autoapply)를 만들었습니다. 매우 세련된 것은 아니지만 기본 아이디어에 관심이있을 수 있습니다. – user3151902

답변

0

나는 helm이 kubernetes 클러스터 용 응용 프로그램 설치 프로그램을 만드는 표준화 된 방법이 될 것이라고 생각합니다. 내 앱 배포를 매개 변수화하기 위해 내 자신의 chart을 만들려고 노력할 것입니다.

2

아직 확립 된 표준이 없다고 생각합니다. 조종사의 차트가 너무 복잡해서 특히 관리되지 않는 다른 구성 요소가 k8 클러스터에서 실행되는 경우가 있습니다. 이것은 우리가 따르는 작업 흐름으로, 15 마이크로 마이크로 서비스와 5 개의 다른 환경 (devx2, staging, qa, prod)의 설정에 아주 잘 작동합니다.

2 개 개의 주요 아이디어 :

  1. 스토어가 다른 빌드 도구를 가지고 같은 소스의 repo에서 구성는 Kubernetes. 예 : 특정 마이크로 서비스를 작성/릴리스하기위한 도구가있는 마이크로 서비스 소스 코드와 함께.
  2. juja와 같은 kubernetes 구성을 템플릿으로 지정하고 타겟팅하는 환경에 따라 템플릿을 렌더링합니다. 주석

    응용 프로그램 소스에 몇 가지 질문에 대답 :

툴링 함께 몇 bash는 스크립트를 넣어 또는 메이크 등

EDIT로 통합하여 파악하는 합리적으로 간단합니다 코드 저장소는 진실의 단일 소스로 사용됩니다. 따라서 모든 것이 제대로 작동하면 변경 사항을 kubernetes 클러스터에서 저장소로 이동해서는 안됩니다.

워크 플로우에서는 서버에서 직접 변경이 금지됩니다. 이런 일이 발생하면 수동으로 응용 프로그램 저장소에 다시 들어가야합니다.

다시 말해서 소스 코드에 저장된 구성은 실제로 템플릿이며 secretKeyRef을 사용하는 것이 좋습니다. 즉, 일부 구성은 CI 툴링에서 렌더링되고 클러스터에서 살고있는 비밀 정보 (예 : 데이터베이스 비밀번호, API 토큰 등)에서 들어오는 일부 구성 요소가 있음을 의미합니다.

+0

그래서 응용 프로그램과 동일한 소스에 템플릿 (렌더링 할 코드와 함께)을 저장하고 있습니까? 골드 빌드가 생성 된 후 구성 변경이 발생해야하는 경우 효과적으로 돌아가서 코드를 수정해야합니다 (CI가있는 경우). 이 문제는 간단하지 않습니까? 아니면이 문제를 해결할 방법이 있습니까? 응용 프로그램의 구성 사본이 진리의 근원지로 간주됩니까? 아니면 실제 변경 사항 (응용 프로그램 소스 편집/적용 작업)을 응용 프로그램 원본으로 다시 전파합니까? – Kir

관련 문제