3일차

3일차

교육 참고 내용

도커 멀티 호스트 구성

  • 오케스트레이션 : 쿠바, 도커 스웜

  • 도커 모니터링 :

도커 컨테이너 마운트

  • 컨테이너 데이터 마운트

  • 볼륨 : 도커가 관리하는 호스트 영역과 마운트 -> 주로 볼륨 방식으로 통일됨

  • 바인드 마운트 : 호스트 특정 디렉토리와 마운트

  • tmps 마운트 : 호스트 메모리와 마운트

볼륨 특징

  • 도커가 추천하는 마운트 방식

  • 컨테이너로부터 데이터가 분리

  • 컨테이너간 데이터 공유가 가능

  • 호스트와 컨테이너 간 파일 공유가 가능

  • I/O 성능 향상

  • 저장위치는 호스트 서버내 도커가 관리하는 영역

    • /var/lib/docker/volume

    • 볼륨 위치 지정이 가능. 그러나 도커가 관리하는 영역은 달라지지 않음.

볼륨 관리 유형

  • 케이스 1 : 컨테이너 내부에 저장

  • 케이스 2 : 도커 호스트 파일시스템 볼륨 마운트

  • 케이스 3 : 클라우드 프로바이더 볼륨 마운트

    • volume-driver를 이용해 네트워크로 연결된 장치에 저장

볼륨 주요 명령어

  • 지정안하면 임의 할당 driver -> local

네트워킹 모델

  • 도커가 시작 될 때 호스트 머신에 docker0라고 부르는 가상 ㄴ인터페이스를 생성

  • 사설 IP -> 컨테이너 내부에서 사용하는 IP

Network 주요 명령어

network 유형

  • bridge : 단일 호스트내에서 컨테이너를 연결해주는 네트워크 (ex - docker0)

  • overlay : 멀티 호스트 간에 연결 해주는 네트워크

bridge network

  • 컨테이너는 동일 호스트내에 위치

  • 사용자 정의 bridge 네트워크에 포함된 컨테이너는 컨테이너 이름으로 통신 가능

overay network

  • 멀티호스트 간의 네트워크 구성

  • key-value 스토어 : Consul. Etcd, Zookeeper

  • key-value 스토어에 연결된 호스트 클러스터

  • 커널버전 3.16이상

  • 각 호스트 도커엔진 설정

    • 포트오픈

      • tcp 2377 : 클러스터 관리

  • consul.io

    • 서비스 디스커버리나 설정관련 기ㅅ능을 구현할 때 사용 할 수 있는 서비스 메시 솔루션

    • 헬스체크, KV 스토어 , 시큐어 서비스 스토어 -> 오픈소스

  • 키벨류 머신 1, 도커 호스트 머신 2대 총 3대의 가상 머신이 필요함

도커 스웜

  • 도커 호스트 ㅌ클러스터를 구성하고, 클러스터에 컨테이너를 배치해주는 도구

  • 표준 Docker API

  • 스케쥴링 지원

  • 디스커버리 지원 : Consul, Etcd, Zookeeper

스웜 모드

  • ehzj dpswlsdp zmffjtmxj rhksflrk xhdgkqehls ahem

    • 조건 : 도커 엔진 1.12.0 이상

  • 멀티호스트네트워킹 : 분산환경에서 여러개 노드를 하나의 네트워크로 묶은것

  • 서비스 디스커버리 : 멀티호스트

  • 헬스체킹

  • 노깅

  • 스케일아웃

  • 모니터링

  • HA

롤링 업데이트를 활용한 배포 프랙티스

  • BlueGreen Deployment

  • Canary Release

스웜 모드 중요개념

스웜 클러스터

  • 스웜을 이용해 구축한 클러스터

  • aka 스웜

  • node : 스웜 클러스터에 참여하는 도커 엔진 인스턴스

    • Manager Node

      • 스웜매니저가 실행

      • 스웜 클러스트 상태를 관리하는 노드. 오케스트레이션

      • Service 정의, Task 할당

    • Worker Node

      • 매니저 노드의 명령을 받아서 컨테이너 작업을 수행

      • Task 처리

  • 서비스

    • 배포단위

    • 한개 서비스는 여러개의 테스크를 갖음

    • 보통 1개의 이미지를 이용해 동일한 타입의 ㅓㄴ테이너를 여러개 실행

    • global services

      • 클러스터에 있는 모든 노드에서 실행 되는 서비스

    • replicated services

      • 스케일 아웃을 위해 특정 노드에서 실행하는 서비스

  • Task

    • 컨테이너 배포 단위, 컨테이너와 컨테이너에서 처리하는 명령

    • 스웜 스케쥴링 단위

스웜 모드 명령어

  • No extermal KV(key-valeu) stroe needed

스웜 실습 참고하여 해보기

  • --swarm-master 옵션 : 스웜매니저로 사용?

  • 워커노드는 위 옵션 빼도 됨

ingress 네트워크

  • swarm 클러스트 외부에 서비스 포트 공개를 지원

  • 모든 노드는 ingress routing mesh 에 들어감

    • 필수포트

      • 7946 : 디스커버리포트

      • 4789 : 인그레스 네트워크 포트

  • HAProxy (로드밸런싱) -> 라우팅 -> 내부연결

swarm kit

  • 리눅스 킷과 스왐이 합쳐진....

  • 도커 노드 클러스터링 이슈

    • 싱글노드 : private ip

    • 멀티노드

  • swarmd

  • swarmct

쿠버네티스

  • 1세대 -> 2세대 -> 3세대(k8s)

  • 컨테이너 어플리케이션에 대한 배포, 스케일링, 관리를 자동화 해주는 오픈소스 시스템

  • 왜 쿠버네티스가 필요한가

  • 서비스 디스커버리 : 컨테이너 노출

  • 로드밸런싱 : 컨테이너 네트워크 트래픽 관리

  • 스토리지 오케스트레이션 (볼륨 데이터 공유 등)

  • 네트워크, 스토리지 잘해야됌

  • 상태관리: 자동화된 롤아웃,백으로 노드에 대한 상태를 유지

  • 스케쥴링 : 조건에 맞는 노드를 찾아서 컨테이너를 배치

  • 클러스터링 : 가상 넽워크를 통해 하나의 클러스터 노드를 제공

  • 리소스 모니터링, 시크릿 등...

    • 시크릿 -> 인프라 관리 -> 키값 관리가 많은데... 무분별하게 쓰여지는것이 많고... 안정적인 관리를 위한?

kubectl 명령어

  • dashboard : 웹서비스

k8s 클러스터

  • k8s 클러스터 : 컨테이너 애플리케이션을 실행하는 노드 == 워쿼노드의 집합

    • 마스터 -> 여러개의 워커

    • 마스터 -> 컨트롤플레인으로 명칭 변경

  • etcd, kube-controller-manager, cloud-controller-manager, 스케쥴러

  • 노드 : 파드들이 생성되는 머신

컨트롤 플레인

  • k8s 클러스터를 관리

  • 1대이상(운영-최소 3대) 필요하며 실제로 컨테이너를 배치하지 않는다.

  • api 서버 : 클라이언트 통신하는 http(s) REST API 서버

  • 쿠베 컨트롤러 매니저 : DaemonSet Contorller, Replication Controoler 등의 컨트롤러를 관리하고 API서버와 통신

  • 클라우드 컨트롤러 매니저 : 공개 클라우드 사업자를 위해 확장 포인트제공

  • 스케쥴러 : 노드에 리소스를 배치한다

  • etcd: 분산형 key-value 저장소, 설정 정보 저장

Node

  • 실제로 컨테이너가 실행되는 머신... 마스터 API서버와 통신하면서 노드에 컨테이너를 관리

  • kubelet : API 서버와 통신하며 컨테이너 상태를 관리

  • kube-Proxy (프록시 서버) : 네트워크 프록시, 로드밸런서

  • cAdivisior : 리소스 모니터링

  • 컨테이너 런타임 : Docker, Container

Pod (가장중요)

  • 배포단위

  • 하나의 Pod 은 여러 개의 컨테이너를 가짐

  • Pod내에 있는 컨테이너 끼리는 로컬 콜 -> 브릿지 네트워크

  • 고유 IP 가짐. Pod이 가짐. VM? 서버?

  • CPU, Memory, volumes, IP Address 및 기타 자원을 할당. (Pod 내의 모든 컨테이너가 자원을 공유)

  • 컨트롤러 관리

  • Pod IP Range

Service

  • pods은 늘어나거나 줄어들 수 있음.

  • pods으로 가는 traffic을 로드밸런싱 해줄 수 있어야하는데, service가 그역할을 수행

  • Private IP가 service에 할당

  • Service에 할당된 IP+PORTfmfx hdgo wjqrmsgkaus, enldp dlTsms ㅔㅐㅇㄴdp round-robin등의 방식으로 접근

  • sticky session 지원

  • Service 유형은 Cluster IP, NodePort, Loadbalace, Ingress 가 있음

Cluster IP

  • 팟이 유동적이기 떔에 클러스터내 고유한 IP

Ingress GW

kube-controller-manager

  • ReplicaSet

    • 팟을 관리

    • 예전에는 Replication Controller였는데 대체중

  • Deployment

kubeflow

Docker 호스트 모니터링

htop

  • 터미널 기반 유닉스 프로세스 모니터닝 도구

컨테이너 로깅 기준

  • 로그를 이벤트 스트림으로 취급하라

  • 로그파일로 관리하지말고 stdout으로 출력

  • 로그파일은 앱이 아닌 실행환경으로 관리한다

멀티호스트 모니터링

  • frontail

ELK를 이용한 로그 분석 환경 구축

  • 엘라스틱 서치 : 아파치 루신 기반읜 검색 엔진 서버

  • 로그스태시 : 로그와 같은 데이터를 실시간으로 수집해주는 엔진

  • 키바나 :엘라스칙 서치 결과를 분석하고 표현해주는 플랫폼

  • 레디스 : 인메모리 데이터 저장소

싱글호스트 구축

멀티호스트 구축

Last updated

Was this helpful?