Upload
others
View
1
Download
0
Embed Size (px)
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
실제�파이프라인�코드
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