컨테이너에 관련해서 알아볼텐데, 도커를 기반으로 정리할 예정이다.

 

$docker run -it --name docker-test centos:7 bash

 

위와 같이 입력하면 docker-test라는 이름으로 도커컨테이너가 기동이 되며, centos:7 이미지가 로컬에 없으면 원격 레포지토리에서 이미지를 다운로드 한다. 이때 원격 레포지토리는 프라이빗 레지스트리로 사용할 수도 있으며 Harbor와 같은 오픈소스를 이용하기도 하고, AWS ECR같은 퍼블릭 서비스를 이용하기도 한다.

 

docker run과 관련된 옵션은 아래와 같이 있다.

-i 키보드 입력을 표준입력에 연결하여 키보드 입력을 컨테이너의 쉘 등에 보낸다.
-t 대화형 조작이 가능
-d 백그라운로 실행
--name 이름 설정 ( 미설정시 자동 )
--rm 컨테이너 종료시 자동으로 삭제
-p 포트포워딩
-v 볼륨마운트

 

컨테이너 목록은 docker ps 를 사용해서 출력한다.

다만 이미 종료된 목록은 -a 옵션을 주어야 한다.

 

docker id나 name을 통해서 stop, restart, start, logs, rm 명령어를 실행할 수 있다.

 

로컬에서 만든 이미지나 다운받은 이미지를 원격 레포지토리에 보관하는 경우 push를 사용할 수 있으며,

프라이빗 저장소를 사용한다면 사전 설정이 필요하다 harbor 같은 경우 아래 공홈을 참고하자

https://goharbor.io/docs/1.10/working-with-projects/working-with-images/pulling-pushing-images/

 

그리고 버저닝 관리와 운영의 편의성을 위해 태그를 붙이는 것을 추천한다.

docker tag 명령어를 사용한다.

'쿠버네티스' 카테고리의 다른 글

도커컨테이너 만들기  (0) 2022.08.01
도커 다루기  (0) 2022.08.01
쿠버네티스의 기본 구성  (0) 2022.07.26
1. 쿠버네티스 설치 ( rancher 이용 )  (0) 2022.07.19
[docker] 내가 헷갈리는 docker 정리  (0) 2021.05.03

1. 먼저 아래와 같이 kubectl get pod --all-namespaces를 하면 모든 pod들이 나열된다.

일단 위에 대한 설명을은 천천히 뒤에서 하기로 하자.

 

먼저 쿠버네티스의 기본적인 아키텍처를 보면 아래와 같다.

https://kubernetes.io/ko/docs/concepts/overview/components/

중요한 것들을 살펴보면 크게 

- master node, worker node 

- pod

- service

- ingress

- kube-apiserver

- kube-scheduler

- kube-controller-manager

- kubelet

- kube-proxy

- etcd

- coredns

- CNI ( flannel, calico 등 )

- metrics-server 

이 외에도 아주 많다. 다보지는 않고 몇개만 살펴보자

 

1. master node , worker node

마스터 노드는 말 그대로 쿠버네티스가 동작하기 위해서 중요한 역할들을 하는 노드이다. 위 그림에서 컨트롤 플레인을 명칭한다. etcd, 스케쥴러, 컨트롤러메니저 등이 기동되고 있으며, 쿠버네티스의 api서버로서 클라이언트의 명령을 받아들이고 실행한다. 또한 파드 스케쥴링 등 여러가지 역할을 하고 있다.

 

2. pod

파드는 컨테이너를 실행하기 위한 최소 단위이다. 파드는 한개 혹은 여러개의 컨테이너를 담을 수 있다.

여러가지 단계가 존재하는데 아래와 같이 공식 홈페이지에 정리되어 있다.

https://kubernetes.io/ko/docs/concepts/workloads/pods/pod-lifecycle/

이러한 pod를 배포하는 전략이 여러가지가 있는데 기본적으로는 롤링업데이트로 되어있다. 아래의 블로그를 보면 많은 도움이 된다. 배포 전략은 서비스의 상황에 맞게 전략적으로 가지고 가야한다.

https://blog.container-solutions.com/kubernetes-deployment-strategies

 

Kubernetes deployment strategies

In Kubernetes there are a few different ways to release an application, it is necessary to choose the right strategy to make your infrastructure reliable during an application update. Choosing the right deployment procedure depends on the needs.

blog.container-solutions.com

pod의 생성을 보자. pod의 생성은 아래 이미지와 같다.

https://blog.heptio.com/core-kubernetes-jazz-improv-over-orchestration-a7903ea92ca

etcd의 역할이 굉장히 중요한데 모든 정보들이 etcd에 write되고 필요할때 read된다고 생각할 수 있다. 중요한 만큼 master node에서 분리한 후 외부 VM에 구축하여 클러스터링하여 운영하기도 한다.

 

이번에는 삭제과정을 간략하게 보자.

https://www.infracloud.io/blogs/kubernetes-pod-lifecycle/

과정을 보면 사용자가 delete 명령어를 날려도 바로 삭제하지 않고 디폴트 30초 기다리는 것을 볼 수 있다. graceful 하게 종료되는 것을 의도한 값이다. 이 값은 30초 이상으로도 셋팅이 가능하며 성능테스트를 통해 적절한 값을 설계해야 한다.

 

아래 그림을 보면 전체적인 느낌을 이해할 수 있다.

 

 

3. 서비스 (service)

서비스는 앞단에서 들어온 요청들을 pod단으로 전달하기 위해 프록시를 구성할 수 있도록 하는 컴포넌트이다.

즉 로드밸런서의 역할을 가지며, 클라이언트 요청을 받기 위한 대표IP주소를 가진다.

아래 그림을 보면 실제로 이 서비스를 통해 어떻게 사용자 트래픽을 받을지에 대한 방법들에 대해 볼 수 있다.

https://medium.com/nerd-for-tech/kubernetes-services-f623c53213ed

 

4. 인그레스 (ingress)

인그레스는 클러스터 외부에서 클러스터 내부 서비스로 접근할 수 있도록 HTTP,HTTPS경로를 노출한다. 

들어온 트래픽 라우팅은 인그레스 yaml에 정의된 규칙에 의해 라우팅된다. 

하지만 이는 규칙만 설정할뿐 실제 고객데이터를 받는 역할을 하지는 않는다. ingress controller가 필요하다.

종류로는 nginx나 kong 등이 있고 aws와 같은 클라우드 회사에서는 ALB ingress같은 상품을 지원하기도 한다.

 

필자는 AWS를 사용하여 운영을 했었는데 ALB ingress는 상당히 사용하기 쉽게 제공되어 운영하기 편리하다.

아래의 아키텍처를 참고해보자

https://aws.amazon.com/ko/blogs/opensource/kubernetes-ingress-aws-alb-ingress-controller/

그림을 보면 Rule에서 /* , /products, /accounts 등 L7 레이어단의 path를 기반으로 분산하도록 설정이 되어 있다. 

이렇게 특정 url path로 들어온 트래픽은 설정된 Target Group으로 넘어가게 되는데, 실제 aws를 이용해보면 타겟그룹별 port를 지정할 수 있고 이것은 node port를 의미하며 해당 node port로 배포되어 있는 pod로 트래픽이 들어가게 된다. 

 

 

5. kube-scheduler

스케쥴러는 이름에서 이해할수 있는 것처럼, pod 생성 요청이 오면 어떤 노드에 생성할지를 스케쥴링하는 역할을 하며 마스터노드에 기동되어 있다.

 

해당 pod를 어떤 노드에 배포할지 정하는 기준은 2가지 단계를 거치게 된다.

1.  필터링

2.  스코어링

필터링은 말그대로 배포할 수 있는 노드들을 골라내는 작업이다 .이렇게 배포 가능한 노드들이 선정이 되면, 내부적으로 설정된 스코어링 방식을 기준으로 가장 우선순위가 높은 노드에 pod를 배포하게 된다.

 

 

 

 

'쿠버네티스' 카테고리의 다른 글

도커 다루기  (0) 2022.08.01
docker 간단 정리  (0) 2022.08.01
1. 쿠버네티스 설치 ( rancher 이용 )  (0) 2022.07.19
[docker] 내가 헷갈리는 docker 정리  (0) 2021.05.03
쿠버네티스 설치 가이드!!  (0) 2020.08.22

다시 마음을 다잡고 시작해 보기로 하자.

 

오늘의 주제는 랜처를 이용하여 쿠버네티스를 설치하는 것.

 

일단 쿠버네티스 하드웨어 최소 스펙부터 확인하자. 아래 랜처 공홈에서 확인.

https://rancher.com/docs/rancher/v2.5/en/cluster-provisioning/node-requirements/

쿠버네티스를 관리해줄 랜처에 대한 하드웨어 스펙도 알아보자.

https://rancher.com/docs/rancher/v1.6/en/installing-rancher/installing-server/

 

 

내 설치환경

- 이미지 : 모두 centos 7

- rancher : vCPU 2 core, 2GB 메모리

- master : vCPU 2 core, 4GB 메모리

- worker : vCPU 2 core, 2GB메모리

- 1 master , 3 worker

 

 

*** 먼저 랜처를 왜 사용하나? 개인적으로는 관리의 목적이 제일 크다고 생각한다.

 랜처에는 여러 플러그인이 있다. 로깅에 사용되는 fluentd, elastic search 도 있고 prometheus도 있다. 물론 세부 설정이 조금 필요하지만 스스로 설치하는 것보다는 편하게 제공한다.

 

또한 ui를 제공하며 시각적으로 보기 좋다, 특히 노드나 pod에 이상이 있는 경우 서버에 직접 들어가여 확인하거나, 쉘스크립트 등을 이용하여 관리목적의 기능들을 만들어야 하지만 랜처에서는 에러를 보여주기에 여러모로 이점이 있지만,

 

항상 어떤 솔루션을 도입한다는건 서버 리소스, 인력 리소스가 더 들어간다는 소리이니 조직의 상황에 따라 잘 적용해야 한다.

 

 

1. 랜처 설치

(requierd : docker)

아래 공홈을 참고하자

https://rancher.com/docs/rancher/v2.5/en/quick-start-guide/deployment/quickstart-manual-setup/

sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher

 한줄이면 rancher기동에 필요한 무언가들을 설치하기 시작한다.

 

이후 서버 URL로 웹접속을 하면 passwd 등록페이지가 나오며 이를 해결하면 아래와 같은 메인페이지가 나온다.

 

2. kubernetes 설치

create를 눌러 클러스터를 등록해보자

GCP를 사용하지만 일반 인스턴스를 생성하고 직접 설치할 예정이라 Custom을 이용할 예정이다, AWS EKS등을 사용한다면 AWS EKS를 사용하면 된다. 환경에 맞게 설치

 

클러스터 이름을 설정한 후 next를 누르면 아래와 같이 etcd, worker, master를 선택하여 설치할 수 있도록 페이지가 나온다.

각 환경에 맞게 체크박스를 선택한 후 나오는 cli명령어를 해당 인스턴스에 가서 실행을 해준다.

 

조금 기다리면 아래와 같이 정상 설치가 된다.

 

하지만 서버에서 kubectl명령어를 치면 나오지 않는다. kubectl설치 필요, 아래를 참고하자

https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/

 

 

'쿠버네티스' 카테고리의 다른 글

docker 간단 정리  (0) 2022.08.01
쿠버네티스의 기본 구성  (0) 2022.07.26
[docker] 내가 헷갈리는 docker 정리  (0) 2021.05.03
쿠버네티스 설치 가이드!!  (0) 2020.08.22
클라우드에 docker 환경 셋팅하기_2  (0) 2020.06.30

+ Recent posts