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 버전 충돌
• 사용 기술 혼재, 교육/전달 시 어려움
“일단 급하니까 수동으로 해놓자“
“지금 우리가 가지고 있는 코드 적용을 언제 했지?"
(결국 다음 번 설정 적용 시 충돌이 발생, 잘 되던 게 안되기 시작하니) "그냥 전부 수동으로
설정하는 게 낫지 않아요?“
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
18. Cluster API 도입 효과
효과
• 베어메탈, 프라이빗/퍼블릭 클라우드 등 모든 환경에서 일관된 클러스터 배포 방법을 제공
• Kubernetes 클러스터의 라이프사이클 관리를 자동화
• 컨트롤 루프를 통해 정의된 상태를 지속적으로 유지
제약/한계
• 모든 환경에 대해 인프라 프로바이더가 존재하지도 않고 일부 프로바이더는 상용 수준이 아님
• 상위 수준에서 일관된 API로 추상화하였지만 각 인프라 프로바이더 자원의 내역 및 구현, 동작에 대해서는
이해 및 검증이 필요
Kubernetes Anywhere, Everything on Kubernetes
• Kubernetes 클러스터 자체도 하나의 앱처럼 Decapod를 통해 배포하여 구축할 수 있음
• 인프라, Kubernets 클러스터, 애드온, 서비스까지 모두 통일된 방법으로 배포, 구축
Infrastructure
Provisioning
1
Kubernetes Cluster
Bootstrapping
2
Addons
3
Decapod
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
• 통합된 정책관리와 정책의 코드화