시작하기

프로덕션 환경(상용)

####프로덕션 고려사항
가용성: control과 worker 노드 분리
스케일링: 필요한 만큼 용량(capacity)
보안 및 접근 관리
서버리스
관리형 컨트롤 플레인
관리형 워커 노드
통합성

프로덕션 클러스터 구성

컨트롤 플레인
배포 도구 선택:kubeadm, kops, kubespray, 컨테이너 런타임
인증서 관리: PKI 인증서 및 요구 조건 확인
apiserver 로드벨런서 구성(외부 로드벨런서 생성하기)
etcd 서비스 분리 및 백업: 추가 실행, etcd 데이터베이스 벡업(etcd 클러스터 운영, 고가용성 etcd 생성)
다중 컨트롤 플레인 시스템 구성:최대 3대 머신 실행
다중 영역 확장
구동 중 기능 관리

워커 노드
노드 구성 및 검증
클러스터에 노드 추가
노드 스케일링
노드 자동 스케일링
노드 health 체크 구성

프로덕션 사용자 관리

인증: apiserver를 이용하여 사용자 인증 가능
인가: RBAC(역할 기반 접근 제어), ABAC(속성 기반 접근 제어) 둘 중 하나 선택

컨테이너 런타임

파드가 노드에서 실행될 수 있도록 클러스터의 각 노드에 컨테이너 런타임을 설치
kubelet과 컨테이너 런타임이 cgroup 드라이버(cgroupfs, systemd)를 사용해야 한다
containerd
CRI-O
도커 엔진
미란티스 컨테이너 런타임

설치 방법

kubeadm으로 클러스터 구성하기

필수 포트 확인
컨테이너 런타임 설치
kubeadm, kubelet 및 kubectl 설치
cgroup 드라이버 구성
kubeadm API로 컴포넌트 사용자 정의하기
ClusterConfiguration의 플래그로 컨트롤 플레인 사용자 정의하기

kOps로 쿠버네티스 설치하기

클러스터 구축(AWS에 클러스터 생성)

Kubespray로 쿠버네티스 설치하기

클러스터 생성하기
클러스터 스케일링하기
클러스터 업그레이드 하기

개념

쿠버네티스란 무엇인가?


쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼
쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래
전통적인 배포 시대: 한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당의 문제가 발생
가상화된 배포 시대: 단일 물리 서버의 CPU에서 여러 가상 시스템 (VM)을 실행, 가상화를 통해 일련의 물리 리소스를 폐기 가능한(disposable) 가상 머신으로 구성된 클러스터로 만들 수 있음
컨테이너 개발 시대: 컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유
기민한 애플리케이션 생성과 배포
지속적인 개발, 통합 및 배포
가시성(observability)
개발, 테스팅 및 운영 환경에 걸친 일관성
클라우드 및 OS 배포판 간 이식성
애플리케이션 중심 관리
느슨하게 커플되고, 분산되고, 유연하며, 자유로운 마이크로서비스

클러스터 아키텍처

노드

쿠버네티스는 컨테이너를 파드내에 배치하고 노드 에서 실행함으로 워크로드를 구동한다.

관리

API 서버에 노드를 추가하는 두가지 주요 방법이 있다.
1.노드의 kubelet으로 컨트롤 플레인에 자체 등록
2.사용자(또는 다른 사용자)가 노드 오브젝트를 수동으로 추가

노드 이름 고유성

이름은 노드를 식별한다. 두 노드는 동시에 같은 이름을 가질 수 없다. 쿠버네티스는 또한 같은 이름의 리소스가 동일한 객체라고 가정한다.
수동 노드 관리
kubectl을 사용해서 노드 오브젝트를 생성하고 수정할 수 있다.

노드 상태

노드의 상태는 다음의 정보를 포함한다.
주소
컨디션
용량과 할당가능
정보

하트비트

쿠버네티스 노드가 보내는 하트비트는 클러스터가 개별 노드가 가용한지를 판단할 수 있도록 도움을 주고, 장애가 발견된 경우 조치를 할 수 있게한다.
노드에는 두 가지 형태의 하트비트가 있다.
노드의 .status에 대한 업데이트
kube-node-lease 네임스페이스 내의 리스(Lease) 오브젝트. 각 노드는 연관된 리스 오브젝트를 갖는다.

컨트롤 플레인-노드 간 통신

0개의 댓글