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를 이용한 로그 분석 환경 구축
엘라스틱 서치 : 아파치 루신 기반읜 검색 엔진 서버
로그스태시 : 로그와 같은 데이터를 실시간으로 수집해주는 엔진
키바나 :엘라스칙 서치 결과를 분석하고 표현해주는 플랫폼
레디스 : 인메모리 데이터 저장소
싱글호스트 구축
git clone http://github.com/deviantony/docker-elk -> elastic/changeme
k8s로 ELK 환경을 구축해보기
멀티호스트 구축
Last updated
Was this helpful?