배포
-
도메인으로 만들기
ip.nip.io
http://52.78.185.183.nip.io:4200/
-
nginx
-
버전이 바뀔 때 접속이 끊기지 않도록 도와줌
-
v1과 v2를 동시에 올림
docker run --rm -p 60000:3000 --name=echo ghcr.io/subicura/echo:v1
docker run -d -e VIRTUAL_HOST=echo.127.0.0.1.nip.io ghcr.io/subicura/echo:v1 docker run -d -e VIRTUAL_HOST=echo.127.0.0.1.nip.io ghcr.io/subicura/echo:v2
-
proxy server 사용
-
nginx-proxy
docker run -d -p 60002:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy docker run -d -e VIRTUAL_HOST=echo.52.78.185.183.nip.io ghcr.io/subicura/echo:v1
간단하게 연결 가능한 docker 서비스 디스커버리
-
가상 네트워크 연결: nginx-network
version: '3' services: echo: image: ghcr.io/subicura/echo:v1 environment: VIRTUAL_HOST: echo.127.0.0.1.nip.io networks: default: external: name: nginx-network #nginx와 echo가 같이 통신할 수 있도록 설정
$ docker network create nginx-network $ docker run -d -p 60003:80 \ --network=nginx-network \ -v /var/run/docker.sock:/tmp/docker.sock:ro \ jwilder/nginx-proxy
-
-
쿠버네티스
컨테이너 관리 시스템
도커
- 컨테이너 특징
- 생성이 쉽고 효율
- 이미지를 이용해 배포와 롤백 간단
- app을 동일한 방식으로 관리
- 동일한 환경
- 특정 클라우드 벤더에 종속X –> OpenSource
- Developer -> build -> ship -> run —-> ???
도커 이후
-
많은 컨테이너 관리 어려움
version up/rollback이 쉽지 않음
LoadBalnace 증가
-
서비스/부하 모니터링이 어려움
컨테이너 오케스트레이션
복잡한 컨테이너 환경 관리
-
중앙 제어 cluster
master를 통해 문제 있는 서버(cluster) 알려줌
서로 유연하게 연결되어있음
cluster가 많아도 문제 없음
-
상태 관리 state
서버가 한 개 죽으면 새로운 서버를 띄어줌
-
Scheduling
-
Rollout, Rollback
version 설정
-
Service Discovery
-
Volume
외부에 있는 nfs, aws ebs 등등 연결 시 자동으로 연결
쿠버네티스
- google에서 개발
- open source
- 무한한 확장성
용어
master, node, k8s, kubectl, etcd, pod, istio, helm, knative
-
CNCF: cloud native
클라우드 환경에 적합한 방식
클라우드, 서버 관리, 자원, 배포, API제공, MSA, DevOps
-
장점
DevOps
Cost
Open –> cube control 사용
CNCF
-
:star: 원하는 상태
Ovserve -> Diff -> Act의 상태를 자동으로 확인
-
:star:Object
-
컨테이너
Pod
여러개의 컨테이너가 하나의 Pod에 속할 수 있음
ReplicaSet
여러개의 Pod을 관리
버전을 여러 개 사용
다양한 workload 존재
-
Service
ClusterIP
pod을 알아서 설정
쿠버네티스 안에서만 접속 가능
NodePort
노드에 노출되어 외부에서 접근 가능한 서비스
대량의 컨테이너 관리를 위해
-
-
:star:API 호출
-
Object Spec - YAML
apiVerison, kind, metadata, spe, status(시스템에서 관리하는 최신 상태)
-
원하는 상태를 다양한 오브젝트로 정의하고 API 서버에 yaml 형식으로 전달
-
-
:star:구성/설계 Architecture
-
Server - Agent
관리자가 master에 명령을 내리면 알아서 Agent에 전달
:one:Master
-
etcd
모든 데이터 저장
빨라야 함
-
API server
etcd와 유일한 통신
상태를 바꾸거나 조회
권한 체크
-
scheduler
Pod을 적절한 노드에 배치하는 역할
-
Controller
많은 상태 체크
조회 흐름
Controller -> API Server(권한 체크) -> etcd(정보 조회 & 정보 전달) -> API server -> Controller
:two:Node
-
proxy
부하 분산
-
kublete
Podt 생성, 삭제
-
container (Pod)
다양한 컨테이너 지원
-
-