Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

이열매의 메모장

쿠버네티스 본문

Docker

쿠버네티스

이열매 2019. 10. 9. 20:06

kubernetes

개념

  • 분산 오픈소스 컨테이너 관리 환경

  • 기능

    • 컨테이너 서비스 네트워크 검색 및 트래픽 로드 밸런싱

    • 저장 공간 자동 마운트

    • 롤아웃/롤백 자동화

    • 컨테이너 자동 복구

    • 노드 클러스터에서 사용하는 컨테이너 리소스 최적화

    • 보안 정보 저장 및 관리

 

클러스터 기술

  • 여러 대의 컴퓨터가 네트워크를 통해 연결되어 하나의 단일 컴퓨터처럼 동작
  • 서버에서 부하 분산 기능에 사용            

 

컨테이너 오케스트레이션

  • 스케줄링 (Scheduling)
    • 여러 호스트에 컨테이너를 분배하고 컨테이너나 호스트의 장애 시 재분배
  • 네트워킹 (Networking)
    • 여러 호스트에 분산된 컨테이너 간의 네트워크와 L4/L7을 지원
  • 로깅 (Logging)
    • 동적인 컨테이너들의 통합 로그 조회
  • 모니터링 (Monitoring)
    • 분산되어 있는 컨테이너들의 모니터링 정보 수집
  • 스토리지 (Storage)
    • 여러 호스트 간을 이동하며 운영되는 컨테이너가 접근할 수 있는 리모트 스토리지 제공

 

쿠버네티스 오브젝트

  • 시스템 상태 구성 단위

Basic Object

  • 쿠버네티스에 의해서 배포 및 관리되는 기본적인 오브젝트

  • Pod

    • pod마다 IP가 할당

    • 컨테이너 묶음 배포 단위

    • pod 내 컨테이너끼리 네트워크 / 로컬 디스크 볼륨 공유

  • Service

    • 사용자 접근 가능 기능

      • Pod에 고정된 Access Endpoint (IP/PORT) 제공

    • Pod 간 로드밸런싱 지원

      • selector에서 서비스에 참여시킬 pod의 label을 설정

      • pod은 k8s가 자동으로 종료하고 생성하여 변경되므로 서비스에서 label로 일관되게 접근 가능

Controller

  • 기본 오브젝트를 생성하고 관리

  • Deployment

    • ReplicaSet 관리 및 생성

    • ReplicaSet

      • 동일한 이미지를 갖는 여러 개의 Pod 를 생성 및 관리

      • template 안에 정의된 pod을 replica 개수만큼 띄움

      • 옵션

        • replicas : 생성할 Pod 개수

        • selector : Pod Label 지정

        • template : Pod 스펙 정의

       

  • StatefulSet

    • Stateful한 어플리케이션을 관리하는 오브젝트

    • Deployment와 달리 관리하는 각각의 Pod가 고유 상태 정보(Identity) 가짐

      • 즉, 서비스에서 pod 마다 DNS 주소가 부여

      • Local/Remote 볼륨, Scale in/out 순서, Update 순서 등 설정 가능

    • Deployment에 비해 배포 속도가 느림

      • parallel하게 pod를 배포하는 Deployment와 달리 순서대로 배포

      • 배포할 pod 를 각각 확인 후 배포 진행 및 에러 시 stop

  • ConfigMap

    • 이미지 내부 환경(config) 설정

    • Pod에 환경 변수나 설정을 KEY:VALUE 형식으로 전달

    • 생성 명령어

      kubectl create configmap example-config --from-file={ConfigMap으로 설정할 yaml 파일 경로}
  • Secret

    • 비밀번호, token, API key 등의 민감한 데이터를 yaml 형식으로 저장

    • 설정 명령어

      kubectl create -f {Secret으로 설정할 yaml파일 경로}

 

서비스 라우팅/로드밸런싱

  • 종류

  • ClusterIP

    • 클러스터 내부에서만 접근 가능한 IP

    • 서비스 기본 생성 시 사용 방식

  • LoadBalancer

    • Cluster IP와 클러스터 외부에서도 접근이 가능한 IP 할당

    • Service.yaml파일의 type에 LoadBalancer 기입

  • Ingress

    • L7 로드밸런싱(URL 라우팅) 기능 제공

 

배포 방식

  • Rolling Update

    • 쿠버네티스의 기본 배포 방식

    • Deployment Controller가 ReplicationSet을 하나 더 추가하여 pod를 차례로 교체

  • Progressive 배포

    • 수동 설정 변경으로 기존 Deployment와 새로운 Deployment의 pod 개수를 조절해가며 투입

  • Blue/Green

    • 수동 설정 변경으로 기존 Deployment와 새로운 Deployment의 부하 분산 비율을 조절해가며 투입

    • 분산 비율은 서비스의 annotation 사용

 

Cloud 기반이란

  • 특성

    • 시스템 컨포넌트 간 의존성 ↓

    • 장애 발생에 스스로 대응 및 회복

    • 시스템 노드와 컨테이너 모니터링

    • 안정적인 시스템 및 서비스 관리

Helm Chart

  • 설정값을 따로 변수 처리 및 관리

pod 라이프사이클

  • 전후처리

    • Init contatiner

      • container 실행 전 반드시 동작 보장

      • 실제 컨테이너가 뜨기 전, 별도의 컨테이너가 전처리 작업

    • Container hooks

      • PostStart

        • container 시작 즉시 호출

      • PreSTop

        • container 종료 직전 호출

        • sync로 동작

  • Pod 상태 체크

    • livenessProbe

      • pod health check 실패 시 pod 재시작

    • readinessProbe

      • pod 상태 서비스 가능 체크 후 서비스에 등록

      • 실패 시 로드밸런스에서 제외

      • pod 재시작은 x

도커 클러스터

정의

  • 여러 개의 서버를 네트워크로 연결하여 하나의 서버처럼 사용하는 것
  • 워커 노드를 관리하는 매니저 노드와 서비스를 제공하는 다량의 워커 노드로 구성
  • 로드밸런싱 가능
    • 하나의 도메인에 클러스터로 묶인 서버를 사용 > 해당 도메인으로 접속 > 클러스터로 묶인 워커 노드 서버 중 한 대로 접속

 

사용 이유

  • 서버의 부하를 줄이고 최대의 가용성을 뽑아내기 위해서 나온 기술
  • 한 대의 서버에 에러가 발생해도 다른 서버로 대체 가능                              

Docker swarm 과 Kubernetes

: 둘 모두 오픈소스 컨테이너 관리 도구이다. swarm은 도커에서 제공하고 k8s는 구글에서 제공한다.

 설치 및 단순성으로 따지자면 swarm이 더 우세하다. swarm은 도커 회사에서 제공하기에 도커 엔진만 설치하면 바로 사용이 가능하다. k8s는 사용을 위해 도커 설치 후 추가로 설치가 필요하다. 또한 k8s는 이전에 구글에서 진행한 컨테이너 기반 프로젝트인 Borg로부터 파생되었는데, 이 프로젝트가 워낙에 규모가 크고 그에 따른 장애 가능성이 있어 k8s 또한 이를 피할 수 없다는 의견이 있다.

 어느 쪽이 성능이 더 좋다고 말할 수는 없지만, 간단한 프로젝트에는 swarm을 사용하는 것이 더욱 편리하다는 의견이 우세하다. 그러나 결론적으로는 구글에서 제공하는 쿠버네티스가 가장 많이 사용되어 표준화가 된 상태이다. 대세를 따르겠다면 쿠베를 사용하도록 하자.

 

 

 

'Docker' 카테고리의 다른 글

도커 캐시 디렉토리 경로 변경  (0) 2019.10.31
Docker - 3. 자동 빌드  (0) 2019.10.21
Docker - 2. 도커 사용하기  (0) 2019.10.14
Docker - 1. 도커란  (0) 2019.10.08
도커 Allow property 이슈  (0) 2019.10.08
Comments