본문으로 바로가기

아키텍쳐 및 명령어 기본

category MLOps/K8S 2022. 3. 26. 14:57

도커 - 하나의 시스템에서 컨테이너를 하나씩 관리
도커 컴포즈 - 하나의 시스템에서 컨테이너를 여러 개를 묶어서 관리
쿠버네티스 - 여러 대의 시스템에서 여러 컨테이너를 묶어서 관리

 

쿠버네티스

개념 - 여러 시스템에서 동작하는 여러 개의 컨테이너들을 세트로 관리

구성환경 - 온프레미스 / 클라우드 ( 직접구성 / 관리형 쿠버네티스 )
                 => 관리형 쿠버네티스 사용 시 
                 장점은 사용하기 편리, 초기 구성 비용이 없음
                 단점은 유지비용이 증가, 세부항목에 대한 관리가 어려움

설치 방식
- kops : 클라우드(AWS)에서 쿠버네티스 환경 구성
- kubeadm : 온프레미스 환경에서 쿠버네티스를 구성 (명령어를 사용) => 버전 관리가 어려움
- kubespray : kubeadm + ansible => 각종 플레이북 / 변수파일 / 인벤토리 등을 설정
- docker-desktop : 리눅스컨테이너를 윈도우 등에서 사용할 수 있게 환경을 구성
- minikube : 테스트환경을 구성하기 좋은 간소화된 쿠버네티스 환경 배포 (기본은 원노드)

 

오브젝트

- 워크로드 : 컨테이너를 관리하는 방식
- 파드 : 컨테이너를 관리하는 최소 단위
             하나 이상의 컨테이너로 구성 (목적)
- 컨트롤러 : 파드를 관리 (관리 방식에 따라 여러 종류)
- 레플리카셋 : 복제본의 개수를 관리
- 디플로이먼트 : 레플리카셋의 업데이트 정책 관리
- 데몬셋 : 노드마다 파드를 실행
- 스테이트풀셋 : 상태 저장을 위해 사용
- 잡 : 일회성 작업을 한번 실행
- 크론잡 : 일회성 작업을 반복 실행

- 서비스 : 컨테이너에 대한 네트워크 연결
                ClusterIP
                NodePort
                LoadBalancer

 

쿠버네티스 클러스터

- control-plane 을 클러스터 구성
       1대로도 동작은 가능 (HA 기능 없음)
       기본 3대 권장 (HA 기능 제공)
       최대 7대 권장
- node (worker) 는 필요에 따라 개수 증가

 

쿠버네티스 특징

- 선언적 API : 상태를 정의해서 유지
- 커뮤니티가 활발

 

아키텍쳐

1. Control-plane (master)
       kube-apiserver : 각각의 컴포넌트 및 리소스 제어를 위해 접근하는 포인트(전달자)
       kube-controller-manager : 각각의 컨트롤러(파드)를 관리/제어
       etcd : 쿠버네티스 환경(클러스터) 구성에 필요한 정보들을 저장
       kube-scheduler : 컨테이너를 실행할 위치(노드)를 지정
       (cloud-controller-manager) : 클라우드 환경에서 컨트롤러 등의 개체를 제어/관리

2. Node (worker)
       kube-proxy : 컨테이너의 네트워크 구성
       kubelet : 명령어 등을 통해 전달한 내역을 전달받고, 컨테이너를 생성 및 상태유지
       container-runtime (docker) : 컨테이너 생성 및 관리

 

쿠버네티스 명령어

- kubectl 명령어 사용
- 수동으로 설치가 필요할 수 있음 (kubeadm/kubespray 등은 자동설치)
- root사용자(설치를 진행한) 로만 설정
       추가 구성
       1) 다른사용자에서 명령어 설정
       /etc/kubernetest/admin.conf 파일을 ~/.kube/config 파일로 복사 (소유권)
       2) 자동완성기능
       kubectl completion bash > /etc/bash_completion.d/XXXX (재접속)

 

- 기본구문

kubectl 동작 대상 이름 옵션

$ kubectl explain 대상 : 대상에 대한 템플릿 설정 방법 확인
$ kubectl api-resources : 사용할 수 있는 리소스 목록 확인
$ kubectl api-versions : 사용할 리소스의 버전 확인

-> kubectl create / apply : 템플릿으로 리소스 배포 (많이사용)

$ kubectl run : 간단하게 파드 배포
$ kubectl expose : 간단하게 서비스 배포
$ kubectl create : 컨트롤러 배포 (템플릿 없이도 가능)

'MLOps > K8S' 카테고리의 다른 글

서비스  (0) 2022.03.28
컨트롤러 (Daemonset, Statefulset, Job, CronJob)  (0) 2022.03.28
컨트롤러 (ReplicaSet, Deployment)  (0) 2022.03.26
파드 관리  (0) 2022.03.26