Intro
DevOps
등장배경 : 개발팀과 운영팀의 분리로 인한 문제 발생 조직간 원활한 소통의 어려움 > 서비스 품질 저하
정의 : 개발팀과 운영팀의 협업으로 전체 Life Cycle을 함께 관리하자는 철학 또는 운동 개발팀과 IT팀이 더 빠르고 안정적으로 SW를 빌드 & 릴리즈 할 수 있도록 두 팀간의 프로세스를 자동화하는 일련의 과정
CI / CD : CI: Continuous Integration CD: Continuous Delivery and Continuous Deployment
MLOps
ML팀과 운영팀의 문제를 해결하기 위한 방법 e.g. Data Drift, Schema Drift, Data Skew, Concept Drift…
DevOps & MLOps
DevOps: 개발팀에서 개발한 기능이 정상적으로 배포될 수 있는지 확인
MLOps: ML팀에서 개발한 모델이 정상적으로 배포될 수 있는지 확인
최근에는 ML팀이 직접 서비스를 운영할 수 있게 도와주는 과정까지 포함
k8s
다수의 컨테이너를 운영하기 위한 Container Orchestration System
구성 모듈
Node : Kubernetes의 hardware 요소 중 가장 작은 단위
Cluster : 여러 대의 Node를 모아서 하나의 Cluster로 구성함 ,K8s에서는 각 Node의 상태를 고려하여 배포할 프로그램을 유연하게 관리함
Persistent Volume : Cluster에 배포된 application은 container로 실행되므로 내부에 저장된 데이터는 휘발될 수 있음 Local 또는 cloud storage를 cluster에 mount한 개념
Pods : K8s의 기본 실행 단위, K8s는 container를 직접 실행하지 않고 pod이란 형태로 감싸서 실행
Pod 내의 container 끼리는 동일한 자원과 local network를 공유
Load balancing & Failure resistance: Pod 단위로 서비스의 사본을 여러 개 실행하여 부하를 분담하거나, 서비스가 중단되는 것을 방지
Scaling up & down의 단위이므로 Pod 내에 container 수를 최소화할 것을 권장(side-cars)
Deployments Pod만으로도 app container 실행 가능, 그러나 관리를 쉽게 하기 위해 deployment라는 레이어를 한 층 더 쌓아서 관리
Deployment는 몇 개의 Pod을 항상 띄워둘 것인지 선언하고,
control plane에서는 여기서 선언된 개수를 유지하도록 조절함
Pod을 어느 Node에서 실행할 지는 control plane의 scheduler가 결정
Namespaces
Virtual sub-cluster, Cluster를 가상의 클러스터로 쪼개어, 쪼개진 클러스터 간에는 서로 영향을 끼치지 않도록 함.
하나의 클러스터에서 여러 조직 또는 프로젝트가 작업할 경우
또는 개발 및 운영 단계(Development, Testing, Production)별로 구분할 필요가 있는 경우에 사용
K8s에서는 기본적으로 4가지 namespace가 생성됨(default, kube-system, kube-public, kube-node-lease)
k8s
서비스 디스커버리와 로드 밸런싱 : DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출
스토리지 오케스트레이션 : 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재
자동화된 롤아웃과 롤백 : 원하는 상태를 서술하고 현재 상태를 원하는 상태로 설정한 속도에 따라 변경 가능
자동화된 빈 패킹 : 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 제공
자동화된 복구(self-healing) : 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체
시크릿과 구성 관리 : 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리
k8s 클러스터 구조
쿠버네티스 아키텍처에서 클러스터(Cluster)란 컨테이너 형태의 애플리케이션을 호스팅하는 물리/가상 환경의 노드들로 이루어진 집합
Node는 하나의 가상머신을 의미합니다. 쿠버네티스는 컨테이너화 된 애플리케이션을 실행하는 Worker Node와 그러한 Worker Node를 관리하는 Master Node로 구성됩니다.
Master / Worker Node
Master Node
Worker Node
Kubeflow
Kubeflow workflow
웹 실습
웹 실습환경 https://labs.play-with-k8s.com/
Kubeflow
설치
실행
UI만 실행하는 방법
minikube 클러스터(EX 이름 : mlops) 생성
kubeflow Namespace 생성
Istio / Cert-manager /Dex / OIDC AuthService Namespace 생성
Kubeflow 네임스페이스에 UI 설치 kustomize build apps/centraldashboard/upstream/overlays/istio | kubectl apply -f –
UI 포트 열기
삭제
# minikube
minikube stop
minikube status
minikube delete
minikube delete -all
# kubectl
kubectl config get-clusters
kubectl config delete-cluster my-cluster
kubectl config delete-context my-cluster-context