SlideShare a Scribd company logo
1 of 77
Download to read offline
Toward kubernetes-native
data center
데이터 센터의 모든 자원을 쿠버네티스로 관리하기 위하여
카카오엔터프라이즈
이어형
2020.10
소개
이름: 이어형 (a.k.a. 어형부형)
경력:
kakao enterprise(2019.12 ~ ): Public & Private Cloud 개발 & 운영
( kubernetes & openstack)
Line(2017.5 ~ 2019.11): Inhouse Cloud-native platform 개발 & 운영 ( kubernetes )
Kakao(2014.2 ~ 2017.4): Inhouse Private Cloud 개발 & 운영 ( openstack )
KT(2009.8 ~ 2013.12): Public Cloud Storage 개발 & 운영 ( openstack )
목차
● Kubernetes-native
● Kubernetes를 이용한 관리
● 🤖 Operator
● 어떻게 모든것을 kubernetes 화 할 수 있는가?
● 결론
Kubernetes-native
X-native?
cloud-native
kubernetes-native
...
Digital-native
Gen Z
Cloud-native
The Twelve-Factor App
https://12factor.net/
2009~
2012~
2014~
2019~
Kubernetes를 이용한 관리
Declarative application management in Kubernetes
https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/declarative-application-management.md
Kubernetes-native
쿠버네티스로 관리한다는 것은?
대부분의 kubernetes에 올라가는 application들
applications
bespoke
application
common
off-the-shelf
application
Black
Box
White
Box
Bespoke application
vs Common off-the-shelf application
● Common off-the-shelf application
기성품 어플리케이션
stateful 한 어플리케이션이 많음
infrastructure systems
(e.g. databases, key-value stores, caches,
messaging systems, …)
● Bespoke application
직접 제작한 어플리케이션
stateless 한 어플리케이션이 많음
Bespoke application
vs Common off-the-shelf application (cont.)
● Common off-the-shelf application
기성품 어플리케이션
stateful 한 어플리케이션이 많음
infrastructure systems
(e.g. databases, key-value stores, caches,
messaging systems, …)
이미 존재하고 있는 무언가의 방법들을
kubernetes에 올리는 것이라 kubernetes-
native 화 하기 어려움
● Bespoke application
직접 제작한 어플리케이션
stateless 한 어플리케이션이 많음
직접 개발 하는 코드이기 때문에
kubernetes-native 화 하기 쉬움
Bespoke application
vs Common off-the-shelf application (cont.)
● Common off-the-shelf application
기성품 어플리케이션
stateful 한 어플리케이션이 많음
infrastructure systems
(e.g. databases, key-value stores, caches,
messaging systems, …)
이미 존재하고 있는 무언가의 방법들을
kubernetes에 올리는 것이라 kubernetes-
native 화 하기 어려움
● Bespoke application
직접 제작한 어플리케이션
stateless 한 어플리케이션이 많음
직접 개발 하는 코드이기 때문에
kubernetes-native 화 하기 쉬움
그래서 이를 위한
🤖 operator 가 필요
대부분의
이미 존재하는 자원
들
Operator🤖
Operator pattern
오퍼레이터(Operator)는 사용자 정의 리소스를 사용하여 애플리케이션 및 해당 컴
포넌트를 관리하는 쿠버네티스의 소프트웨어 익스텐션이다. 오퍼레이터는 쿠버네
티스 원칙, 특히 컨트롤 루프를 따른다.
https://kubernetes.io/ko/docs/concepts/extend-kubernetes/operator/
Operator pattern (cont.)
오퍼레이터 패턴은 서비스 또는 서비스 셋을 관리하는 운영자의 주요 목표를 포착
하는 것을 목표로 한다. 특정 애플리케이션 및 서비스를 돌보는 운영자는 시스템의
작동 방식, 배포 방법 및 문제가 있는 경우 대처 방법에 대해 깊이 알고 있다.
쿠버네티스에서 워크로드를 실행하는 사람들은 종종 반복 가능한 작업을 처리하기
위해 자동화를 사용하는 것을 좋아한다. 오퍼레이터 패턴은 쿠버네티스 자체가 제
공하는 것 이상의 작업을 자동화하기 위해 코드를 작성하는 방법을 포착한다.
https://kubernetes.io/docs/concepts/extend-kubernetes/operator/#motivation
Control loops
observe
diff
act
Current
State
Desire
State
Modified from https://docs.google.com/presentation/d/1oPZ4rznkBe86O4rPwD2CWgqgMuaSXguIBHIE7Y0TKVc
Control loops (cont.)
observe
diff
act
Current state를 정확하게 파악
Current state와 Desire state의
차이를 비교
Current state와 Desire state로
변화시키기 위한 행동
Modified from https://docs.google.com/presentation/d/1oPZ4rznkBe86O4rPwD2CWgqgMuaSXguIBHIE7Y0TKVc
Level trigger vs edge trigger
0
1
0
1
Level trigger
Edge trigger
상태를 주기적으로 측정해서
특정 상태일때 알림
상태가 변화할때
상태를 알림
Level trigger vs edge trigger (cont.)
0
1
0
1
Level trigger
Edge trigger
상태를 주기적으로 측정해서
특정 상태일때 알림
상태가 변화할때
상태를 알림
어떻게 모든것을 kubernetes 화 할 수 있
는가?
어떻게 모든것을 kubernetes 화 할 수 있는가?
Q1) 모든 리소스를 kubernetes로 관리한다면 그 kubernetes는 무엇으로 관리하는
가?
Q2) Cluster-api가 실행되는 management kubernetes cluster는 Cluster-api로 관리
불가능하지 않는가?
Q3) 그렇다면 어떠한 kubernetes 클러스터들로 DC의 자원들을 관리하게 되는가?
Q4) kubernetes 만으로 다양한 IT resource를 다 지원할 수 있는가?
Q5) kubernetes로 하드웨어들을 관리할 수 있는가?
Q1) 모든 리소스를 kubernetes로 관리한
다면 그 kubernetes는 무엇으로 관리하는
가?
A1)
kubernetes
정확하게는 아래의 조합으로 관리
Kubernetes Cluster-api Metal³& &
Cluster-api
https://cluster-api.sigs.k8s.io/images/management-cluster.svg
kubernetes 클러스터의 프로비저닝,업그레이드 및 운영을 단순화하기 위한 도구
Metal³
https://github.com/metal3-io/cluster-api-provider-metal3/blob/master/docs/architecture.md
베어메탈 호스트에 kubernetes를 배포하기 위한 도구
Cluster-api with metal³ by kubeadm
Actor
Deploy
Create
Management cluster (a.k.a Ring 0)
Actor
Deploy
Create
Ring 0
Ring 0 as a protection ring
https://en.wikipedia.org/wiki/Protection_ring
Ring 0 in Kakao Enterprise Data center
management
kubernetes
cluster
workload
cluster
workload
cluster
workload
cluster
workload
cluster
workload
cluster
workload
cluster
workload
cluster
workload
cluster
Cluster-api with metal³ by kubeadm
Q2) Cluster-api가 실행되는
management kubernetes cluster는
Cluster-api로 관리 불가능하지 않는가?
Who watches Watchmen?
Who watches Watchmen? (cont.)
serversmanagement
servers
for
servers
management
servers
for
management
servers
for
servers
management
servers
for
management
servers
for
management
servers
...
...
managemanagemanage
A2)
자기자신을 cluster-api로 관
리
How to build self managed cluster-api cluster (1)
How to build self managed cluster-api cluster (2)
How to build self managed cluster-api cluster (3)
How to build self managed cluster-api cluster (4)
How to build self managed cluster-api cluster (5)
How to build self managed cluster-api cluster (6)
How to build self managed cluster-api cluster (7)
How to build self managed cluster-api cluster (8)
Q3) 그렇다면 어떠한 kubernetes
클러스터들로 DC의 자원들을
관리하게 되는가?
A3)
Ring0 Shared 0 Shared 1
kubernetes cluster kubernetes cluster kubernetes cluster
openstack region 0
kubernetes cluster
openstack region 1
kubernetes cluster
CLOUD SERVICE
under
cloud
Undercloud by kubernetes clusters
CLOUD SERVICE
User Service
Platform service Software serviceInfra service
Kubernetes is the new kernel. We can refer
to it as a “cluster kernel” versus the typical
operating system kernel.
This means a lot of great things for users
trying to deploy applications.
https://blog.jessfraz.com/post/hard-multi-tenancy-in-kubernetes/
Q4) kubernetes 만으로 다양한
IT resource를 다 지원할 수 있는가?
NO
“하지만 거인의 어깨에 올라타면 됩니다."
A4)
The Most Widely Deployed Open Source Cloud
Software in the World
Kubernetes Openstack
IT 리소스를 선언적으로 관리 다양한 IT 리소스를 지원하나 관리가 까다로움
관리가 까다로운 openstack을 손쉽게
관리하여 다양한 IT 리소스를 지원
Openstack on Kubernetes by Airship
Openstack on Kubernetes by Airship ⇒ Alienship
⇒
alienship 개인 개발 환경
alienship 개인 개발 환경 - K8S 관점
간단한 테스트용 쿠버네티스 클러스터링 방법
https://gist.github.com/leoh0/80e48502caae1c463a0cc195bf191c2c
첫번째 마스터
1.
kubeadm
init
2.
(option)
Install
CNI
3.
Serving
Certification,
Token
첫번째 마스터 외의 마스터
1.
Waiting
for
First
Master
,
Download
Token
2.
Download
Certification
3.
kubeadm
join
워커
1.
Waiting
for
First
Master
,
Download
Token
2.
kubeadm
join
alienship 개인 개발 환경 - openstack 관점
alienship 개인 개발 환경 향후 모습
Kubernetes-native openstack
kubernetes native 하게 관리/이용 할
수 있는 operator들 필요
projectobserve
diff
act
observe
diff
act
Q5) kubernetes로 하드웨어들을
관리할 수 있는가?
A5) physical machine &
physical switch를 관리 함
https://drive.google.com/file/d/1mdofzqIpH7XpFYkjB0ZC7EWU_RGW6aOl/view
Metal³ also control physical machines
Network controller control physical switches
Ring0
kubernetes cluster
network
controller
pod
network
controller
pod
Spine Spine
Leaf Leaf Service Leaf
Compute
Compute
Compute
Compute
Compute
Compute
FW
LB
ETC..
Spine Spine
Leaf Leaf Service Leaf
Compute
Compute
Compute
Compute
Compute
Compute
FW
LB
ETC..
Spine Spine
Leaf Leaf Service Leaf
Compute
Compute
Compute
Compute
Compute
Compute
FW
LB
ETC..
Openstack region #1
Spine Spine
Leaf Leaf Service Leaf
Compute
Compute
Compute
Compute
Compute
Compute
FW
LB
ETC..
Openstack region #2
Openstack region #NOpenstack region #N
Openstack Controller
Clusters
kubernetes cluster
Neutron
api server
pod
Neutron
api server
pod
네트워크 컨트롤러를 컨테이너 화 하면서 생긴 문제 (1)
네트워크 컨트롤러용 컨테이너 이미지
가 존재하나 VM형태로 구현되어 있어
서 Kubernetes 화 하는 작업들이 필요
했음
결국 구동하고 나면 스위치와 동일하게
동작했기에 `running-config`를 컨피그
맵으로 부팅 하면서 넣어줘서 pod 상태
관리를 함
네트워크 컨트롤러를 컨테이너 화 하면서 생긴 문제 (2)
스위치 이미지는 VM기반으로 생성되있으며 인터페이스가 2개 이상이여야 작동함.
K8S에서는 동일한 네트워크에 인터페이스 한개를 더 추가해서 쓸 수 있도록
Multus를 사용
결론
Universe
CLOUD SERVICE
We will create Multiverse by kubernetes
CLOUD SERVICE
CLOUD SERVICE
CLOUD SERVICE
CLOUD SERVICE
CLOUD SERVICE
CLOUD SERVICE
CLOUD SERVICE
CLOUD SERVICE
CLOUD SERVICE
CLOUD SERVICE
CLOUD SERVICE
Multiverse 에 관심이 있나요?
Come aboard!
[클라우드서비스] 언더클라우드 개발자 모집
https://kakaoenterprise.recruiter.co.kr/app/jobnotice/view?systemKindCode=MRS2&jobnoticeSn=22006
[클라우드서비스] 네트워크 개발자 모집
https://kakaoenterprise.recruiter.co.kr/app/jobnotice/view?systemKindCode=MRS2&jobnoticeSn=21985
그 외 클라우드 서비스 개발
https://kakaoenterprise.recruiter.co.kr/app/jobnotice/view?systemKindCode=MRS2&jobnoticeSn=36889
감사합니다.
Q & A

More Related Content

What's hot

What's hot (20)

Devfair kubernetes 101
Devfair kubernetes 101Devfair kubernetes 101
Devfair kubernetes 101
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google Kubernetes
 
AWS + Docker in Vingle
AWS + Docker in VingleAWS + Docker in Vingle
AWS + Docker in Vingle
 
GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
 
Docker at Deview 2013
Docker at Deview 2013Docker at Deview 2013
Docker at Deview 2013
 
DevOps with Docker
DevOps with DockerDevOps with Docker
DevOps with Docker
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
[2015-05월 세미나] 파이선 초심자의 Openstack
[2015-05월 세미나] 파이선 초심자의 Openstack[2015-05월 세미나] 파이선 초심자의 Openstack
[2015-05월 세미나] 파이선 초심자의 Openstack
 
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
 
RancherOS Introduction
RancherOS IntroductionRancherOS Introduction
RancherOS Introduction
 
Enterprise Docker
Enterprise DockerEnterprise Docker
Enterprise Docker
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기
 
CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 

Similar to Toward kubernetes native data center

Similar to Toward kubernetes native data center (20)

세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdf세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdf
 
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
 
K8s beginner 2_advanced_ep02_201904221130_post
K8s beginner 2_advanced_ep02_201904221130_postK8s beginner 2_advanced_ep02_201904221130_post
K8s beginner 2_advanced_ep02_201904221130_post
 
Prometheus in openstack-helm
Prometheus in openstack-helmPrometheus in openstack-helm
Prometheus in openstack-helm
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
[slideshare]k8s.pptx
[slideshare]k8s.pptx[slideshare]k8s.pptx
[slideshare]k8s.pptx
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetes
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
 
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
 
애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축
 
락플레이스 OpenShift Q&A 토크쇼 발표자료
락플레이스 OpenShift Q&A 토크쇼 발표자료락플레이스 OpenShift Q&A 토크쇼 발표자료
락플레이스 OpenShift Q&A 토크쇼 발표자료
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
 
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf
 
Nexclipper_1905_summary_kor
Nexclipper_1905_summary_korNexclipper_1905_summary_kor
Nexclipper_1905_summary_kor
 
Cluster api - koss 2019
Cluster api - koss 2019Cluster api - koss 2019
Cluster api - koss 2019
 
Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS)
 
NetApp AI Control Plane
NetApp AI Control PlaneNetApp AI Control Plane
NetApp AI Control Plane
 
Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현
 

More from 어형 이

Openstack Swift overview
Openstack Swift overviewOpenstack Swift overview
Openstack Swift overview
어형 이
 
debugging openstack neutron /w openvswitch
debugging openstack neutron /w openvswitchdebugging openstack neutron /w openvswitch
debugging openstack neutron /w openvswitch
어형 이
 

More from 어형 이 (9)

How to debug the pod which is hard to debug (디버그 하기 어려운 POD 디버그 하기)
How to debug the pod which is hard to debug (디버그 하기 어려운 POD 디버그 하기)How to debug the pod which is hard to debug (디버그 하기 어려운 POD 디버그 하기)
How to debug the pod which is hard to debug (디버그 하기 어려운 POD 디버그 하기)
 
Immutable kubernetes architecture by linuxkit
Immutable kubernetes architecture by linuxkitImmutable kubernetes architecture by linuxkit
Immutable kubernetes architecture by linuxkit
 
How to make cloud native platform by kubernetes
How to make cloud native platform by kubernetesHow to make cloud native platform by kubernetes
How to make cloud native platform by kubernetes
 
Live upgrade neutron architecture without downtime
Live upgrade neutron architecture without downtimeLive upgrade neutron architecture without downtime
Live upgrade neutron architecture without downtime
 
Making cloud native platform by kubernetes
Making cloud native platform by kubernetesMaking cloud native platform by kubernetes
Making cloud native platform by kubernetes
 
Kakao Openstack CI/CD
Kakao Openstack CI/CDKakao Openstack CI/CD
Kakao Openstack CI/CD
 
Install openstack
Install openstackInstall openstack
Install openstack
 
Openstack Swift overview
Openstack Swift overviewOpenstack Swift overview
Openstack Swift overview
 
debugging openstack neutron /w openvswitch
debugging openstack neutron /w openvswitchdebugging openstack neutron /w openvswitch
debugging openstack neutron /w openvswitch
 

Toward kubernetes native data center