2

우리 회사는 마이크로/서비스 기반 아키텍처로 전환하기로 결정했습니다.Kubernetes CI/CD 파이프 라인

우리는 지난 몇 달 동안 정확히이 아키텍처의 모습을 연구했습니다. 지금까지

, 우리는에 정착했습니다

  • DOTNET 서비스 개발을위한 핵심 (언어 무신론자 인 것은 다소 최종 목표이지만) 메시지

  • 카프카가

  • 중개

    도커

  • Kubernetes

  • Ansible

우리는 관리 팀 모든 권리 상자를 쳤다 것 같습니다과 함께 일할 수있는 절대적인 기쁨 개념 작업의 아주 기본적인 증거가있다.

다음 과제는 개발 워크 플로우가 실제로 어떻게 작동 할 것인지에 대한 옵션을 조사하는 것입니다. Jenkins/Octopus Deploy를 사용하는 최신 제품 중 일부는 이미 CI/CD 방식으로 작업하는 데 익숙합니다.

내 질문은 : Kubernetes 클러스터에 배포 할 때 CI/CD 파이프 라인 설정에 대한 확고한 권장 사항이 있습니까?

필수의 아이템의 목록은 다음과 같습니다

  • 여러 환경 즉, 통합, 테스트, UAT, 준비, 생산.

  • 다른 비즈니스 단위가 다른 환경에 대한 배포를 고유하게 처리 할 수있는 방법입니다 (개발은 통합, 테스트에 대한 테스트 만 가능). 이것은 아마도 가장 큰 질문 일 것입니다. 그들은 Octopus와 작업하는 데 익숙하며,이 기술을 처리하는 방식을 좋아합니다.

  • 버튼을 클릭하거나 (가능한 한 적은 단계로) 롤백/배포 할 수있는 기능.

처음에는 우리 자신의 서버에 배포 할 것입니다.

저는 지난 몇 일 동안 많은 옵션을 살펴 보았습니다.

지금까지 젠킨스 파이프 라인 (Jenkins Pipeline)은 훌륭한 출발점이 될 것으로 보인다. Spinnakar는 또한 견고한 선택처럼 보입니다. 필자는 Fabric8을 조금 읽었고, 내가 묻는 것을 많이 제공하지만 과장된 것 같습니다.

+1

[helm] (https://helm.sh/)을보십시오. k8 패키지 관리자입니다. Jenkins 배포 파이프 라인은 모든 서비스/배포/statefulset 등 리소스가 포함 된 서비스 패키지를 k8 클러스터에 배포합니다. 헬름은 또한 롤백을 지원합니다. – fishi

+0

나는 그것을 밖으로 검사 할 것이다 - 감사합니다. –

+0

[비슷한 질문] (https://stackoverflow.com/questions/36408339/best-cd-strategy-for-kubernetes-deployments/48268573#48268573)에 대한 내 답변을보고 싶습니다. 생각한다! – errordeveloper

답변

2

젠킨스를 사용하려면 실제로 파이프 라인을 사용해야합니다. 우리의 설정은 당신이 원하는 것을 거의 수행합니다. 그래서 우리가 어떻게 설정하는지 설명하겠습니다.

dockerkubectl이 설치된 Jenkins 에이전트를 사용합니다. 이 에이전트는 먼저 도커 컨테이너를 만들고이를 도커 레지스트리에 푸시합니다.그런 다음 다양한 단계에서 kubectl을 호출하여 테스트, 수용 및 프로덕션 클러스터에 배포합니다.

파이프 라인에 다른 비즈니스 단위 :을 사용하면 an input step을 사용하여 파이프 라인의 진행 여부를 물을 수 있습니다. 버튼을 누를 사람을 지정할 수 있으므로 다른 클러스터로 배포를 해결할 수 있습니다. (당신이 CD에 도착하면 이상적으로는, 사람들이 하루에 버튼을 여러 번 누르면 바보이며, 그들은 단지 전체 배포를 자동화 할 수 있습니다 것을 깨닫게됩니다.)

롤백 : 우리는에는 Kubernetes의 롤백 시스템에 의존 이.

자격증 명 : 우리는이 Jenkins 대리인에게 직접 Anabilities를 사용하여 다른 Kubernetes 자격 증명을 제공합니다.

코드 중복을 줄이기 위해 Jenkins Pipeline library 공유를 도입하여 각 (마이크로) 서비스가 모든 Kubernetes 클러스터와 표준화 된 방식으로 대화합니다.

우리는 일반 Jenkins, Docker 및 Kubernetes를 사용합니다. 이 과정을 더 쉽게 할 수있는 소프트웨어가 많으므로 다른 대답을 위해 열어 두십시오.

+0

조언 해 주셔서 감사합니다. 이것은 제가 읽고 봤던 다른 자료를 기반으로이 문제를 해결하는 매우 일반적인 방법 인 것으로 보이므로이 경로를 먼저 시험해 보겠습니다. 젠킨스가 kubectl 적용/설정 이미지를 많이 사용하게되면 조타 장치가 해결할 수있는 것으로 보이고 Jenkins Pipeline은 사용자가 조타 장치를 호출 할 수 있도록 플러그인을 제공합니다. –

+0

배치 될 대상과 실제로 배치되는 대상을 어떻게 구분할 수 있습니까? CI가 구성을 클러스터에 직접 푸시하는 접근법은 매우 취약 할 수 있으며 새로운 환경에서 모든 배포를 다시 만드는 것을 어렵게 만듭니다. 우리 블로그 인 [The GitOps Pipeline] (https://www.weave.works/blog/the-gitops-pipeline)을 보시고 의견을 보내 주시면 의견을 듣고 싶습니다. – errordeveloper