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
기술 면접에 나올 수 있는 개념이니 알아두자.
-> 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고받는 것
최근의 클라이언트 - 서버 애플리케이션에는 이 개념이 들어가 있다.
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
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 |
댓글