-
# 워밍업
- Iaas : Virtual Servers
- CaaS : Containers
- PaaS : CF Apps
- 마이크로서비스 아키텍쳐(MSA) : 소프트웨어 응용 프로그램을 독립적으로 배포 가능한 서비스의 묶음 형태로 설계하는 방식
- 마이크로서비스 컨셉 : 서비스등록, 관리, EndPoint, Helthcheck 등등
# 컨테이너 개념
- S/W 실행에 필요한것을 패키지로 구성하여 표준화된 하나의 독립 컨테이너에 저장
- VM과 달리 컨테이너는 전체 OS가 아닌 S/W 필요로 하는 라이브러리와 설정만 포함
# Linux Container
- 단일 리눅스 호스트에서 컨테이너 독립실행을 위한 OS가상화 기술
- 리눅스 Kernel의 cgroups, namespace를 공유
- 파일 실행은 호스트에서 직접 실행하여 빠르다.
# Docker Container
- Software Container Platform
- 리눅스 컨테이너 기술 적용한 Docker Engine.
- Docker Hub Registry를 통한 Docker Image 관리
- Docker Mission : 어디서나 빌드해서 배포, 사용할 수 있도록 한다.
# Docker image
- 서로 다른 Container를 독립적으로 실행한다.
# Container Orchestration
- 안정적인 서비스를 목표로 하는 운영체계에서 단순한 방법이 아닌 보다 체계적으로 관리한다.
- 스케줄링 : 어떤 컨테이너를 살리고 죽일것인가?
- Cluster 관리
- 서비스 Discovery : 올린 서비스들이 어디 있는가?
- 모니터링
- 설정
# Container Orchestration Players
# Kubernetes- 컨테이너 오케스트레이터 (실행 및 관리)
- 다양한 클라우드 및 베어 메탈 환경 지원
- Google Borg에서 시작되어 오픈 소스화됨
- 100% Go 언어로 작성
# Kubernetes 특징
- Automatic binpacking : 가용성에 대한 희생 없이, 리소스 사용과 제약 사항을 기준으로 자동으로 켄테이너를 스케줄링
- Self-healing : 자동으로 문제가 발생한 노드의 컨테이너를 (대체/정책에 따른 헬스체크)
- Horizontal scaling : CPU와 메모리와 같은 리소스 사용에 따라 자동으로 애플리케이션을 확장
- Service discovery and Load balancing : Container에 고유한 IP를 부여, 어러개의 Container을 묶어 단일 Service로 부여하는 경우 단일 DNS name으로 접근하도록 로드 밸런싱을 제공.
- Automatic rollouts and rollbacks : 다운타임 없이 애플리케이션의 새로운 버전 및 설정에 대한 롤아웃/롤백
- Secret and configuration management : 비밀번호, 설정정보를 이미지와 독립적으로 구분하여 별도의 이미지 재생성 없이 관리
- Storage orchestration : 저장소 솔류션
- Batch execution : CI 워크로드와 같은 Batch성 작업 지원 crontab 형식으로 스케쥴링도 가능
#Kubernetes 아키텍쳐
- Node (Work node)
- Container Registry : 컨테이너 이미지를 저장하는곳
- Master node : (Kubernetes Cluster Control Plan):
Master node
* apiserver : cluster와 상호 작용을 위해 API서버가 명령을 받아 전달한다.
* scheduler : Worker에게 어떻게 실행할지 지정
* controller-manager : Deployments나 replication Controller등 관리한다.
* cloud-manager : public cloud provider 연동 관리
* etc : manster cluster 에서 k8s object 저장소로 사용, 설정정보, 데이터
Worker Node (Minion)
- Container runtime : 컨테이너 실행을 위한 docker engine 포함
- Kebelet : Master의 명령 수행을 위한 k8s 에이전트, 명령을 실행시키는 역할
- Kube-proxy : 요청이 어떤 Container에게 전달할지를 전달하는 역할
- cAdvisor 리소스 사용/통계를 제공, 여유로운지, 바뿐지
[Worker node]
- 외부에서 들어온 요청은 Ingress Controller을 통해 수행되고 Kube Proxy에게 전달된다.
- 내부에서 들어온(Master을 통해 들어온) 명령은 각 Worker의 kubelet을 통해 수행되며(Pod 삭제, 생성등등) 상태 관리는 cAdvisor사용한다.
Ingress Controller
- 외부에서 들어오는 모든 요청은 Ingress을 통해 수행된다.
Kubernetes Object Model
- k8s object에 대한 manifest를 YML형식으로 작성한다.- Master 노드의 API Server를 통해 클러스터에 k8s object 생성
Basic object
Pod
- Worker 노드에서 실행되는 컨테이너의 집합 (보통 한개의 Pot에 하나의 Container을 올린다)- 각각의 pod는 고유한 IP가 할당됨 (내부 IP)- 하나의 pod내에서는 PID namespace, network와 hostname을 공유, 즉같은 서버처럼 보인다.- 하나의 pod에는 한개 이상의 서비스로 지정 될 수 있음, 내부에서는 pod끼리 접속이 가능하지만 외부에서 접근할 수 있도록 하기위해 서비스로 묶는다.Service
- Lable Selector로 선택하여 하나의 endpoint로 노출되는 pod의 집합- 종류 : ClusterIp, NodePort, LoadBalancer, externalNameWorker노드안에 Pod이 있고 그안에 Container App이 있다. kubeproxy을 통해 접속하게 된다.
그러나 하나하나의 Pod 정보를 외부에서 알수 없다.
그래서 서비스를 노출시켜서 서비스안에 있는 Node에 접속하게된다.
여러개의 Pod을 외부에서 쉽게 접근하도록 Service가 존재한다. (외부로 노출시키고 내부로 접근할 수 있도록)
Ingress
- 도메인 또는 Path에 따라 Pod에 접근할 수 있도록 한다.- 서비스에 대한 L7(애플리케이션 레이어) 라우터 저으이- 사용자가 직접 서비스에 접근하지 않고 ingress를 통해 접근ConfigMap
- Pod에 담겨진 Container에서 사용되는 구성 값- 환경 설정값Secret
- 컨테이너에서 읽혀지거나 사용되는 민감한 정보- 수동으로 secret을 생성 하고 연결하여 사용한다.- Base64로 encoding될 뿐 암호화 되지는 않음- Volume으로 연결된 File 형식 또는 환경변수 형식으로 사용가능Volume
- 도커는 host path에 연결하고 쿠베는 Worker node path에 연결한다.- Pod에 연결되어 디렉토리 형태로 데이터를 저장 할 수 있도록 제공- Pod의 Container들끼리 공유- Pod와 Life-cycle이 동일하게 적용되어 Pod삭제 시 같이 사라짐- Volume type : emptyDir, hostpath, nfs, iscsi, cephfs, gitRepo, secret 등등PersistentVoume (PV)
- 영구적인 데이터를 저장하기 위해 사용Namespace
Controllers
- ReplicaSet
- Replication Controller 새로운 버전- 사용자의 요청에 따른 Pod의 숫자를 유지하고 관리한다.- 각각의 Pod가 필요로하는 정보 명세가 있는 template을 이용한다.- DeploymentController
- pod의 배포 및 관리에 사용- ReplicaSet을 자동으로 생성- Pod에 대한 rolling 업데이트 관리ReplicaSet vs Deployment- ReplicaSet은 같은 역할을 하는것을 몇개를 만들어서 쓸지 결정한다. 즉 API 서버 10개!- 새로운 버전이 생겨서 v2가 생겼다고 가정하면 하나하나 ReplicaSet을 변경하기 불편하니 새로운 ReplicaSet(v2)을 만든다- 결국 이렇게 ReplicaSet의 집합을 관리한다.- API서버를 가장 대표하는것은 Deployment이다 즉, Deployment > ReplicaSet > Pod > Container- StatefulSets
- Deployment와 유사하나 pod별 고정된 identity(name, network id 등) 할당- 고정된 정보, 고정된 IP, Volume, Pod수를 보장한다.- DaemonSet
- 로그 수집 및 각 노드마다 동일하게 포함되어야될것들을 정의한다.- Garbage Collection
- Jobs
- 일회/다회성으로 돌고 끝내는것들- CronJob
-Kubernetes Tools
Kubectl : k8s 클러스터 관리를 위한 CLI 도구kubeadm : 무리 서버, 클라우드 서버 또는 가상머신에서 k8s 클러스터 구성을 쉽게 할 수 있도록 도와주는 CLI도구kebefed : 연합 클러스터 운영을 위한 CLI도구minikube : 개발, 테스트 목적으로 만들어진 도구Dashboard : Web UI 기반의 k8s 대시보드Kubernetes Helm : k8s Chart 패키지 관리 (조회, 설치, 갱신, 삭제)Kompose : docker의 compose 비슷'쿠버네티스' 카테고리의 다른 글
kubernetes disable HSTS(Strict-Transport-Security) (0) 2019.10.02