이열매의 메모장
쿠버네티스 본문
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 |