TIL kubernetes

sundays·2022년 10월 6일
0

  • 개발자는 특정 인프라 관련 서비스를 application에 구현하지 않아도 되고 실제 기능 개발에 집중
  • 시스템 관리자( 운영자 )는 Kubernetes가 application 재배치하고 조합함으로서 리소스를 휠씬 효율적으로 관리할 수 있고 장애가 발생하더라도 자동으로 처리
  • Kubernetes는 container화된 application을 쉽게 배포 관리할 수 있는 orchestration 도구
    • 마스터 노드( Control Plane )
      전체 Kubernetes 시스템을 제어하고 관리하는 Kubernetes control plane 실행
    • 워커 노드
      실제 배포되는 container application이 실행
    • 클러스터
      마스터 노드와 워커 노드의 집합

Kubernetes

  • Kubernetes는 container화된 application을 쉽게 배포 관리할 수 있는 orchestration 도구
  • 구글이 내부적으로 사용하던 container 관리 도구를 오픈소스화하여 공개한 container orchestration 도구. 지금은 cncf 재단 관리 운영

구성

Master Node

  • kube-apiserver

    • 사용자 상호 작용 수행
    • Kubernetes 제어 명령 수신
    • API 명령 수신
  • kube-scheduler

    • 새로운 POD( container ) 생성 감지
    • 실행시킬 워커 노드 선택
  • etcd

    • 클러스터의 모든 데이터 보관
    • 고가용성을 보장하는 Key-Value 저장소
    • 어떤 노드가 존재하고 클러스터에 어떤 리소스가 있는지와 같은 정보 저장
  • kube-controller-manager

    • deployment 같은 리소스 컨트롤 관리
    • API 서버를 통해 클러스터 공유 상태 감지
    • 현재 상태를 원하는 상태로 이행하는 컨트롤 루프 관리
  • cloud-controller-manager

    • public cloud와 연동하여 로드 밸런서나 디스크 볼륨 같은 자원 관리

Worker Node

  • kubelet

    • 각 노드에서 실행되는 에이전트
    • container run-time을 관리하고 상태를 모니터링
      POD에서 container가 확실하게 동작하도록 관리
  • kube-proxy

    • 각 노드에서 실행되는 네트워크 프록시
    • Service 개념 구현부
    • 서로 다른 노드에 있는 POD 간 통신이나 POD와 인터넷 사이의 트래픽 라우팅
  • container run-time

    • container 제어 기능( 실행-중지-삭제 ) - Docker( 기본적으로 많이 사용 )
    • CRI( Container Run-time Initiative ) - 공통 container run-time 규격

관리 도구

kubeAdm

  • kubernetes 에서 제공하는 생성 관리 도구

kubeSpray

  • Kubernetes 클러스터를 배포하는 오픈 소스 프로젝트
  • 다양한 형식으로 Kubernetes 클러스터 구성 가능
  • on-premise에서 상용 서비스 클러스터 운영시 유용
  • 다양한 CNI 제공

Minikube

  • Local 시스템에 설치 가능
  • 설치가 간단 하면서 Kubernetes가 제공하는 기능 활용 가능
  • 개발 도구와 MiniKube 연계 가능
  • 단일 노드( 워커 노드 ) 형태로 동작
  • 노드를 가상화 형태로 생성하기 때문에 Docker, VirtualBox등의 가상화 도구가 추가로 필요하다.
  • 학습 / 개발용

k3s

  • 경량 Kubernetes 배포판
  • CNCF에서 육성하는 프로제트이며 Rancher Labs에서 제작
  • k3s 실행 파일을 통해 서버와 에이전트만 구동하면 Kubernetes 각 구성 요소가 간편하게 설치되고 Kubernetes 클러스터가 구성된다.
  • 마스터 노드의 etcd 를 경량 파일형 DBMS sqlite 사용
  • IoT, 학습용 초소형 컴퓨터( 라즈베리파이등 ) 에도 사용 가능

rancher

  • Kubernetes 클러스터뿐만 아니라 운영에 필요한 모니터링, 보안 관련 기능을 쉽게 설치 가능
  • rancher의 관리 도구를 사용해서 새로운 Kubernetes 클러스터를 쉽게 생성하고 여러 클러스터를 한 곳에서 관리
  • 대규모 시스템 관리를 고려하여 많은 도구를 제공

CRI

  • Docker 기반 Kubernetes 구조
    • Kubelet이 명령을 받으면 Docker runtime을 통해 container를 생성하거나 삭제하는 생명 주기 관리 구조
  • Docker 이외 다양한 container 기술 적용 Kubernetes 구조
  • Kubelet 수정없이 다양한 container 지원 Kubernetes 구조
    • kubelet 수정없이 다양한 container runtime을 지원하기 위한 통일된 인터페이스 스펙이 CRI( Container Runtime Interface )
    • container runtime이 CRI 스펙에 맞추어 구현되면 kubelet 수정없이 새로운 container runtime을 plug-in 구조로 추가하여 사용할 수 있는 구조 제공

KubeAdm을 이용한 Kubernetes 환경 구성

  • Master node( Control plane ), Worker node에 해당하는 서버 생성(준비 ) - Kubernetes 설치 가능 최소 사양 이상으로 구성

    • 스왑의 비활성화. kubelet이 제대로 작동하게 하려면 반드시 스왑을 사용하지 않도록 설정한다.

      • sudo swapoff -a - swap 기능 off
      • echo 0 > /proc/sys/vm/swappiness - kernel 속성의 swap를 disable, root 사용자로 전환후 수행
      • sed -e '/swap/ s/^#*/#/' -i /etc/fstab - swap을 하는 파일시스템을 찾아 삭제
    • 필수 port 번호 확인 해서 포트 개방

  • Master node( Control plane ), Worker node에 container runtime 환경 구성 - Docker 설치

  • kubeadm, kubectl, kubelet 설치

    • kubeadm - 클러스터를 부트스트랩하는 명령
    • kubectl - 클러스터와 통신하기 위한 CLI
    • kubelet - 클러스터의 모든 머신에서 실행되는 Pod와 Container 시작과 같은 작업을 수행하는 component
  • Master node / worker node 구성

  • kubeadm, kubectl, kubelet 설치

    • kubeadm - 클러스터를 부트스트랩하는 명령
    • kubectl - 클러스터와 통신하기 위한 CLI
    • kubelet - 클러스터의 모든 머신에서 실행되는 Pod와 Container 시작과 같은 작업을 수행하는 component
  • Kubernetest cluster 구성

    • Master node에 cluster 구성
      - kubeadm init - 관리자 권한으로 실행
      - cf) kubeadm init 수행시 error 발생시 해결 방안

      $ sudo rm /etc/containerd/config.toml
      $ sudo systemctl restart containerd
  • CNI 구성 cluster에 CNI add-on

  • Worker node에서 Master node 연결

  • Kubernetes 환경 구성 확인

    • kubectl get nodes
    • kubectl get nodes -o wide
    • kubectl cluster-info
    • kubectl get pod --all-namespaces
  • Kubernetes playground

    • https://labs.play-with-k8s.com
    • docker에서 제공
    • docker hub 계정으로 로그인
    • 하나의 세션에 대하여 4시간의 사용 시간 부여
    • control-plane, worker node를 직접 구성 - cluster 직접 구성

Reference

profile
develop life

0개의 댓글