Intro

DevOps

  1. 등장배경 : 개발팀과 운영팀의 분리로 인한 문제 발생 조직간 원활한 소통의 어려움 > 서비스 품질 저하

  2. 정의 : 개발팀과 운영팀의 협업으로 전체 Life Cycle을 함께 관리하자는 철학 또는 운동 개발팀과 IT팀이 더 빠르고 안정적으로 SW를 빌드 & 릴리즈 할 수 있도록 두 팀간의 프로세스를 자동화하는 일련의 과정

  3. 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

구성 모듈

  1. Node : Kubernetes의 hardware 요소 중 가장 작은 단위

  2. Cluster : 여러 대의 Node를 모아서 하나의 Cluster로 구성함 ,K8s에서는 각 Node의 상태를 고려하여 배포할 프로그램을 유연하게 관리함

  3. Persistent Volume : Cluster에 배포된 application은 container로 실행되므로 내부에 저장된 데이터는 휘발될 수 있음 Local 또는 cloud storage를 cluster에 mount한 개념

  4. Pods : K8s의 기본 실행 단위, K8s는 container를 직접 실행하지 않고 pod이란 형태로 감싸서 실행

Pod 내의 container 끼리는 동일한 자원과 local network를 공유
Load balancing & Failure resistance: Pod 단위로 서비스의 사본을 여러  실행하여 부하를 분담하거나, 서비스가 중단되는 것을 방지
Scaling up & down의 단위이므로 Pod 내에 container 수를 최소화할 것을 권장(side-cars)
  1. Deployments Pod만으로도 app container 실행 가능, 그러나 관리를 쉽게 하기 위해 deployment라는 레이어를 한 층 더 쌓아서 관리

Deployment는  개의 Pod을 항상 띄워둘 것인지 선언하고,
control plane에서는 여기서 선언된 개수를 유지하도록 조절함
Pod을 어느 Node에서 실행할 지는 control plane의 scheduler가 결정
  1. 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 클러스터 구조

week4_4

  • 쿠버네티스 아키텍처에서 클러스터(Cluster)란 컨테이너 형태의 애플리케이션을 호스팅하는 물리/가상 환경의 노드들로 이루어진 집합

  • Node는 하나의 가상머신을 의미합니다. 쿠버네티스는 컨테이너화 된 애플리케이션을 실행하는 Worker Node와 그러한 Worker Node를 관리하는 Master Node로 구성됩니다.

Master / Worker Node

week4_5

Master Node

masternode

Worker Node

workernode

Kubeflow

kubeflow

kubeflowcomponent

Kubeflow workflow

kubeflowcomponent kubeflowcomponent

웹 실습

웹 실습환경 https://labs.play-with-k8s.com/

Kubeflow

설치

  1. kubectl : 생성한 클러스터에 요청을 보내기 위한 클라이언트 툴

  2. minikube : k8s 클러스터를 구성하기 하기 위해 사용되며 k8s에 비해 경량화되어 일반 데스크탑에서도 사용이 가능함

  3. Kustomize : k8s 네트워크에 커스텀된 Pod 모듈을 추가할 수 있음 Kubeflow를 설치하는데 사용됨

  4. kubeflow : Manifest를 활용하여 Kubeflow 네임스페이스 내 katib, 파이프라인을 설치할 수 있음

실행

UI만 실행하는 방법

  1. minikube 클러스터(EX 이름 : mlops) 생성

  2. kubeflow Namespace 생성

  3. Istio / Cert-manager /Dex / OIDC AuthService  Namespace 생성

  4. Kubeflow 네임스페이스에 UI 설치 kustomize build apps/centraldashboard/upstream/overlays/istio | kubectl apply -f –

  5. 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