Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

COCOMO

쿠버테니스 아키텍처 본문

k8s

쿠버테니스 아키텍처

훌라숑 2023. 1. 9. 11:25

Ansible 개념 이해

기존에 동일한 환경의 리눅스를 수정하기 위해 쉘 스크립트에 패키지 설치, 수정된 파일등을 나열하고 스크립트를 실행하는것이 일반적이다.

하지만 데이터 센터 중심의 인프라 환경에서 클라우드 환경으로 변화하고 관리해야 할 서버의 숫자가 급격하게 증가하는 요즘, 동시에 많은 서버에 동일한 환경을 배포하는 상황이 발생했고 이는 쉘 스크립트로 불가능해졌다.

이를 해결하기 위해 나온것이 IaC(Infrastructure as a Code) 이며, 이 개념은 쉽게 말해 컴퓨터의 인프라 구성을 소프트웨어를 개발하는 것처럼 코드로 작성하는 것을 의미한다.

Ansible 또한 IaC 개념이 도입되어 자동화 도구를 이용하여 인프라의 설정을 코드로 작성하고 이를 모든 서버에 배포함으로써 특정 환경을 동일하게 유지할 수 있도록 도와준다.

 

Ansible의 특징

Agentless

  • 다른 자동화 도구들은 타겟 대상들에 Agent 설치를 기반 pull방식으로 동작, 그러나 Ansible은 타겟 대상들에 Agent설치를 하지 않고, push 방식으로 동작한다. 즉, 기술적, 지리적 제한이 상대적으로 넓다.

Idempotency(멱등성)

  • 어떠한 연산이 여러번 수행되어도 그 결과가 달라지지 않는 성질. Ansible에서도 같은 모듈을 반복해서 실행해도 결과가 동일하게 출력됨으로써 멱등성을 일관되게 수행 할 수 있다.

 

Playbook

  • 수행할 스크립트를 보관하는 공간
  • task단위로 스크립트의 뭉치를 정의, docker compose처럼 생각하면 됨
  • 순서가 지정된 task목록을 저장

task

  • Ansible의 작업 단위

Module

  • Ansible이 실행하는 코드 단위
  • 단일 모듈 호출 또는 플레이북에서 여러 모듈 호출도 가능

Inventory

  • 매니지드 노드에 대한 목록, ip, 호스트정보, 비밀번호 관련 저장

Managed Hosts(매니지드 노드)

  • Ansible을 이용해 관리하고자 하는 서버
  • 매니지드 노드에는 Ansible이 설치되지 않음
  • ssh를 통해 접속이 가능

Ansible Control Node(제어노드 또는 컨트롤 머신)

  • Ansible을 설치하고 실행하는 노드
  • 원격으로 관리 노드 제어
  • 어디에 접속할지 ip주소를 등록해야한다.

 

 

Pod란?

  • 1개 이상의 컨테이너 묶음으로 이루어진 논리적인 객체
  • 컨테이너를 격리된 네트워크 공간으로 격리.
  • 쿠버네티스의 가장 기본 실행 단위

Kublet이란?

  • 컨테이너 기술과 함께 pod를 생성 및 삭제하는 바이너리 실행파일.
  • system deamon 형태로 동작.
  • 주기적으로 /etc/Kubernetes/manifests 디렉토리의 yaml파일을 읽어서 Pod를 생성

 

 

 

  • Kubernetes 노드는 kubelet이 반드시 설치되어 있어야 한다.
  • Kubernetes는 Master & Worker 구조로 동작하는 시스템
  • kubeadm 이라는 별도 툴을 설치하여 Master & Workder 클러스터링을 진행한다.
  • kubeadm 명령어를 통해 Master 노드를 구성한다.
    • kubeadm init
    • /etc/kubernetes/mnifests 디렉토리 안에 4개의 yaml 파일을 다운로드
    • kublet이 주기적으로 파일을 읽어서 새로 배치된 4개의 yaml 파일을 기반으로 Pod를 생성한다.
    • 이것을 마스터 노드라고 한다.
  • Master 서버에 Pod를 배포했지만, 정상적으로 동작하지는 않는다. CNI를 설정해주어야 한다.
    • Container Network Interface
    • Container 의 묶음인 Pod 네트워크 구성 방식
    • kubernetes는 기본적으로 kubenet 이라는 네트워크를 사용하지만, 제한적인 네트워크 구성 기능과 속도가 느리다, 따라서 일반적으로 3rd-party CNI 플러그인을 사용한다
    • CNI 종류
      • Flannel, Calico, Weavenet , NSX
  • Worker 서버들을 Master 서버에 Join한다
    • kubeadm을 활용하여 Master 에 Join한다
  • Kubernetes cluster 설치가 완료되면, 더이상 kubeadm은 활용되지 않는다.
  • ${home}/.kube/kubeconfig 파일은 API Server와 통신하기 위한 인증서 파일이다.
  • kubectl은 API Server와 통신하기 위한 CLI 바이너리 이다.
    • kubectl을 설치하고 k8s Cluster 인증서 파일을 복사 및 붙여넣기 하면 클러스터 외부에서도 kubernetes에 CLI접근이 가능하다.

 

 

아키텍처 flow

  • 쿠버네티스 클러스터 외부에서 kubectl이라는 바이너리를 깔았으며 인증서 파일을 배치시켜 놨다.
  • kubectl을 통해서 api서버에 pod배치 계획을 전달할 수 있다.
  • api서버는 etcd에 저장하고 저장된 etcd데이터는 컨트롤러에 의해 검토
  • 스케쥴러에 의해 배치계획을 실행
  • 워커노드에게 pod를 배치 및 실행

 

 

CRI란?

컨테이너 런타임 인터페이스(CRI)

  • 클러스터 컴포넌트를 다시 컴파일 하지 않아도 kubelet이 다양한 컨테이너 런타임을 사용할 수 있도록 하는 플러그인 인터페이스
  • 클러스터의 모든 노드에 동작 중인 컨테이너 런타임이 존재해야, kubelet이 pod들과 컨테이너들을 구동할 수 있다.
  • 컨테이너 런타임 인터페이스(CRI)는 kubelet과 컨테이너 런타임 사이의 통신을 위한 주요 프로토콜이다
  • 클러스터 컴포넌트 kubelet과 container runtime사이의 통신을 위한 주요 gRPC 프로토콜을 정의한다

 

 

OCI(Open Container Initiative) 는 컨테이너 포맷과 런타임의 표준

'k8s' 카테고리의 다른 글

쿠버네티스 CORE CONCEPT 2  (0) 2023.01.24
쿠버네티스 CORE CONCEPT  (0) 2023.01.11
Iac 정복하기  (0) 2023.01.09
Docker Container 정복하기  (0) 2022.12.08
Container 서비스 이해와 Docker 활용  (0) 2022.12.07
Comments