SlideShare a Scribd company logo
1 of 33
Download to read offline
Application을 넘어
Infrastructure도
Kubernetes기반의 GitOps로!
컨테이너솔루션개발팀 엄주관, 임성일
01
Kubernetes 기반 플랫폼 구축을 위해
사용했던 방법과 부딪혔던 문제
02 Cluster API을 활용하여 얻은 개선 효과
03 Cluster API 기반 GitOps를 위한 기반 구현물
01
Kubernetes 기반 플랫폼 구축을 위해 사용했던
방법과 부딪혔던 문제
기술 목표, 방향성
• 온-프레미스, 프라이빗/퍼블릭 클라우드와 같은 다양한 인프라 환경에서
하이브리드 컨테이너 서비스를 가능하게 하는 기술을 개발하고
사내 협업 부서, 사외 파트너사와 함께 결과물을 전달하고
구축, 운영하는 일을 해오고 있습니다.
• 개발 과정에서 뿐만 아니라 구축, 운영 과정에서
협업 및 교육이 수월하게 이루어 지기 위해
기술 세트를 통일하고 일관된 방식을 사용하는 것을
매우 중요하게 생각합니다.
운영 환경을 위한 Kubernetes를 설치하는 방법
What?
• 설치할 노드 준비:
• VM / 베어메탈
• 네트워킹
• 스토리지
• OS 설치
How?
• 사람
• IaC 도구 (Terraform…)
What?
• 준비된 노드에 Kubernetes
설치
How?
• Kubeadm
• Kubespary
Infrastructure
Provisioning
1
Kubernetes Cluster
Bootstrapping
2
Addons
3
운영 환경을 위한 Kubernetes를 설치하는 방법
• 환경/벤더 종속
• Terraform과 같은 Iac 툴을
사용하더라도 온-프레미스
환경 지원은 불가능
Managed Kubernetes Service
• EKS
• AKS
• GKE
• …
Infrastructure
Provisioning
1
Kubernetes Cluster
Bootstrapping
2
Addons
3
운영 환경을 위한 Kubernetes를 설치하는 방법
What?
• CNS
• CSI
• Ingress/LB
• 로깅
• 모니터링
• 앱 배포를 위한 서비스
• ...
How?
• Kubespary
• Helm Chart
• Kustomize
• ...
Infrastructure
Provisioning
1
Kubernetes Cluster
Bootstrapping
2
Addons
3
Decapod
이전까지는 아래의 방법을 사용했습니다
Tacoplay: https://github.com/openinfradev/tacoplay
Kubernetes 기반의 다양한 서비스를 쉽게 설치하고 설정할 수 있게 해 주는 ansible playbook의 모음
오픈 소스 프로젝트들과 자체 개발한 playbook 으로 구성
• Docker registry
• Ceph (via ceph-ansible -> rook)
• Kubernetes (via Kubespray)
• CSI/CNI
• Helm
• Decapod (argo & etc)
• OpenStack
• Logging, Monitoring, Alarm
특징
• 필요한 소프트웨어들을 한 번에 설치, 제거, 확장할 수 있는 통합 playbook 제공
• 각 소프트웨어의 정상 동작에 필요한 OS 설정 자동화
• 각 소프트웨어들 간의 통합 연동 설정
• 인터넷 접근이 불가능한 환경에서의 구축을 위한 설정 간소화
Challenges
Tacoplay 효과
• inventory와 변수 파일을 통해 각 사이트 별 설정 관리
• Git을 이용하여 변경 사항에 대한 비교 및 이력 관리
그러나…
• 플레이북 실행 시점에만 적용되기 때문에 운영 편의 등의 이유로 수동으로 환경 수정한
부분과 이후 재 반영 시 충돌이 발생
• 현재 Git 저장소 내용과 실제 환경에 적용된 내역과의 비교 및 조치의 어려움
• Kubespray / ceph-ansible 간 ansible 버전 충돌
• 사용 기술 혼재, 교육/전달 시 어려움
“일단 급하니까 수동으로 해놓자“
“지금 우리가 가지고 있는 코드 적용을 언제 했지?"
(결국 다음 번 설정 적용 시 충돌이 발생, 잘 되던 게 안되기 시작하니) "그냥 전부 수동으로
설정하는 게 낫지 않아요?“
02 Cluster API을 활용하여 얻은 개선 효과
Kubernetes SIG Cluster Lifecycle 목표
https://discuss.kubernetes.io/t/kubernetes-io-blog-automated-high-availability-in-kubeadm-v1-15-batteries-included-but-swappable/6914
Kubernetes Principles
https://developers.redhat.com/articles/2021/06/22/kubernetes-operators-101-part-2-how-operators-work#kubernetes__workload_deployments
Kubernetes Controllers
• Control(reconciliation) loop for “desired
state == current state”
Operator 패턴
• Custom Resources + Custom Controllers
• POD 와 같이 k8s 내장 자원 외에 다른
“모든" 것들 도 K8S 자원으로 관리 가능
• 예) storage(rook), infra(crossplane), db
(viteness), ...
Cluster API도 그러합니다
컨트롤 루프를 통해 정의된 클러스터
상태를 (사람의 개입을 최소화하고)
지속적으로 유지
Cluster API
Cluster API is a Kubernetes sub-project focused on providing declarative APIs
and tooling to simplify provisioning, upgrading, and operating multiple
Kubernetes clusters.
Management cluster
Workload clusters
Controller managers
Bootstrap Providers
- kubeadm
Infrastructure Providers
- AWS
- Azure
- Vsphere
- GCP
- OpenStack
- Metal3 (Baremetal)
Cluster API CRDs
https://youtu.be/A2BBuKx1Yhk?t=1447
Multi Infra Provider
apiVersion: cluster.x-
k8s.io/v1beta1
kind: Cluster
metadata:
name: aws-cluster
spec:
infrastructureRef:
apiVersion:
infrastructure.cluster.
x-k8s.io/v1beta1
apiVersion: infrastructure.cluster.x-
k8s.io/v1beta1
kind: AWSCluster
metadata:
name: infra-cluster
spec:
…
apiVersion: infrastructure.cluster.x-
k8s.io/v1beta1
kind: GCPCluster
metadata:
name: infra-cluster
spec:…
apiVersion: infrastructure.cluster.x-
k8s.io/v1beta1
kind: AzureCluster
metadata:
name: infra-cluster
spec:
…
kind: AWSCluster
name: infra-cluster
controlPlaneRef:
…
kind: GCPCluster
kind: AzureCluster
클러스터 배포, 구축 via Cluster API
https://techbloc.net/archives/4661
Cluster API Resources (AWS)
Cluster API 도입 효과
효과
• 베어메탈, 프라이빗/퍼블릭 클라우드 등 모든 환경에서 일관된 클러스터 배포 방법을 제공
• Kubernetes 클러스터의 라이프사이클 관리를 자동화
• 컨트롤 루프를 통해 정의된 상태를 지속적으로 유지
제약/한계
• 모든 환경에 대해 인프라 프로바이더가 존재하지도 않고 일부 프로바이더는 상용 수준이 아님
• 상위 수준에서 일관된 API로 추상화하였지만 각 인프라 프로바이더 자원의 내역 및 구현, 동작에 대해서는
이해 및 검증이 필요
Kubernetes Anywhere, Everything on Kubernetes
• Kubernetes 클러스터 자체도 하나의 앱처럼 Decapod를 통해 배포하여 구축할 수 있음
• 인프라, Kubernets 클러스터, 애드온, 서비스까지 모두 통일된 방법으로 배포, 구축
Infrastructure
Provisioning
1
Kubernetes Cluster
Bootstrapping
2
Addons
3
Decapod
03 Cluster API 기반 GitOps를 위한 기반 구현물
20
K8S deployment /w Cluster API
export AWS_REGION=us-east-1
export AWS_SSH_KEY_NAME=default
export AWS_CONTROL_PLANE_MACHINE_TYPE=t3.large
export AWS_NODE_MACHINE_TYPE=t3.large
clusterctl generate cluster capi-quickstart 
--kubernetes-version v1.23.3 
--control-plane-machine-count=3 
--worker-machine-count=3  > capi-quickstart.yaml
Kubectl apply –f capi-quickstart.yaml
ENV
+
Set Value
cluster
Machin
ePool
contro
lplane
Machin
eDeplo
yment
observe
diff
act
New k8s cluster
21
Needs for a helm chart
• clusterctl 의 template은 QuickStart 용
• 잘 사용하기 위해서는 생성된 yaml의 재가공 필수
• 생성해주는 자원이 한정, 변경 가능한 필드도 제한적
• 서비스로 k8s 클러스터를 만들기위해 변경이 필요한 부분은 소수이고 이를 편하게 적용할 무언가 필요
• SKT Container platform의 기반 배포 툴인 decapod를 사용하기 위해서는 Helm chart 필수
22
Helm chart for K8S deployment /w Cluster API (1/2)
> helm repo add taco http://openifradev.github.io/helm-repo
> helm search repo cluster-api-aws
NAME CHART VERSION APP VERSION DESCRIPTION
taco/cluster-api-aws 0.5.0 1.0.0 A chart to install Kubernetes cluster using Clu...
helm install demo taco/cluster-api-aws -f demo.vo --timeout 20m
NAME: demo
LAST DEPLOYED: Mon Apr 25 07:17:40 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES: This helm chart create a kubernetes cluster on AWS using cluster api.
Cluster Name: demo
22
cluster
Machin
ePool
contro
lplane
Machin
eDeplo
yment
observe
diff
act
Helm Chart
Value
override file
New k8s cluster
23
Helm chart for K8S deployment /w Cluster API (2/2)
Override values
• vm 접속용 ssh-key 정의(sshKeyName)
• cluster 이름 지정 (cluster.name)
• aws region 지정 (cluster.region)
• k8s 버전 (cluster.kubernetesVersion)
• bastion 서버사용 여부 (cluster.bastion.enabled)
• master 노드 개수지정 (kubeadmControlPlane.replicas)
• worker 노드를 위한 machinepool 설정 (machinePool)
Source: https://github.com/openinfradev/helm-charts/tree/main/cluster-api-aws
Values: https://github.com/openinfradev/helm-charts/blob/main/cluster-api-aws/values.yaml
24
CRs for Worker Nodes
Machine Pool Machine Deployment
Control 주체 Provider
- Autoscaling Group
Cluster API
- EC2 instance
Deployment Through every AZ Single AZ
25
Mulit AZ support
MachinePool
Availability Zone
Master Worker
Machine Deployment
……..
Worker Worker
Availability Zone
Master Worker
Machine Deployment
……..
Worker Worker
Availability Zone
Master Worker
Machine Deployment
……..
Worker Worker
26
Cluster auto scaling
Availability Zone
Master
Machine Deployment
Worker Worker
Availability Zone
Master
Machine Deployment
Worker Worker
Availability Zone
Master
Machine Deployment
Worker Worker
Cluster autoscaler
Management cluster
1. Monitor
2. Update CR
3. Adjust replica
Worker
27
Using generated values using helm hooks
• MachiePool이나 MachieDeployment는 정확한 네트워크 정보가 함께
입력되어야 함
• Helm hook을 사용하여 클러스터 배포로 aws상 네트워크가
만들어지면 이 정보를 기반으로 post job을 통해 워커노드 배포
클러스터
마스터노드
배포
클러스터
생성대기
JOB
워커노드
배포
노드생성체크 후처리
•vpc, subnet 등
네트워크 생성
•마스터노드 및 로드밸
런서 생성
•생성완료시 종료
•Helm post-install hook
발생
•MP, MD
•post-install hook 으로부터
trigger
•생성된 자원에서 네트워크
정보확인
•지정된 형태의 워커노드 생성
28
Support spot instance
• 저렴한 인스턴스 사용의 요구사항
• Batch process 혹은 실시간을 요하지 않는 workload에 적합
• MachineDeployment를 사용하고 최대 지불비용 지정
(MachinePool은 지원하지 안됨)
• Bastion 노드에도 적용가능
29
CAPI가 지원하지 않는 자원의 제어
• K8s 외에 필요한 기능들
• 사용자 접근이 필요한 dashboard등에 대한 dns 등록
• 노드 네트워크통신을 위한 네트워크 설정
k8s cluster
Dashboard?
grafana.mycluster.com
10.20.30.4
10.20.30.4
How?
Who?
30
Terraform / Crossplane / aws cli
• Terraform cloud 적용시도
• 가장 많이 사용되는 인프라제어 툴인 Terraform
• Terraform cloud는 Terraform의 스크립트를 k8s의 cr형태로 제공하여 인프라제어
• 한계
• “CR -> terraform cloud(on cloud) -> terraform 스크립트 실행 -> 인프라제어” 구조
• 단계별 async 동작
• Crossplane을 통한 Public cloud 자원제어
• Public cloud의 자원들을 k8s의 CR로 만들어 관리할 수 있게 하는 툴
• 클러스터내 설치된 crossplane controller가 직접적인 인프라제어
• Ingress용 lb나 dns, security group 등을 조작하기위해 활용
• aws CLI
• Aws에서 제공하는 cli tool로 aws의 서비스는 기본적으로 이를 통해 제어가능
• 앞의 두 방법으로 할 수 없는 영역에서 활용
31
Next…
• 다양한 인프라로의 확장
• 사용자들의 요구를 청취하고 요구되는 인프라들을 추가하여 확장
• byoh (인프라/OS 프로비저닝은 제외하고 VM/물리 node를 worker node로 연결)
• Openstack, vmware, azure…
• GitOps for Policy
• 통합된 정책관리와 정책의 코드화
감사합니다
Q & A

More Related Content

Similar to 세션3_데보션테크데이_gitopsinfra_v1.1.pdf

[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기Hyperledger Korea User Group
 
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 KubernetesTommy Lee
 
[제3회 스포카콘] Kubernetes in Spoqa
[제3회 스포카콘] Kubernetes in Spoqa[제3회 스포카콘] Kubernetes in Spoqa
[제3회 스포카콘] Kubernetes in SpoqaKangwook Lee
 
[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 ...OpenStack Korea Community
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)용호 최
 
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)Cloud-Barista Community
 
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)Cloud-Barista Community
 
Kubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideKubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideChan Shik Lim
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista Community
 
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축Jung Hyun Nam
 
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on KubernetesOpenStack Korea Community
 
MySQL operator for_kubernetes
MySQL operator for_kubernetesMySQL operator for_kubernetes
MySQL operator for_kubernetesrockplace
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetesSangSun Park
 
Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Jinwoong Kim
 
Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1WhaTap Labs
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos uEngine Solutions
 
오픈스택 기반 클라우드 서비스 구축 방안 및 사례
오픈스택 기반 클라우드 서비스 구축 방안 및 사례오픈스택 기반 클라우드 서비스 구축 방안 및 사례
오픈스택 기반 클라우드 서비스 구축 방안 및 사례SONG INSEOB
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8sHyoungjun Kim
 

Similar to 세션3_데보션테크데이_gitopsinfra_v1.1.pdf (20)

[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
 
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
 
[제3회 스포카콘] Kubernetes in Spoqa
[제3회 스포카콘] Kubernetes in Spoqa[제3회 스포카콘] Kubernetes in Spoqa
[제3회 스포카콘] Kubernetes in Spoqa
 
[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 ...
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)
 
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
 
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
 
Kubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideKubernetes on Premise Practical Guide
Kubernetes on Premise Practical Guide
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
 
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
 
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
 
MySQL operator for_kubernetes
MySQL operator for_kubernetesMySQL operator for_kubernetes
MySQL operator for_kubernetes
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetes
 
Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현
 
Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos
 
오픈스택 기반 클라우드 서비스 구축 방안 및 사례
오픈스택 기반 클라우드 서비스 구축 방안 및 사례오픈스택 기반 클라우드 서비스 구축 방안 및 사례
오픈스택 기반 클라우드 서비스 구축 방안 및 사례
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 

More from Jaesuk Ahn

세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdf세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdfJaesuk Ahn
 
세션5_데보션테크데이_이상근.pdf
세션5_데보션테크데이_이상근.pdf세션5_데보션테크데이_이상근.pdf
세션5_데보션테크데이_이상근.pdfJaesuk Ahn
 
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...Jaesuk Ahn
 
세션0_데보션테크데이_개회사_v1.0.pdf
세션0_데보션테크데이_개회사_v1.0.pdf세션0_데보션테크데이_개회사_v1.0.pdf
세션0_데보션테크데이_개회사_v1.0.pdfJaesuk Ahn
 
세션1_데보션테크데이_시연데모_v1.0.pdf
세션1_데보션테크데이_시연데모_v1.0.pdf세션1_데보션테크데이_시연데모_v1.0.pdf
세션1_데보션테크데이_시연데모_v1.0.pdfJaesuk Ahn
 
세션5_데보션테크데이_AIops_v1.0.pdf
세션5_데보션테크데이_AIops_v1.0.pdf세션5_데보션테크데이_AIops_v1.0.pdf
세션5_데보션테크데이_AIops_v1.0.pdfJaesuk Ahn
 
세션4_데보션테크데이_k10backup_Veeam_v1.0.pdf
세션4_데보션테크데이_k10backup_Veeam_v1.0.pdf세션4_데보션테크데이_k10backup_Veeam_v1.0.pdf
세션4_데보션테크데이_k10backup_Veeam_v1.0.pdfJaesuk Ahn
 
세션4_데보션테크데이_k10backup_SKT_v1.0.pdf
세션4_데보션테크데이_k10backup_SKT_v1.0.pdf세션4_데보션테크데이_k10backup_SKT_v1.0.pdf
세션4_데보션테크데이_k10backup_SKT_v1.0.pdfJaesuk Ahn
 
SKT Openinfra days 2018 Presentation
SKT Openinfra days 2018 Presentation SKT Openinfra days 2018 Presentation
SKT Openinfra days 2018 Presentation Jaesuk Ahn
 
SK Telecom TACO Introduction at Berlin Summit
SK Telecom TACO Introduction at Berlin SummitSK Telecom TACO Introduction at Berlin Summit
SK Telecom TACO Introduction at Berlin SummitJaesuk Ahn
 
Monitoring System Targeting OpenStack, Baremetal, and Network Fabric
Monitoring System Targeting OpenStack, Baremetal, and Network FabricMonitoring System Targeting OpenStack, Baremetal, and Network Fabric
Monitoring System Targeting OpenStack, Baremetal, and Network FabricJaesuk Ahn
 
OpenStack at Xen summit Asia
OpenStack at Xen summit Asia OpenStack at Xen summit Asia
OpenStack at Xen summit Asia Jaesuk Ahn
 
OpenStack at Korea Community Day
OpenStack at Korea Community DayOpenStack at Korea Community Day
OpenStack at Korea Community DayJaesuk Ahn
 

More from Jaesuk Ahn (13)

세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdf세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdf
 
세션5_데보션테크데이_이상근.pdf
세션5_데보션테크데이_이상근.pdf세션5_데보션테크데이_이상근.pdf
세션5_데보션테크데이_이상근.pdf
 
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...
 
세션0_데보션테크데이_개회사_v1.0.pdf
세션0_데보션테크데이_개회사_v1.0.pdf세션0_데보션테크데이_개회사_v1.0.pdf
세션0_데보션테크데이_개회사_v1.0.pdf
 
세션1_데보션테크데이_시연데모_v1.0.pdf
세션1_데보션테크데이_시연데모_v1.0.pdf세션1_데보션테크데이_시연데모_v1.0.pdf
세션1_데보션테크데이_시연데모_v1.0.pdf
 
세션5_데보션테크데이_AIops_v1.0.pdf
세션5_데보션테크데이_AIops_v1.0.pdf세션5_데보션테크데이_AIops_v1.0.pdf
세션5_데보션테크데이_AIops_v1.0.pdf
 
세션4_데보션테크데이_k10backup_Veeam_v1.0.pdf
세션4_데보션테크데이_k10backup_Veeam_v1.0.pdf세션4_데보션테크데이_k10backup_Veeam_v1.0.pdf
세션4_데보션테크데이_k10backup_Veeam_v1.0.pdf
 
세션4_데보션테크데이_k10backup_SKT_v1.0.pdf
세션4_데보션테크데이_k10backup_SKT_v1.0.pdf세션4_데보션테크데이_k10backup_SKT_v1.0.pdf
세션4_데보션테크데이_k10backup_SKT_v1.0.pdf
 
SKT Openinfra days 2018 Presentation
SKT Openinfra days 2018 Presentation SKT Openinfra days 2018 Presentation
SKT Openinfra days 2018 Presentation
 
SK Telecom TACO Introduction at Berlin Summit
SK Telecom TACO Introduction at Berlin SummitSK Telecom TACO Introduction at Berlin Summit
SK Telecom TACO Introduction at Berlin Summit
 
Monitoring System Targeting OpenStack, Baremetal, and Network Fabric
Monitoring System Targeting OpenStack, Baremetal, and Network FabricMonitoring System Targeting OpenStack, Baremetal, and Network Fabric
Monitoring System Targeting OpenStack, Baremetal, and Network Fabric
 
OpenStack at Xen summit Asia
OpenStack at Xen summit Asia OpenStack at Xen summit Asia
OpenStack at Xen summit Asia
 
OpenStack at Korea Community Day
OpenStack at Korea Community DayOpenStack at Korea Community Day
OpenStack at Korea Community Day
 

세션3_데보션테크데이_gitopsinfra_v1.1.pdf

  • 2. 01 Kubernetes 기반 플랫폼 구축을 위해 사용했던 방법과 부딪혔던 문제 02 Cluster API을 활용하여 얻은 개선 효과 03 Cluster API 기반 GitOps를 위한 기반 구현물
  • 3. 01 Kubernetes 기반 플랫폼 구축을 위해 사용했던 방법과 부딪혔던 문제
  • 4. 기술 목표, 방향성 • 온-프레미스, 프라이빗/퍼블릭 클라우드와 같은 다양한 인프라 환경에서 하이브리드 컨테이너 서비스를 가능하게 하는 기술을 개발하고 사내 협업 부서, 사외 파트너사와 함께 결과물을 전달하고 구축, 운영하는 일을 해오고 있습니다. • 개발 과정에서 뿐만 아니라 구축, 운영 과정에서 협업 및 교육이 수월하게 이루어 지기 위해 기술 세트를 통일하고 일관된 방식을 사용하는 것을 매우 중요하게 생각합니다.
  • 5. 운영 환경을 위한 Kubernetes를 설치하는 방법 What? • 설치할 노드 준비: • VM / 베어메탈 • 네트워킹 • 스토리지 • OS 설치 How? • 사람 • IaC 도구 (Terraform…) What? • 준비된 노드에 Kubernetes 설치 How? • Kubeadm • Kubespary Infrastructure Provisioning 1 Kubernetes Cluster Bootstrapping 2 Addons 3
  • 6. 운영 환경을 위한 Kubernetes를 설치하는 방법 • 환경/벤더 종속 • Terraform과 같은 Iac 툴을 사용하더라도 온-프레미스 환경 지원은 불가능 Managed Kubernetes Service • EKS • AKS • GKE • … Infrastructure Provisioning 1 Kubernetes Cluster Bootstrapping 2 Addons 3
  • 7. 운영 환경을 위한 Kubernetes를 설치하는 방법 What? • CNS • CSI • Ingress/LB • 로깅 • 모니터링 • 앱 배포를 위한 서비스 • ... How? • Kubespary • Helm Chart • Kustomize • ... Infrastructure Provisioning 1 Kubernetes Cluster Bootstrapping 2 Addons 3 Decapod
  • 8. 이전까지는 아래의 방법을 사용했습니다 Tacoplay: https://github.com/openinfradev/tacoplay Kubernetes 기반의 다양한 서비스를 쉽게 설치하고 설정할 수 있게 해 주는 ansible playbook의 모음 오픈 소스 프로젝트들과 자체 개발한 playbook 으로 구성 • Docker registry • Ceph (via ceph-ansible -> rook) • Kubernetes (via Kubespray) • CSI/CNI • Helm • Decapod (argo & etc) • OpenStack • Logging, Monitoring, Alarm 특징 • 필요한 소프트웨어들을 한 번에 설치, 제거, 확장할 수 있는 통합 playbook 제공 • 각 소프트웨어의 정상 동작에 필요한 OS 설정 자동화 • 각 소프트웨어들 간의 통합 연동 설정 • 인터넷 접근이 불가능한 환경에서의 구축을 위한 설정 간소화
  • 9. Challenges Tacoplay 효과 • inventory와 변수 파일을 통해 각 사이트 별 설정 관리 • Git을 이용하여 변경 사항에 대한 비교 및 이력 관리 그러나… • 플레이북 실행 시점에만 적용되기 때문에 운영 편의 등의 이유로 수동으로 환경 수정한 부분과 이후 재 반영 시 충돌이 발생 • 현재 Git 저장소 내용과 실제 환경에 적용된 내역과의 비교 및 조치의 어려움 • Kubespray / ceph-ansible 간 ansible 버전 충돌 • 사용 기술 혼재, 교육/전달 시 어려움 “일단 급하니까 수동으로 해놓자“ “지금 우리가 가지고 있는 코드 적용을 언제 했지?" (결국 다음 번 설정 적용 시 충돌이 발생, 잘 되던 게 안되기 시작하니) "그냥 전부 수동으로 설정하는 게 낫지 않아요?“
  • 10. 02 Cluster API을 활용하여 얻은 개선 효과
  • 11. Kubernetes SIG Cluster Lifecycle 목표 https://discuss.kubernetes.io/t/kubernetes-io-blog-automated-high-availability-in-kubeadm-v1-15-batteries-included-but-swappable/6914
  • 12. Kubernetes Principles https://developers.redhat.com/articles/2021/06/22/kubernetes-operators-101-part-2-how-operators-work#kubernetes__workload_deployments Kubernetes Controllers • Control(reconciliation) loop for “desired state == current state” Operator 패턴 • Custom Resources + Custom Controllers • POD 와 같이 k8s 내장 자원 외에 다른 “모든" 것들 도 K8S 자원으로 관리 가능 • 예) storage(rook), infra(crossplane), db (viteness), ... Cluster API도 그러합니다 컨트롤 루프를 통해 정의된 클러스터 상태를 (사람의 개입을 최소화하고) 지속적으로 유지
  • 13. Cluster API Cluster API is a Kubernetes sub-project focused on providing declarative APIs and tooling to simplify provisioning, upgrading, and operating multiple Kubernetes clusters. Management cluster Workload clusters Controller managers Bootstrap Providers - kubeadm Infrastructure Providers - AWS - Azure - Vsphere - GCP - OpenStack - Metal3 (Baremetal)
  • 15. Multi Infra Provider apiVersion: cluster.x- k8s.io/v1beta1 kind: Cluster metadata: name: aws-cluster spec: infrastructureRef: apiVersion: infrastructure.cluster. x-k8s.io/v1beta1 apiVersion: infrastructure.cluster.x- k8s.io/v1beta1 kind: AWSCluster metadata: name: infra-cluster spec: … apiVersion: infrastructure.cluster.x- k8s.io/v1beta1 kind: GCPCluster metadata: name: infra-cluster spec:… apiVersion: infrastructure.cluster.x- k8s.io/v1beta1 kind: AzureCluster metadata: name: infra-cluster spec: … kind: AWSCluster name: infra-cluster controlPlaneRef: … kind: GCPCluster kind: AzureCluster
  • 16. 클러스터 배포, 구축 via Cluster API https://techbloc.net/archives/4661
  • 18. Cluster API 도입 효과 효과 • 베어메탈, 프라이빗/퍼블릭 클라우드 등 모든 환경에서 일관된 클러스터 배포 방법을 제공 • Kubernetes 클러스터의 라이프사이클 관리를 자동화 • 컨트롤 루프를 통해 정의된 상태를 지속적으로 유지 제약/한계 • 모든 환경에 대해 인프라 프로바이더가 존재하지도 않고 일부 프로바이더는 상용 수준이 아님 • 상위 수준에서 일관된 API로 추상화하였지만 각 인프라 프로바이더 자원의 내역 및 구현, 동작에 대해서는 이해 및 검증이 필요 Kubernetes Anywhere, Everything on Kubernetes • Kubernetes 클러스터 자체도 하나의 앱처럼 Decapod를 통해 배포하여 구축할 수 있음 • 인프라, Kubernets 클러스터, 애드온, 서비스까지 모두 통일된 방법으로 배포, 구축 Infrastructure Provisioning 1 Kubernetes Cluster Bootstrapping 2 Addons 3 Decapod
  • 19. 03 Cluster API 기반 GitOps를 위한 기반 구현물
  • 20. 20 K8S deployment /w Cluster API export AWS_REGION=us-east-1 export AWS_SSH_KEY_NAME=default export AWS_CONTROL_PLANE_MACHINE_TYPE=t3.large export AWS_NODE_MACHINE_TYPE=t3.large clusterctl generate cluster capi-quickstart --kubernetes-version v1.23.3 --control-plane-machine-count=3 --worker-machine-count=3 > capi-quickstart.yaml Kubectl apply –f capi-quickstart.yaml ENV + Set Value cluster Machin ePool contro lplane Machin eDeplo yment observe diff act New k8s cluster
  • 21. 21 Needs for a helm chart • clusterctl 의 template은 QuickStart 용 • 잘 사용하기 위해서는 생성된 yaml의 재가공 필수 • 생성해주는 자원이 한정, 변경 가능한 필드도 제한적 • 서비스로 k8s 클러스터를 만들기위해 변경이 필요한 부분은 소수이고 이를 편하게 적용할 무언가 필요 • SKT Container platform의 기반 배포 툴인 decapod를 사용하기 위해서는 Helm chart 필수
  • 22. 22 Helm chart for K8S deployment /w Cluster API (1/2) > helm repo add taco http://openifradev.github.io/helm-repo > helm search repo cluster-api-aws NAME CHART VERSION APP VERSION DESCRIPTION taco/cluster-api-aws 0.5.0 1.0.0 A chart to install Kubernetes cluster using Clu... helm install demo taco/cluster-api-aws -f demo.vo --timeout 20m NAME: demo LAST DEPLOYED: Mon Apr 25 07:17:40 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: This helm chart create a kubernetes cluster on AWS using cluster api. Cluster Name: demo 22 cluster Machin ePool contro lplane Machin eDeplo yment observe diff act Helm Chart Value override file New k8s cluster
  • 23. 23 Helm chart for K8S deployment /w Cluster API (2/2) Override values • vm 접속용 ssh-key 정의(sshKeyName) • cluster 이름 지정 (cluster.name) • aws region 지정 (cluster.region) • k8s 버전 (cluster.kubernetesVersion) • bastion 서버사용 여부 (cluster.bastion.enabled) • master 노드 개수지정 (kubeadmControlPlane.replicas) • worker 노드를 위한 machinepool 설정 (machinePool) Source: https://github.com/openinfradev/helm-charts/tree/main/cluster-api-aws Values: https://github.com/openinfradev/helm-charts/blob/main/cluster-api-aws/values.yaml
  • 24. 24 CRs for Worker Nodes Machine Pool Machine Deployment Control 주체 Provider - Autoscaling Group Cluster API - EC2 instance Deployment Through every AZ Single AZ
  • 25. 25 Mulit AZ support MachinePool Availability Zone Master Worker Machine Deployment …….. Worker Worker Availability Zone Master Worker Machine Deployment …….. Worker Worker Availability Zone Master Worker Machine Deployment …….. Worker Worker
  • 26. 26 Cluster auto scaling Availability Zone Master Machine Deployment Worker Worker Availability Zone Master Machine Deployment Worker Worker Availability Zone Master Machine Deployment Worker Worker Cluster autoscaler Management cluster 1. Monitor 2. Update CR 3. Adjust replica Worker
  • 27. 27 Using generated values using helm hooks • MachiePool이나 MachieDeployment는 정확한 네트워크 정보가 함께 입력되어야 함 • Helm hook을 사용하여 클러스터 배포로 aws상 네트워크가 만들어지면 이 정보를 기반으로 post job을 통해 워커노드 배포 클러스터 마스터노드 배포 클러스터 생성대기 JOB 워커노드 배포 노드생성체크 후처리 •vpc, subnet 등 네트워크 생성 •마스터노드 및 로드밸 런서 생성 •생성완료시 종료 •Helm post-install hook 발생 •MP, MD •post-install hook 으로부터 trigger •생성된 자원에서 네트워크 정보확인 •지정된 형태의 워커노드 생성
  • 28. 28 Support spot instance • 저렴한 인스턴스 사용의 요구사항 • Batch process 혹은 실시간을 요하지 않는 workload에 적합 • MachineDeployment를 사용하고 최대 지불비용 지정 (MachinePool은 지원하지 안됨) • Bastion 노드에도 적용가능
  • 29. 29 CAPI가 지원하지 않는 자원의 제어 • K8s 외에 필요한 기능들 • 사용자 접근이 필요한 dashboard등에 대한 dns 등록 • 노드 네트워크통신을 위한 네트워크 설정 k8s cluster Dashboard? grafana.mycluster.com 10.20.30.4 10.20.30.4 How? Who?
  • 30. 30 Terraform / Crossplane / aws cli • Terraform cloud 적용시도 • 가장 많이 사용되는 인프라제어 툴인 Terraform • Terraform cloud는 Terraform의 스크립트를 k8s의 cr형태로 제공하여 인프라제어 • 한계 • “CR -> terraform cloud(on cloud) -> terraform 스크립트 실행 -> 인프라제어” 구조 • 단계별 async 동작 • Crossplane을 통한 Public cloud 자원제어 • Public cloud의 자원들을 k8s의 CR로 만들어 관리할 수 있게 하는 툴 • 클러스터내 설치된 crossplane controller가 직접적인 인프라제어 • Ingress용 lb나 dns, security group 등을 조작하기위해 활용 • aws CLI • Aws에서 제공하는 cli tool로 aws의 서비스는 기본적으로 이를 통해 제어가능 • 앞의 두 방법으로 할 수 없는 영역에서 활용
  • 31. 31 Next… • 다양한 인프라로의 확장 • 사용자들의 요구를 청취하고 요구되는 인프라들을 추가하여 확장 • byoh (인프라/OS 프로비저닝은 제외하고 VM/물리 node를 worker node로 연결) • Openstack, vmware, azure… • GitOps for Policy • 통합된 정책관리와 정책의 코드화
  • 33. Q & A