IT/쿠버네티스 / / 2020. 1. 25.

[kubernetes] 쿠버네티스(kubernetes) 란 무엇인가?

포스팅 목차

    kubernetes의 정의

    • Orchestration (조타수)
    • http://kubernetes.io 에서의 정의
      "Open-source software for automating deployment, scaling, and management fo containerized applications"
      "컨테이너형 애플리케이션을 구축, 확장 및 관리 자동화를 위한 오픈 소스 소프트웨어"
    • Easy to run, Potentially complex to integrate
    • Built with lessons from Google
    • 개방과 확장이 가능하다.

     

    kubernetes cluster 구조

    쿠버네티스의 구성 컴포넌트

    • microservice : 최소 기능별로 쪼개서 서비스 런칭
    • Decoupling : 각 서비스 간 Queue 메커니즘을 통한 약결합 형태
    • Built to be transient : 임시자원 형태로 관리
      - pets and cattle 비유
      => pets : 스케일 업 방식 튜닝, on-promise기반
      => cattle : 클라우드 형태, 마이크로서비스 형태, 분산된 형태의 아키텍쳐 이므로 자동화 필요. tag 형태 (label) 관리, 이미지 형태로 언제든 런칭 가능
    • API call driven : 모든 리소스 제어 등은 api를 통해 제어
    • YAML to JSON, written in Go
      - ETCD(분산형 데이터베이스)에 저장되는 형태는 json

     

    kubernetes의 특징

    • Easy to build container images : docker image를 통한 쉬운 빌드
    • Simple to share images via registries : docker hub, registries 직접 만들어 사용 가능
    • Powerful user tools to manage containers
      기본은 데시보드 서비스 제공
      모니터링, 로깅 서비스들을 추가적으로 런칭하여 사용 가능 (ELK, ESK, 프로메테우스)
    • Network considerations
      - docker는 docker0라는 이름의 가상 스위치 부여, 스위치에는 default 서브넷이 부여될것이고 같은 서브넷으로 런칭되기 때문에 같은 시스템 내의 통신상에는 문제 없음
      - 쿠버네티스는 멀티 노드 형태로 제공 (여러 물리적인 worker들을 물려서 쿠버네티스라는 가상의 클러스터기반으로 운영, 머신들의 그룹 기반으로 리소스를 관리)
      - 클러스터 자체는 물리적인 시스템에 구여받지 않고 가상의 하나의 플랫폼 기반으로 리소스들을 관리하는 형태가 되어야 함
      - 쿠버네티스 각 노드에 도커를 설치하면 각각 같은 default 서브넷 기반으로 런칭 되고 이는 통신상 문제가 생기기 때문에 서로 다른 서브넷을 사용해야 하는데 서브넷이 달라지면 통신을 위해 라우팅이 필요게 됨. 따라서 클러스터에서 라우팅 테이블을 자동으로 업데이트 하는 메카니즘이나 vxlan과 같은 오버레이 네트웍 방식을 통해서 물리적으로 상관없이 서로 간의 통신을 할수 있게 해줄수 있는 네트워크 메커니즘이나 플러그인이 필요함. 쿠버네티스에서도 calico 등과 같은 다양한 플러그인이 있음.
    • Flexible storage : 목적에 맞게 선택 가능

     

    kubernetes와 비슷한 다른 Solutions

     

    Borg Heritage

    • 2004년도 부터 borg 프로젝트로 구글은 사용.
    • 2014년 오픈소스로 런칭.
    • 2015년 LF 쪽 CNCF산하에 오픈소스로 기증.
    • 현재는 구글 내 omega the 프로젝트로 바뀜. borg를 통해서 많은 영향을 줌.

     

    Container 유형 구분

    • 시스템 컨테이너 (LXC)
      메인 서비스가 두개 이상 존재 할 수 있음
      시스템 컨테이는 안에는 init.d, systemd가 독립적임.
    • 어플리케이션 컨테이너 (Docker, rkt)
      - 컨테이너안에 메인서비스가 한개임. 컨테이너와 어플리케이션이 라이프사이클이 동일. 컨테이너가 죽으면 메인서비스 자체도 종료.
      - 물리적인 호스트 시스템의 커널과 init.d, systemd를 공유하는 형태
      - 2013년도부터 도커를 사용하면서 도커가 무거워짐.
      - 로켓(rkt) 컨테이너가 초심으로 돌아가보자. light 하게 경량화된 형태도 돌아가자는 취지로 진행되고 있는 프로젝트임.

     

    Kubernetes Archtecture

    • Central manager (master)
      API server
      Scheduler
      Controllers
      etcd storage system
    • Worker Nodes (minions)
      기본
      docker engine
      kubelet (api server와 연동)
      kube-proxy ( L4스위치 역할, 네트웍 트래픽 제어)

     

    Kubernetes 기본 용어

    • pod
      - 컨테이너 그룹 형태
      - 스케쥴링하는 최소 단위
    • controller : 파드를 관리하는 추상적인 객체
      - replicaSet
      - Deployment
      - DaemonSet
      (복제 불가. 노드 마다 하나씩 생성, kube-proxy 같이 노드마다 하나씩 뜸, worker노드 추가시 자동으로 하나가 올라감)
      - Jobs
    • Label
      - 조회, 관리 목적
      - key, value 형태
      - 상위 객체와 하위 객체 간의 어소시어션
    • Taint
      - 오염, 노드에 설정
      - key, value 형태
      - 일반적인 파드는 오염을 피해서 스케쥴링 됨
    • Toleration
      - 관용, 파드에 설정
    • Annotation
      - etcd HA 구성할 경우 리더를 선정할 때 사용한다던가..

     

    Kubernetes Tools

    • Minikube : all in one 형태 인스톨러
    • kubeadm : 멀티클러스터 구축, master init, worker join
    • kubectl : resource 관리
    • Dashboard
    • kubefed : 멀티클러스터를 한곳에서 통합 관리 도구
    • kops
    • helm : 패키지 메니저
    • kompose : 쿠버네티스 명세서로 쉽게 이관 가능하게 함

     

    추천 resources

    http://research.google.com/pubs/pub43438.html
    https://www.gcppodcast.com/post/episode-46-borg-and-k8s-with-john-wilkes/
    http://slack.kubernetes.io
    http://stackoverflow.com/search?q=kubernetes

    https://github.com/kubernetes/community


    참조) CKA 대비 간단 실습

    01. kubeadm 을 이용한 설치 및 세팅
    02. kubernetes 클러스터 노드 확장 및 셋팅
    03. 간단한 application 배포, yaml템플릿, 서비스 expose 해보기
    04. deployment 의 CPU, Memory 제약
    05. namespace 를 위한 resource limit 설정
    06. 좀더 복잡한 deployment 배포해보기
    07. 기본 Node 의 maintenance (유지보수)
    08. API AND ACCESS
    09. API 객체
    10. Managing State with Deployments
    11. Service Resource
    12. Volumes and Data : ConfigMap 간단 테스트
    13. PV 와 PVC 생성
    14. ResourceQuota 사용 (PVC Count 와 Usage를 제한)
    15. ingress 간단 실습
    16. Scheduling - label 사용한 pod 할당
    17. Scheduling - Taint를 이용한 pod 배포 관리
    18. 로깅과 트러블슈팅 : 로그위치와 로그 출력 보기
    19. 로깅과 트러블슈팅 : Metrics와 DashBoard
    20. CRD (Custom Resource Definition)
    21. helm
    22. Security - TLS
    23. Security - Authentication, Authorization, Admission
    24. HA(High Availability) 구성 - master node


    • 네이버 블로그 공유
    • 네이버 밴드 공유
    • 페이스북 공유
    • 카카오스토리 공유