본문 바로가기
교육

[99일 차] 21.12.13 : Kubernetes 1

by ballena 2021. 12. 13.

Kubernetes

- 기초 이론

- 쿠버네티스 설치 : Vagrant 환경과 AWS EKS 환경


1교시

 

 

쿠버네티스 환경을 크게 2가지로 구분하셨다.

-> VirtualBox를 사용한 Vagrant 환경

-> AWS의 EKS 서비스를 활용한 환경

 

둘 다 수업 진행

 

 

쿠버네티스 개요는 그동안 많이 들었다.

-> 컨테이너를 관리하는 호스트(노드)를 묶어 클러스터가 되는데, 클러스터 내부 요소 관리를 각각 하는 것은 번거롭다

-> 클러스터링 + 컨테이너 오케스트레이션 = 쿠버네티스

하나의 컨테이너를 관리하는 기술은 아님(= 세부적인 기술은 아니다)

 

다수의 컨테이너를 배포하고, 배포를 받을 노드의 리소스 자원을 모니터링한다.

-> 어느 노드에 컨테이너를 배포하면 좋을지 결정

-> 이용자로 인한 부하의 증가에 유연하게 대처/여러 개의 컨테이너를 효율적으로 통합 관리

 

쿠버네티스는 컨테이너들을 파드(Pod) 단위로 묶어서 배포/관리한다.


2교시

 

 

(워커) 노드 안에 파드들을 두고, 파드 안에 컨테이너를 둔다.

  • 마스터 서버

-> 쿠버네티스 클러스터 안의 컨테이너를 조작하기 위한 서버. kubectl 명령어로부터 요청을 받아 클러스터를 구성/리소스를 조작하는 처리 수행

-> 클러스터 안에 있는 노드의 리소스 사용 상황을 확인하고, 컨테이너를 시작할 노드를 자동으로 선택

 

대충 분산된 노드를 하나의 서버처럼 행동하게 하니 오케스트레이션 도구라는 것이다.

  • 백엔드 DB(etcd)

분산 키 밸류 스토어(KVS)를 사용, 클러스터의 구성 정보 관리. 클러스터 구축을 위한 설정 정보가 있다.

  • 노드(Node)

실제로 컨테이너를 작동시키는 서버. 노드 여러 개로 클러스터 구성

노드의 관리는 마스터 서버가 하며, 노드를 몇 개 마련할지는 시스템의 스펙에 따라 달라진다.

  • 파드(Pod)

여러 개의 컨테이너를 모아 파드로 관리한다. 파드 안에는 일정한 서비스를 수행하는 컨테이너를 모아놓는다.

쿠버네티스에서는 파드가 앱 전개 단위가 되며, 파드 단위로 컨테이너 작성/시작/정지/삭제 등의 조작을 수행

 

쿠버네티스 코어 프로세스

 

  • REST란?

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

 

[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

기술 면접에 나올 수 있는 개념이니 알아두자.

-> 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고받는 것

 

최근의 클라이언트 - 서버 애플리케이션에는 이 개념이 들어가 있다.


3~4교시

 

 

우리가 kubectl을 실행하고, kube-apiserver가 요청을 받아넘기고, kubelet이 수행

 

각 노드는 기본적으로 외부 인터넷이 차단되어 있다.

-> kube-proxy가 들어오게 하는 역할을 담당했는데 이제는 서비스가 담당

 

 

쿠버네티스 API 오브젝트 

- 쿠버네티스 API

- 오브젝트

- 워크로드

- 컨트롤러

- 설정

- 서비스

- 스토리지

 

 

일단 실습을 위한 환경 조성 1 : Vagrant 환경으로 k8s 클러스터링 구성(with VirtualBox)

 

베이그란트, Chocolatey 설치

-> 패키지 설치 : cinst -y curl kubernetes-cli


5~6교시

 

 

베이그란트 명령어 환경 변수 문제로 재부팅

 

베이그란트 명령어는 이것만 알고 있자

vagrant up [vm명] : 현 디렉터리의 Vagrantfile에 기재된 내용을 기반으로 VM 가동

vagrant halt [vm명] : 현 디렉터리의 Vagrantfile에 기재된 내용을 기반으로 가동된 VM 중지

vagrant destroy [vm명] : 현 디렉터리의 Vagrantfile에 기재된 내용을 기반으로 가동된 VM 삭제

vagrant ssh [vm명] : VM을 지정해서 SSH 로그인

vagrant status : 현 디렉터리의 Vagrantfile에 기재된 내용을 기반으로 생성된 VM 상태 확인

 

다 구성했으면 확인

처음엔 이런다

C드라이브 사용자 계정의 경로에 .kube 디렉터리 생성


7교시

 

 

vagrant-kubernetes/kubeconfig/config 파일을 사용자 계정 디렉터리의 .kube 디렉터리로 복사

-> 이제 kubectl get nodes 명령과 kubectl cluster-info 명령 작동

 

kubectl get nodes -o wide로 정보를 보면 노드들의 EXTERNAL-IP가 없다.

-> 외부 통신이 안된다는 뜻

인증 실패로 인한 오류를 예방하기 위해 서버로 직접 들어가서 명령어를 실행하는 것이 좋다.

-> vagrant ssh master

여기서 사용한 이름은 vagrant status로 출력했을 때 확인한 이름

 

 

다른 실습 환경 - AWS EKS

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/getting-started-eksctl.html

 

Amazon EKS 시작하기 - eksctl - Amazon EKS

Amazon EKS 시작하기 - eksctl 이 가이드는 Amazon EKS에서 Kubernetes 클러스터를 생성 및 관리하기 위한 간단한 명령줄 유틸리티인 eksctl을 사용하여 Amazon Elastic Kubernetes Service(Amazon EKS)를 시작할 때 필요한

docs.aws.amazon.com

 

AWS의 컨테이너 서비스들을 사용한다.

 

EKS 배포 구문

eksctl create cluster --name eks-demo --version 1.18 --region ap-northeast-2 --nodegroup-name linux-noded --nodes 3 --nodes-min 1 --nodes-max 4 --ssh-access --ssh-public-key [키페어명] --node-type t3.medium --managed

-> 쿠버네티스 버전 1.18

-> EKS는 t2.micro를 지원하지 않음. 최소가 t3.medium

-> 키페어명은 이름만. 확장자까지는 필요 없다

 

일단 터미널에서 eksctl 설치 : cinst -y eksctl

-> aws configre로 자격 증명을 했다면 위 배포 구문 실행


8교시

 

 

배포는 대충 10분 정도 걸린다.

배포가 끝난 후 .kube의 인증 파일도 수정된다.

kubectl cluster-info로 정보를 보면 달라져있다.

 

다시 Vagrant 환경으로 돌아가고 싶다면

kubectl config get-contexts : 현재 k8s 클러스터 정보 출력

-> Name이 2개 있다. kubernetes-admin@kubernetes가 Vagrant 환경.

kubectl config use-context [Name]

-> 해당 Name의 k8s 환경으로 변경

 

EKS 환경에서 노드 정보를 보면 마스터 노드가 없다.

 

마스터 노드를 제외하면 EKS에는 노드가 3개인데, Vagrant에서는 노드가 2개다.

-> 추가를 원하면 Vagrantfile에서 복붙해서 추가

 

디플로이먼트는 파드의 개수를 유지해주는 역할

 

이제 만든 환경 삭제(EKS)

eksctl delete cluster --name eks-demo

 

vagrant 환경은 halt로 중지하거나 destroy


전반적으로 쓱 다시 들을 부분이 많다.

 

1교시(09:55 ~ 10:10) 쿠버네티스 설명

2교시(10:40 ~ 10:50) 쿠버네티스 구성 설명

        (11:10 ~ 11:30) REST 설명

 

'교육' 카테고리의 다른 글

[102일 차] 21.12.16 : Kubernetes 4  (0) 2021.12.16
[100일 차] 21.12.14 : Kubernetes 2  (0) 2021.12.14
[98일 차] 21.12.10 : Docker  (0) 2021.12.10
[97일 차] 21.12.09 : Terraform 6  (0) 2021.12.09
[96일 차] 21.12.09 : Terraform 5  (0) 2021.12.08

댓글