쿠버네티스 입문 - 1, 2챕터

최시원·2023년 2월 14일
0

쿠버네티스 입문

목록 보기
1/7

컨테이너?
리눅스의 cgroup(프로세스별로 자원 격리 기능)과 chroot(특정 디렉터리로 권한 제한 기능) 등으로 격리 환경 구성 +
디스크의 파일 변경 사항을 레이어 형태로 저장하는 파일 시스템을 합하여 태어난 개념
도커는 이러한 기능을 모아 컨테이너를 쉽게 사용할 수 있도록 한 것

컨테이너와 가상 머신의 구조 차이
가상 머신은 하이퍼바이저 위에 가상머신마다의 게스트 운영체제가 있음
컨테이너는 호스트 운영체제 위에 ‘도커’가 있고, 그 위에 바로 앱이 위치한다. 훨씬 간단하여 성능을 높이기 쉽다

실제 서비스는 서버 하나만 운영하지 않는다. 컨테이너 이미지를 만들고 여러대 서버에 컨테이너를 배포하는 과정을 수동으로 할 것인가? 여기에 컨테이너 오케스트레이션 시스템의 도움을 받아야 한다.
이 시스템으로 클러스터*를 구성하면, 서버가 몇 대든 컨테이너를 한번의 명령으로 자동 배포할 수 있다. 또 클러스터 일부에 장애가 생긴다면, 오케- 시스템은 알아서 장애 서버의 컨테이너들을 정상 서버로 옮겨 실행한다.

*클러스터 : 여러대의 서버를 묶어 시스템 하나로 구성하는 방식

쿠버네티스의 특징
1. 선언적 API
‘컨테이너가 어떤 상태이길 원하는지’ 만 쿠베에 설정하면 지속해서 컨테이너의 상태를 확인한다.
2. 워크로드 분리
분산 시스템 개발시 마치 운영체제처럼 분산된 프로세스 관리를 추상화하는 레이어의 역할을 한다.
3. 어디서나 실행가능
개인 컴퓨터, 여러 대 서버, 퍼블릭 클라우드, 웹 등 실행이 자유롭다
4. 커뮤니티
공식 깃헙 슬랙 채널 페이스북 그룹 등의 여러 커뮤니티 존재

설치해보자
웹에서 그냥 사용하는 방법
1. Katacoda kubernetes playground
2. play with kubernetes

설치하기 – 도커 데스크톱
이미 설치되어있음
powershell에 docker version 명령어 입력하니 정상작동
Enable kubernetes 설정은 체크되어있지 않아 체크했다.
이후 kubectl version, kubectl get pods -n kube-system 명령어 실행 결과

쿠버네티스 클러스터를 구성하고 관리하는 데에는 '관리형 쿠버네티스 도구'를 이용하는것이 가장 간단하다.
1. 구글 쿠버네티스 엔진
2. 아마존 쿠버네티스 일래스틱 컨테이너 서비스
3. 애저 쿠버네티스 서비스

하지만 직접 쿠베 클러스터를 구성해야 한다면?
-> kubeadm, kubespray를 이용하자

kubeadm?
k8s에서 공식 제공하는 클러스터 생성/관리 도구

kubeadm에서의 고가용성 클러스터 구조에 대한 간략한 설명
여러 대의 마스터 노드 + 로드밸런서
워커 노드가 마스터 노드에 접근할 땐 로드밸런서를 거치며, 마스터 1대에 장애가 발생해도 로드밸런서가 다른 마스터 노드로 접근을 돌려주어 클러스터의 신뢰성을 유지함.

지원 명령어) init, join, upgrade, config, reset, token, version

kubespray?
상용 서비스에 적합한 보안성, 고가용성이 있는 쿠베 클러스터를 배포하는 '오픈소스' 프로젝트
서버환경 자동화 도구인 ansible 기반. on-premise 환경에서 상용 서비스의 쿠베 클러스터를 구성할때 유용함

kubespray에서의 고가용성 클러스터 구조에 대한 간략한 설명
kubeadm과는 다르게 별도 로드밸런서를 쓰지 않고, 노드 각각의 nginx가 리버스 프록시(클라이언트 요청을 대신 받아 내부 서버로 전달해주는 것)로 실행됨
그래서 쿠베 컴포넌트들은 직접 마스터노드와 소통하지 않는다. 대신 자신 서버 안의 nginx와 통신함. 장애 감지는 헬스 체크를 통해 nginx가 알아서 처리한다

kubespray는 네트워크 플러그인을 지원한다. 해당 교재에서는 퍼블릭 클라우드에서 기본 네트워크 플러그인으로 사용하는 calico를 사용할 것

실습 - 쿠버네티스 클러스터 구성하기
마스터 노드(서버) 3대, 워커 노드(서버) 2대로 구성
마스터 노드의 역할 : 노드들의 상태를 관리/제어함. k8s의 데이터 저장소로 사용하는 etcd를 함께 설치하거나 별도 노드에 분리해 설치하기도 하는데, 여기서는 함께 설치한다
마스터를 1대만 쓸수도 있지만 보통 고가용성을 고려해 3,5대로 구성한다. 이것이 많다고 큰 성능향상을 기대하긴 어렵다고 하니 3~5대가 적당함

워커 노드의 역할 : kubelet이라고 하는 프로세스(에이전트) 가 동작한다. 마스터노드의 명령을 받아 사용자가 선언한 pod나 job을 실제로 실행한다.

먼저 구글 클라우드 플랫폼의 무료 평가판을 이용하여 ubuntu 인스턴스 5개 만들기

SSH 키 생성(RSA방식의 암호화)

메타데이터 메뉴에 들어가 SSH 키 추가를 통한 VM인스턴스 SSH 공개키 배포

instance-5에 SSH공개키가 배포된 모습

SSH 원격 명령 테스트. ins-1 에서 ins-2에게

명령어를 진행하던 중 sudo pip install -r requirements.txt 명령에서 오류가 떴다.
requirements.txt의 내용이 책에 소개된 것과 다르길래 다음과 같이 책 내용과 똑같이 맞추어 진행했다

그래도 다음과 같은 오류가 뜨고, ansible --verison 명령어 실행시 아무것도 뜨지 않길래 그냥 sudo apt install ansible을 사용하여 ansible을 설치하였다

버전이 2.5.1로 다르지만 그냥 진행하였다.

0개의 댓글