kubernetes이론

4 분 소요

Container Orchestration 이 왜 필요한가?

방대한 콘테이너들의 변수를 통제하고 안정적인 서비스를 목표로 하는 운영계에서 단순한 방법이 아닌 보다 체계적으로 관리할 필요가 있다.

Container Orchestration 의 역할

  • 스케줄링
  • Cluster 관리
  • 서비스 Discovery
  • 모니터링
  • 설정

Container Orchestration Players

Knubernetes , Docker Swarm 등이 있다.

image-20191130224534334

Kubernetes란?

Kubernetes is an open-source system for automating depeloyment, scaling, and management of containerized applications. http://kubernetes.io

  • 컨테이너 오케스트레이터(실행 및 관리)
  • 다양한 클라우드 및 베어 메탈 환경 지원
  • Google Borg에서 시작되어 오픈 소스화됨
  • 100% Go 언어로 작성

Kubernetes 특징

  • Automatic binpacking

    가용성에 대한 희생 없이, 리소스 사용과 제약 사항을 기준으로 자동으로 컨테이너를 스케줄

  • Self-healing

    자동으로 문제가 발생한 노드의 컨테이너를 대체 (룰/정책에 따른 헬스 체크)

  • Horizontal scaling

    CPU, 메모리와 같은 리소스 사용에 따라 자동으로 애플리케이션을 확장

    경우에 따라서, 사용자 정의 측정 값을 기준으로한 동적인 확장 가능

  • Service discovery and Load balancing

    Container에 고유한 IP를 부여

    여러 개의 Container를 묶어 단일 service로 부여하는 경우 단일 DNS name으로 접근하도록 로드 밸런싱을 제공

  • Automatic rollouts and rollbacks

    다운타임 없이 애플리케이션의 새로운 버젼 및 설정에 대한 롤아웃/롤백 가능

  • Secret and configuration management

    애플리케이션의 secret과 configuration 정보를 이미지와 독립적으로 구분하여 별도의 이미지 재생성 없이 관리

  • Storage orchestration

    소프트웨어 정의 저장장치(Software Defined Storage)를 기반으로 로컬, 외부 및 저장소 솔루션 등을 동일한 방법으로 컨테이너에 마운트 할 수 있음

  • Batch execution

    CI 워크로드와 같은 Batch성 작업 지원

    crontab 형식으로 스케쥴링도 가능

kubernetes 아키텍처

image-20191130231930494

간단히 비유를 하자면

  • Kubernetes Cluster Control Plane(Master) : 팀장역할
  • Kubernetes Node : Worker 작업자
  • Registry : 일

Kubernetes Cluster Control Plane (Master)

  • kube-apiserver

    cluster와 상호 작용을 위한 k8s API서버

  • kube-scheduler

    worker node에 있는 pod를 스케쥴한다.

  • kube-controller-manager

    Deploymnets나 Replication Controller 등 관리

  • kube-cloud-manager

    Public Cloud Provider 연동 관리

  • etcd

    Master cluster에서 k8s object 저장소로 사용

image-20191201102516945

Kubernetes Node (Worker or Minion)

  • Container runtime

    컨테이너 실행을 위한 Docker Engine 포함

  • kubelet

    Master의 명령 수행을 위한 k8s 에이전트

  • kube-proxy

    인바운드 또는 아웃바운드 트래픽에 대한 네트워크 프록시 담당

  • cAdvisor

    Container Advisor는 리소스 사용/성능 통계를 제공

image-20191201103312621

내부 : Master -> kubelete -> Pod

외부 : Ingress Controller -> kube-proxy -> Pod

Kubernetes Object Model

  • k8s object에 대한 mainfest를 YAML 형식으로 작성
  • Master 노드의 ApI Server를 통해 클러스터에 k8s object 생성

image-20191201104211862

Kubernetes Objects

  • Basic objects
    • Pod
    • Service
    • Volume
    • Namespace
  • Controllers
    • ReplicaSet
    • ReplicationController
    • Deployment
    • StatefulSets
    • DaemonSet
    • Garbage Collection
    • Jobs
    • CronJob

Pod

  • Worker 노드에서 실행되는 컨테이너의 집합
  • 하나의 pod에는 한 개 이상의 서비스로 지정될 수 있음 (일반적으로 하나의 Pod 에 하나의 Container)
  • 각각의 pod는 고유한 IP가 할당됨(내부 IP)
  • 하나의 pod내에서는 PID namespace, network와 hostname을 공유

Service

  • Lable Selector로 선택하여 하나의 endpoint로 노출되는 pod의 집합
  • 종류 : ClusterIP, NodePort, LoadBalacer, ExternalName
  • image-20191201105620137

Ingress

  • 서비스에 대한 L7(어플리케이션 레이어) 라우터 정의

  • 사용자가 직접 서비스에 접근하지 않고 Ingress를 통해 접근

    image-20191201110048317

ConfigMap

  • pod에 담겨진 container에서 사용되는 구성 값

Secret

  • 컨테이너에서 읽혀지거나 사용되는 소량의 민감한 정보
  • 특수한 volume이 자동으로 연결되어 container에서 사용가능
  • 수동으로 secret을 생성하고 연결하여 사용가능
  • Base64로 encoding 될 뿐 암호화 되지는 않음
  • Volume으로 연결된 File 형식 또는 환경 변수 형식으로 사용 가능

ReplicaSet

  • Replication Controller의 새로운 버전
  • 가용성과 확장성 보장
  • 사용자의 요청에 따른 pod의 숫자를 유지하고 관리
  • 각각의 pod가 필요로하는 정보 명세가 있는 template을 이용

Deployment Controller

  • pod의 배포 및 관리에 사용
  • ReplicaSet을 자동으로 생성
  • Pod에 대한 rolling 업데이트 관리
  • 버전별로 다른 여러개의 ReplicaSet을 하나의 Deployment Controller로 묶어서 관리할 수 있음

StatefulSet

  • Deployment와 유사하나 pod별 고정된 identity(name , netword id등)할당
  • 라이선스등으로 고정된 자원이 필요할 때 사용
  • v1.9에서 안정화 버전이 적용된

DaemonSet

  • 모든 Node에 배포되어 실행(Node Selector로 정의하는 경우 일부 Node 실행)
  • Node 상태에 따른 Monotoring 용으로 주로 사용(storage관리, log 수집 daemon 등)

Job

  • 특정 task 실행을 위하 하나 혹은 이상의 pod를 생성하고 실행
  • Pod가 실행 완료하는 것을 보장(실패시 재시도, deadline 설정 가능)
  • Job 실행시 Pod의 순차 실행 또는 동시 실행 가능
  • 모든 Pod 실행이 완료 시 Job의 완료로 인식하고 사용한 Pod를 제거함

Storage

  • Volume
    • Pod에 연결되어 디렉토리 형태로 데이터를 저장할 수 있도록 제공
    • Pod의 container 들끼리 공유
    • Pod와 Life-cycle이 동일하게 적용되어 pod 삭제 시 같이 사라짐
  • Volume Type
    • empyDir, hostPath
    • gcePersistentDisk, awsElasticBlockStore, azureFileVolume, azureDiskVolume
    • nfs, iscsi, cephfs, gitRepo, secret
    • persistentVolmeClaim 등
  • PersistentVolume(PV)
    • k8s 클러스터 관리자에 의해 제공된 저장소의 일부
    • Volume과 유사하지만 pod와 독립적인 life-cycle을 가짐
    • 사용자가 용랼, 모드 등 필요한 정보와 함께 PVC(PersistentVolumeClaim)를 생성하면, 이에 대응하는 PersistentVolume이 연결됨
    • NFS, iSCSI 또는 Cloud Provider 특화된 storage system으로 제공
  • Persistent Volume Type
    • GCEPersistentDist, AWSElasticBlockStore, AzureFile, AzureDisk, NFS, iSCSI
    • CephFS, Cinder, Gluesterfs, VMWare Photon등

Kubernetes Native Tools

  • kubectl

    k&s 클러스터 관리자를 위한 CLI(command line interface) 도구

  • kubeadm

    물리서버, 클라우드 서버 또는 가상머신에 k8s 클러스터 구성을 쉽게할 수 있도록 도와주는 CLI도구

  • kubefed

    연합 클러스터 운영을 위한 CLI 도구

  • minikube

    개발이나 테스트를 목적으로 개인 PC에서 단일노드 k8s클러스터를 쉽게 제공하는 도구(virtualBox로 제공)

  • Dashboard

    Web UI 기반의 k8s 대시보드

Kubernetes 3rd party Tools - Helm

  • Kubernetes Chart
    • 사전 정의된 k8s 리소스에 대한 패키지
    • 필요한 모든 mainfest를 메타 데이터와 함계 구성한 일종의 템플릿
    • Linux에서 rpm이나 deb와 유사
    • chart 저장소는 https://github.com/kubernetes/charts 참고
  • Kubernetes Helm
    • k8s Chart 패키지 관리(조회,설치,갱신 및 삭제)
    • Linux의 yum 또는 apt와 유사
    • tiler : k8s 클러스터 내부에 설치된 서버
    • helm : 외부에서 접근하는 클라이언트

Kubernetes 3rd party Tools - Kompose

  • Docker Compose 사용자들을 Kubernetes로 옮겨올 수 있도록 도와주는 도구
  • Docker Compose 파일을 k8s object로 변화
  • http://kompose.io 참고

유튜브 강좌

이 포스트는 학습을 목적으로 해당 유튜브의 내용을 발췌하여 정리한 것입니다.

여러분도 한번 보세요. 상당히 유익합니다.

https://www.youtube.com/watch?v=l42GttmnnZ4&list=PLKQw1Ska3hjpnFBbQJJrnJIUE062OCyKo

댓글남기기