컨테이너CI/CD를하나의 JENKINSPIPELINE으로관리하기°œ표자료...Declarative...

Preview:

Citation preview

컨테이너�CI/CD를�하나의

서강혁�pilsner.suh�카카오페이

JENKINS�PIPELINE�으로�관리하기

이번�발표에는�여러�툴이�등장합니다.�하지만�툴에�대한�자세한�설명은�생략되어�있습니다.

-�Jenkins�pipeline�example�template�-�Helm�chart�example�template�

�Pipeline�개발하면서�했던�삽질�경험들�

-�Jenkins�pipeline�example�template�-�Helm�chart�example�template�

ㅠㅠ�이런건�없어요

01.�Jenkins�pipeline�도입기�1.1�Devops에서�일하는�법�1.2�Bye�GoCD�1.3�Hi�Jenkins�pipeline

02.�Jenkins�pipeline�개선기�2.1�Spinnaker�2.2�istio�2.3�Sail�2.4�Letmeknow

01.�Jenkins�pipeline�도입기�1.1�Devops에서�일하는�법�1.2�Bye�GoCD�1.3�Hi�Jenkins�pipeline

02.�Jenkins�pipeline�개선기�2.1�Spinnaker�2.2�istio�2.3�Sail�2.4�Letmeknow

Devops에서�일하는�법

DEVOPS 생성 배포

사용

유지보수 ???구성요청Build?�Test?�dns?�

특이사항?

Devops에서�일하는�법

K8S

DEVOPS 생성 배포

사용

유지보수 ???구성요청Build?�Test?�dns?�

특이사항?

DEVOPS 생성 배포

사용

유지보수 ???

Devops에서�일하는�법

구성요청Build?�Test?�dns?�

특이사항?K8S

배포에�관련된�로직이�모두�블랙박스�약간의�수정도�Devops�팀을�거쳐�수행�개발자와�소모적인�커뮤니케이션�핑퐁�

거의�모든�작업이�수동작업

1.�Jenkins�pipeline�도입기�1.1�Devops에서�일하는�법�1.2�Bye�GoCD�1.3�Hi�Jenkins�pipeline

2.�Jenkins�pipeline�개선기�2.1�Spinnaker�2.2�istio�2.3�Sail�2.4�Letmeknow

Bye�GoCD

- Jenkins보다는�잘생김�- 여러�CD관련�기능

PROS

겨우�23개�프로젝트에�대해�생성된�PIPELINE들…�스크롤하면�더�많다�

- 하나의�stage가�하나의�job으로�구성�- 너무�많아지고,�느려짐�- 각자�구성된�파이프라인

CONS

Job

Job

Bye�GoCD

Hi�Jenkins Pipeline

구성요청

세부사항�확인 UI�생성 K8S�YML�생성

cp�already-exist-project/deploy.yml�new-project/deploy.yml�vim�deploy.yml

개발자

DEVOPS

Test는�존재하나?�Dockerfile�위치는?�

log�위치는?�

Bye�GoCD구성요청

Bye�GoCD불필요한�핑퐁

Log 위치가 어디로 떨어지나요?

런타임에 에러나는데 더 추가해야할 환경 변수가 있나요?

dev phase 추가해주세요

구성요청

잘되어�있는�프로젝트를�일단�COPY

세부�내용�변경

UI

Bye�GoCD

잘되어�있는�프로젝트를�일단�COPY

세부�내용�변경

UI

Bye�GoCD

불필요한�핑퐁

Log 위치가 어디로 떨어지나요?

런타임에 에러나는데 더 추가해야할 환경 변수가 있나요?

dev phase 추가해주세요

반영

잘되어�있는�프로젝트를�일단�COPY

세부�내용�변경

UI

Bye�GoCD

불필요한�핑퐁

X�N

Log 위치가 어디로 떨어지나요?

런타임에 에러나는데 더 추가해야할 환경 변수가 있나요?

dev phase 추가해주세요

잘되어�있는�프로젝트를�일단�COPY

세부�내용�변경

UI

Bye�GoCD

불필요한�핑퐁

X�N반영

Log 위치가 어디로 떨어지나요?

런타임에 에러나는데 더 추가해야할 환경 변수가 있나요?

dev phase 추가해주세요

잘되어�있는�프로젝트를�일단�COPY

세부�내용�변경

UI K8S

Bye�GoCD

cp�already-exist-project/deploy.yml�new-project/deploy.yml�vim�deploy.yml

잘되어�있는�프로젝트를�일단�COPY

세부�내용�변경

UI

Bye�GoCD

참조

cp�already-exist-project/deploy.yml�new-project/deploy.yml�vim�deploy.yml

K8S

잘되어�있는�프로젝트를�일단�COPY

세부�내용�변경

UI

Bye�GoCD

cp�already-exist-project/deploy.yml�new-project/deploy.yml�vim�deploy.yml

오타�발생

새로 추가된 서비스가 엉뚱한 곳으로 연결돼요.

K8S

UI의�제공�프로젝트�특정에�맞는�배포�배포를�위한�K8S�yaml�관리

UI의�제공�-�수작업�프로젝트�특정에�맞는�배포�-�수작업�배포를�위한�K8S�yaml�관리�-�수작업

01.�Jenkins�pipeline�도입기�1.1�Devops에서�일하는�법�1.2�Bye�GoCD�1.3�Hi�Jenkins�pipeline

02.�Jenkins�pipeline�개선기�2.1�Spinnaker�2.2�istio�2.3�Sail�2.4�Letmeknow

Hi�Jenkins

Hi�Jenkins

Hi

Pipeline

Hi�Jenkins Pipeline

- PIPELINE�AS�CODE�- NOT�XML,�JSON,�YAML

Scripted Declarative

Hi�Jenkins Pipeline

Jenkinsfile 실행 1

Hi�Jenkins Pipeline

- 일단�익숙해지면�뭐든�할�수�있다.�- UI없이�대부분의�기능이�구현된다.�- 이력�관리가�쉽게�된다.

- Jenkins다.�- Jenkins다.�- Jenkins에�종속적인�코드다.��- 익숙해지기�어렵다.�- 배포�하자고�새로운�문법을�공부해야�하나?

PROS CONS

Hi�Jenkins Pipeline

PROS CONS

근데�왜?

- 일단�익숙해지면�뭐든�할�수�있다.�- UI없이�대부분의�기능이�구현된다.�- 이력�관리가�쉽게�된다.

- Jenkins다.�- Jenkins다.�- Jenkins에�종속적인�코드다.��- 익숙해지기�어렵다.�- 배포�하자고�새로운�문법을�공부해야�하나?

PROS CONS

Hi�Jenkins Pipeline

- 일단�익숙해지면�뭐든�할�수�있다.�- UI없이�대부분의�기능이�구현된다.�- 이력�관리가�쉽게�된다.

- Jenkins다.�- Jenkins다.�- Jenkins에�종속적인�코드다.��- 익숙해지기�어렵다.�- 배포�하자고�새로운�문법을�공부해야�하나?

PROS CONS

결국 개발팀에서 Jenkinsfile를 만드는 것에 대한 부담감

Hi�Jenkins Pipeline

개발자가�직접�수정하지�않도록�실제�로직은�블랙박스�

프로젝트간�커스터마이징은�yml로

Hi�Jenkins Pipeline

- 중앙관리�pipeline을�구축�가능�- 소스는�github에�존재

Global�Library

그럼�각�프로젝트별�특성은?

실제 파이프라인 코드

Read

>�jenkins.yml�에�존재

Hi�Jenkins Pipeline

Jenkinsfile jenkins.yml

@Library(‘pipeline@v2.2’)�_�deploy()

Hi�Jenkins Pipeline

Jenkinsfile

jenkins.yml

실제�파이프라인�코드

Pipeline�실행

Read

Hi�Jenkins Pipeline

DEVOPS구성요청

Build?�Test?�dns?�

특이사항?

생성

사용

유지보수

Hi�Jenkins Pipeline

DEVOPS구성요청

Build?�Test?�dns?�

특이사항?

생성

사용

유지보수

오타�발생불필요한�핑퐁

Bye�GoCD

Log 위치가 어디로 떨어지나요?

런타임에 에러나는데 더 추가해야할 환경 변수가 있나요?

dev phase 추가해주세요

새로 추가된 서비스가 엉뚱한 곳으로 연결되요

Hi�Jenkins Pipeline

Log 위치가 어디로 떨어지나요?

런타임에 에러나는데더 추가해야할 환경 변수가 있나요?

dev phase 추가해주세요

Hi�Jenkins Pipeline

Log 위치가 어디로 떨어지나요?

런타임에 에러나는데더 추가해야할 환경 변수가 있나요?

dev phase 추가해주세요

Hi�Jenkins Pipeline

Log 위치가 어디로 떨어지나요?

런타임에 에러나는데더 추가해야할 환경 변수가 있나요?

dev phase 추가해주세요

Hi�Jenkins Pipeline

Log 위치가 어디로 떨어지나요?

런타임에 에러나는데더 추가해야할 환경 변수가 있나요?

dev phase 추가해주세요

Hi�Jenkins Pipeline

오타�발생

새로 추가된 서비스가 엉뚱한 곳으로 연결되요

잘되어�있는�프로젝트를�일단�COPY

세부�내용�변경

X�N

Hi�Jenkins Pipeline

Organization

동기화

- 스케쥴러에�따라�자동�동기화�- Or�scan

Hi�Jenkins Pipeline

Hi�Jenkins Pipeline

Branch별�빌드/배포

UI의�제공�-�자동화�프로젝트�특정에�맞는�배포�-�자동화�배포를�위한�K8S�yaml�관리�-�?

Helm

K8S�package�manager�여러가지�Project�template을�관리할�때�yaml,�json�template로도�유용�더�구조적이고�명확하게�관리가�가능했지만�여전히�수작업

Tiller

Helm

JAVA

SCALA

ETC

Sample-Projectcp�-r�preset-java�sample-project 변경

ProjectProjectProject

Hi�Jenkins Pipeline

Push hookGet�pipeline

Fetch�chart

Deploy

User�input

Busan�HangCreate�chart

Hi�Jenkins Pipeline

Hi�Jenkins Pipeline

구성요청

세부사항�확인 UI�생성 K8S�YML�생성

개발자

DEVOPScp�already-exist-project/deploy.yml�new-project/deploy.yml�

vim�deploy.yml

Hi�Jenkins Pipeline

구성요청

세부사항�확인 UI�생성 K8S�YML�생성

개발자

DEVOPScp�already-exist-project/deploy.yml�new-project/deploy.yml�

vim�deploy.yml

helm으로�관리�BUT�아직�수작업

jenkins.yml�생성

cp�-r�preset-java�sample-project

자동화

UI의�제공�-�자동화�프로젝트�특정에�맞는�배포�-�자동화�

배포를�위한�K8S�yaml�관리�-�(여전히)�수작업

- 관리포인트의�단일화�- 소모적인�핑퐁�커뮤니케이션�- 배포�정보의�화이트박스화�- 휴먼�에러�

- CD까지�규격화된�데이터로�처리하는�문제�- (개발자�입장에서)�너무�없는�UI�- 계속�복잡해지는�소스와�너무�큰�변경�Risk�- 아직�남은�수동�작업들

PROS CONS

Hi�Jenkins Pipeline

1.�Jenkins�pipeline�도입기�1.1�Devops에서�일하는�법�1.2�Bye�GoCD�1.3�Hi�Jenkins�pipeline

2.�Jenkins�pipeline�개선기�2.1�Spinnaker�2.2�istio�2.3�Sail�2.4�Letmeknow

Canary�배포를�하고�싶어요�리소스�조절은�어떻게�하나요?�Deploy만�돌릴�순�없나요?�롤백�시간이�오래�걸려요�

기능�추가�&�배포�개선

오픈�소스를�조금�더�도입하기로�결정

CDCI

Fetch� Fetch�

Create/update�pipeline��

Manage�charts�

Sail

Deploy�

Letmeknow�

Get�Event�

Push hook

Get�pipeline

Send�Notify�

+

Plumber

더�많은�기능을�상대적으로�적은�Risk로�구현

자동화를�통한�일의�능률�향상Sail�

1.�Jenkins�pipeline�도입기�1.1�Devops에서�일하는�법�1.2�Bye�GoCD�1.3�Hi�Jenkins�pipeline

2.�Jenkins�pipeline�개선기�2.1�Spinnaker�2.2�istio�2.3�Sail�2.4�Letmeknow

- UI가�없어도�너무�없다.�- 다양한�배포�기능�실행은�어떻게�하나�- UI을�만드는�것조차�CODE

Jenkins�pipeline의�UI

Spinnaker

Spinnaker

하지만�DEVOPS�개발자�입장에서�UI�친화적�서비스는�사치다.

이걸�다시??

잘되어�있는�프로젝트를�일단�COPY

세부�내용�변경

X�N

Spinnaker

Spinnaker

Spinnaker는�JSON으로�파이프라인을�정의�가능

Jenkinsfile

jenkins.ymlPipeline�create/update

Read

CI 파이프라인 코드

Fetch�pipeline��library

Spinnaker

Pipeline�create/update

Spinnaker

Spinnaker

1.�Jenkins�pipeline�도입기�1.1�Devops에서�일하는�법�1.2�Bye�GoCD�1.3�Hi�Jenkins�pipeline

2.�Jenkins�pipeline�개선기�2.1�Spinnaker�2.2�istio�2.3�Sail�2.4�Letmeknow

- 소스로�이루어진�pipeline에서�다양한�기능을�분배�- 새로운�기능을�제공하고자�할때�coding�보단�templating으로�대체�- helm를�통해�관리

ContainerSidecar�envoy�proxy

Pod

Traffic

Another�Pod

Traffic�shifting,�fault�injection,�mirroring,�etc

Istio

Istio

CRD로�이루어져�있어�Desired�State�정의�가능�Helm�chart에�함께�정의

PROJECT�CHART

Baseline�Chart Canary�Chart Traffic�Shift�Chart

Istio

- 운영까지�쓰고�있는�예시가�적다.�- 아직까지�버그가�많고�생각보다�해결하는�게�어려움�- 사이드카�패턴..�성능이�그만큼�나올까?�- nginx�ingress�controller를�완전히�대체�가능할까?

- nGrinder,�wrk,�fortio를�활용�- nginx,�envoy,�nginx�+�envoy

Istio�성능�테스트

Request�처리�속도

CPU�사용량

일반적인�상황

과부하�상황

WIN!

WIN!

WIN!

WIN!

Istio�성능�테스트

Request�처리�속도

CPU�사용량

일반적인�상황

과부하�상황

WIN!

WIN!

WIN!

WIN!

결론 =

Istio�성능�테스트

+????

Istio�성능�테스트

+일반적인 상황 =

+>>>과부하 상황

Istio�성능�테스트

- 개발장비로도�굉장히�높은�tps를�견뎌낼�수�있음�- 운영은�더�높은�장비�+�clustered�nginx�+�clustered�envoy�- 만약�nginx�+�envoy가�버틸�수�없을�정도라면..�- 그�전에�서비스�코드가�먼저�버티지�못함

�8코어�기준�cpu�40%정도�사용

Istio�성능�테스트

1.�Jenkins�pipeline�도입기�1.1�Devops에서�일하는�법�1.2�Bye�GoCD�1.3�Hi�Jenkins�pipeline

2.�Jenkins�pipeline�개선기�2.1�Spinnaker�2.2�istio�2.3�Sail�2.4�Letmeknow

점차�많은�부분에서�template을�요구�수동으로�관리하기엔�너무�큰�부담

Sail�

Create�

Read�jenkins.yml

Sail

Project

Chart

Sail

Project

Chart

Project

Chart

Project

Chart

Project와�Chart와의�1:1�매핑

Global�Parents

TemplatesCharts�(Namespace�Parents)

TemplatesProjects�Charts

Chart Chart

Sail

jenkins.yml

Language

Sail

Chart…

Global�Parents

TemplatesCharts�(Namespace�Parents)

TemplatesProjects�Charts

Chart Chart

Sail

jenkins.yml

Language

Sail

Chart…

Global�Parents

TemplatesCharts�(Namespace�Parents)

TemplatesProjects�Charts

Chart Chart

Sail

jenkins.yml

Language

Sail

Chart…

Sail

jenkins.yml

Language

Sail

CDCI

Fetch� Fetch�

Create/update�pipeline��

Manage�charts�

Sail

Deploy�

Letmeknow�

Get�Event�

Push hook

Get�pipeline

Send�Notify�

+

Plumber

Hi�Jenkins Pipeline

세부사항�확인 UI�생성 K8S�YML�생성

cp�already-exist-project/deploy.yml�new-project/deploy.yml�vim�deploy.yml

개발자

DEVOPShelm으로�관리�BUT�아직�수작업

jenkins.yml�생성

자동화

cp�-r�preset-java�sample-project

구성요청

자동화

아직�남은�숙제들

배포 대쉬보드더 쉽게 작성 가능한 jenkins.yml

Dockerfile을 생성

아직�남은�숙제들

‘구성요청’ 없는 파이프라인

Pipeline을 코드로 풀어내는 순간 test도 필요해진다.Devops 개발자에겐 Web UI는 없는게 낫다.

새로운 시스템을 오픈하는 것은 쉽지만 잘쓰게 하는건 어렵다.오픈소스를 만드는 것이 아니다.

느낀점

감사합니다.

Special THANK YOU @josh, @odin, @blaire, @shen

@@biz-platform

Q�&�A

Special THANK YOU @josh, @odin, @blair, @shen

@@biz-platform

Recommended