Cloud Native Days Korea 2019 - kakao's k8s_as_a_service
1. 2019년 07월
홍석용 (Dennis Hong) / 박광열 (Theodore Park)
dennis.hong@kakaocorp.com / theodore.park@kakaomobility.com
카카오 T 택시 사례를 통해 살펴보는
카카오 클라우드의 Kubernetes as a Service
Open Infrastructure & Cloud Native Days Korea 2019
2. 발표자 소개
Works
- OpenStack 기반 LG 그룹사 Public, Private Cloud 개발/운영
- OpenStack Ironic(Bare Metal) Inhouse Driver 개발
- Mesos as a Service, DKOSv2 운영
- Kubernetes as a Service, DKOSv3 개발/운영
Community Activity
- 2017 OpenStack Day: 하이브리드 클라우드를 위한 OpenStack AWS Plugin (VM Migration)
- 2018 OpenInfra Day: Mesos to Kubernetes, Cloud Native 서비스를 위한 여정
- Kubernetes Comics 한글화: https://goo.gl/5mTvtm
홍석용 (Dennis Hong)
3. 오늘 공유할 내용은..
1. 카카오는 Kubernetes를 어떻게 쓰고 있나요?
2. Kubernetes 를 도입하면 뭐가 좋아지나요?
3. Private Cloud 에서의 Kubernetes as a Service 운영
§ 멀티 클러스터 인증 통합, 사용자 ACL : kubectl Plugin
§ 자동화된 클러스터 라이프사이클 : Immutable Server Pattern
§ 물리 인프라 자원 통합 : Custom Controller, Custom Resource Definition
4. 카카오 T 택시 Kubernetes 적용 사례 소개 (자료 별첨)
14. 멀티 클러스터 인증 통합, 사용자 ACL
로그인만하면권한이있는멀티클러스터에편리하게접근할수있습니다.
처음에는 Web UI 만 제공하면 될 줄 알았습니다..
15. 멀티 클러스터 인증 통합, 사용자 ACL
$ kubectl login
LDAP ID : dennis.hong
LDAP PW :
Login success. hi! dennis.hong
$ kubectl cluster
접근 가능한 클러스터를 검색/선택 합니다.
그래서 준비 했습니다. kubectl login !
로그인만하면권한이있는멀티클러스터에편리하게접근할수있습니다.
그러나… kube-dashboard에서 봐도 yaml yaml..
“yaml 파일 텍스트 편집 작업과 스크립팅(자동화)는 터미널이 더 편해요”
많은 DevOps 분들이 터미널에서 kubectl 사용을 선호!
16. 멀티 클러스터 인증 통합, 사용자 ACL
$ kubectl cluster chart-repo
User "dennis.hong" set.
Cluster "chart-repo-cluster" set.
Context "chart-repo-context" modified.
Switched to context "dns-dev-context
클러스터 이름을 직접 입력해도 됩니다. (scripting 용)
로그인만하면권한이있는멀티클러스터에편리하게접근할수있습니다.
#!/usr/bin/env bash
set -e
while read -r line
do
kubectl cluster "$line" > /dev/null 2>&1 # 클러스터 스위칭
kubectl set image daemonset/fluentd fluentd:v2.0.0 # 리소스 조회, 이미지 교체 등 kubectl 명령어
done < clusterlist
모든 클러스터에 현황을 파악한다거나 App을 일괄 업데이트하는 스크립트를 간단하게 짤 수 있습니다.
17. 멀티 클러스터 인증 통합, 사용자 ACL
§ 처음에는 OpenStack Keystone 과 kubernetes 인증을 직접 통합을 했으나..
§ K8s keystone-auth 자체가 Deprecated 됨 -> Webhook Mode 인증 사용을 권장
§ OpenStack Keystone 계정 = 사내 LDAP 계정인데.. 아이디/패스워드를 .kube/config 에 평문으로 저장해야함
§ 많은 수의 API 를 처리하기에는 속도가 느림
구현은?Keystone인증을backend로하는멀티클러스터인증개발
kubectl get pod
Keystone
(LDAP 연동)
4) Keystone token,
K8s 사용자 토큰 전달 DKOSv3 (KaaS)
2) 사내 계정 확인,
토큰 발급
1) 로그인, 클러스터 접근
권한 확인
3) 클러스터별
사용자 토큰 조회
5) kubernetes API 사용
kubectl login
18. 멀티 클러스터 인증 통합, 사용자 ACL
구현은?kubectlplugin을통한기능추가,인증서버별도개발
kubectl 이 설치된 동일 path 에 kubectl-<내명령어> 파일명을 가진 실행가능한 파일을 넣어두기만 하면 끝
*상세 설명 블로그 : https://dennis.k8s.kr/1
*공식 문서 : https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/
kubectl plugin 등록 확인
플러그인 사용자 설치는 어떻게? Private tap repo 추가하고 brew install 로 설치 할 수 있게 배포!
$ brew tap dkos/dkosctl https://${private_git_repo}/DKOS/homebrew-dkosctl
$ brew install dkos/dkosctl
20. 1) Master / Worker Node 서버 OS Image 를 매주 build/upload하는 pipeline 자동화 : packer, Jenkins, ansible 활용
2) OS golden Image 에 Master/ worker Kubernetes 설치에 필요한 이미지와 바이너리를 미리 설치, 매주 Build (최신 OS 세팅과 보안 패치 반영)
3) 보안 패치/커널 업그레이드 등은 running 중인 서버를 직접 수정하지 않고 , OS Image 를 빌드하는 pipeline 에 패치 내용을 적용한 뒤 신규 OS image
를 빌드하고 해당 Node 를 1 대 씩 drain & rebuild 해서 node rolling update.
자동화된 클러스터 라이프사이클
ImmutableServerPattern을활용한serverupdate/securitypatch
21. 물리 인프라 자원 통합
CustomController,CustomResource를이용해서물리인프라자원을k8s로통합
Kube-dns 를 사용하지 않고 자체 개발한 inhouse-dns-controller 를 통해 사내 물리 DNS 와 연동하여 성능과 가용성 확보
Before After
22. 물리 인프라 자원 통합
CustomController,CustomResource를이용해서물리인프라자원을k8s로통합
K8s에서 Service 나 Ingress 를 만들면,
Inhouse DNS 에 도메인 자동 등록,
InhouseDomain 라는 Custom
Resource 생성되어 관리
23. 물리 인프라 자원 통합
CustomController,CustomResource를이용해서물리인프라자원을k8s로통합
1) On-premise 환경에서 쿠버네티스 자체 만으로는
대규모 실 서비스를 하기에는 부족한 부분들이 있음
(Storage, LoadBalancer, DNS 등)
2) 안정성 및 성능이 검증된 데이터센터의 기존 물리
인프라 자원을 Kubernetes 와 연동하기 위해
CustomController를개발해서Custom Resource
로 관리.
3) Operator-SDK 를 사용하면 CustomController를
비교적쉽게개발할수있음.
*Operator-SDK : https://github.com/operator-framework/operator-sdk/