* Pod라는 공간을 만들어서 그 안에 컨테이너를 올리는 게 Kubernetes
근데 우리는 이미지 파일이 안 올라가서 난리였음 (지난 수업 복습합시당)
암튼 이것도 똑같은 역할을 하는데 확장이 안됨 미니자나~
* YML 파일 역할

Kops(Kubernetes Operation)

클라우드 플랫폼에서 쉽게 K8s를 설치할 수 있도록 도와주는 오픈소스

  • kOps는 서버 인스턴스와 네트워크 리소스 등을 클라우드에서 자동으로 생성해 K8s를 설치 → 쿠버네티스 클러스터를 간단한 CLI 명령을 통해 생성, 관리, 업그레이드, 삭제를 할 수 있도록 지원 (자동화 툴)

  • Mater node와 Worker node를 사용자가 관리하고 설치하는 방식

👉 KOPS를 기반으로 클라우드 플랫폼 상에 Kubernetes 환경을 구축한다

특징
* 고가용성 Kubernetes 클러스터 프로비저닝 자동화
* 테스트 실행 및 자동 멱등성을 위한 상태 동ㅋ기화 모델을 기반으로 구축
명령줄 자동 완성
* YAML 기반 API 구성

KOPS 아키텍처 그림 출처

  • Pod하나 당 여러 개의 컨테이너를 올릴 수 있다 (도커 사용)
  • 네트워크 환경 상의 리소스를 사용해서 kube-proxy가 각 컨테이너에 연결해주는 방식으로 생각됨
  • Master Node의 API Server를 통해 Worker Node의 kubelet과 통신(명령)/제어, 각 Pod의 container에 연결되는듯함

웹 기반 서비스 활용

* 환경 구성 없이 바로 사용할 수 있다

Killercode

로컬 환경에 설치 없이 웹에서 쿠버네티스 실습이 가능하다

  • 60분 동안 실습 가능 ㅎㅎ
  • 마스터 노드 1개, 워커 노드 1개

Play with Kubernetes

웹 기반의 쿠버네티스 사용 가능한 환경 제공

  • Docker에서 제공
  • 4시간 제한 ㅎㅎ
  • 여러 개의 인스턴스를 생성할 수 있다 → 생성된 인스턴스 중에서 마스터 노드 설정 후 마스터노드와 워커 노드 연결 (명령어를 통해서 실행)

노드(Node)

쿠버네티스는 컨테이너를 파드 내에 배치하고, 노트에서 실행함으로서 워크로드를 구동하는 방식

  • 노드: 클러스터에 따라서 가상 또는 물리적 머신
    👉 각 노드는 컨트롤 플레인에 의해 관리되며 파드를 실행하는데 필요한 서비스 포함
  • 노드 = 쿠버네티스의 워커머신
  • 각각의 노드는 마스터에 의해 관리
  • 노드는 여러 개의 Pods를 가질 수 있고, 하나의 노드가 여러 IP를 가지고 있다
    👉 컨테이너 기반이기 때문!
  • 하나의 Pod는 하나의 IP만 가지고 kubelet이 Pod들을 관리한다
    👉 kubelet 안에 iptables가 있다...? 라고 하신 것 같음 근데 그래야 노드 안에 있는 pod를 관리할 수 있을 것 같다

Kubelet

🌟 쿠버네티스와 마스터 노드 간의 커뮤니케이션Pods와 컨테이너를 담당하는 역할

  • 각 노드에서 실행되는 에이전트 (띄워져있는 서비스, 기본적으로 설치되어있다)
  • 쿠버네티스를 통해 생성되지 않는 컨테이너는 관리하지 않는다

kube-proxy

클러스터의 각 노드에서 실행되는 네트워크 프록시 (쿠버네티스의 서비스 IP를 Pod IP로 변환해주는 역할 → 로드 밸런서)

  • 노드의 네트워크 규칙을 유지 관리
  • 이 네트워크 규칙이 내부 네트워크 세션이나 클러스터 외부에서 파드로 네트워크 통신 가능

컨테이너 런타임

컨테이너 실행을 담당하는 소프트웨어

  • 레지스트리에서 이미지를 가져와서 unpacking 후 App 실행시키는 역할
    👉 도커를 기동할 수 있도록 도와주는 역할임 (도커를 기동하는 엔진을 가지고 있다)
  • 이미지의 레파지토리를 관리하고 있다

배포 (Deployment)

Pod와 ReplicaSet에 대한 선언적 업데이트 제공

  • 디플로이먼트에서 의도하는 상태를 설명
  • 쿠버네티스가 애플리케이션의 인스턴스를 어떻게 생성하고 업데이트 해야 하는지를 지시한다
  • 디플로이먼트가 만들어지면, 쿠버네티스 컨트롤 플레인이 해당 디플로이먼트에 포함된 애플리케이션 인스턴스가 클러스터의 개별 노드에서 실행되도록 스케쥴...
  • 디플로이먼트 컨트롤러가 지속적으로 인스턴스 모니터링

오... 개어려움 이거 머야

Node에 있는 각각의 인스턴스는 노드만 본다
디플로이먼트는 Pod를 관리하는 실질적인 역할을 해준다

Pod와 그 안의 인스턴스를 기동하고 관리하는 역할
디플로이먼트가 레플리카셋을 관리하며 앱 배포를 더 세밀하게 관리하는 것

정말... 많은 역할을 한다...

서비스(Service)

Pod들에 Set을 논리적 개념으로 정의한 것

  • Pod는 제각각의 IP를 가지지만 클러스터 밖으로 노출되지는 않는다
    👉 Pod는 서비스를 통해 외부로 노출되게 되며, App이 실질적으로 트래픽을 받게 해주는 역할이다
    👉 Pod는 직접적인 접근 불가! 서비스를 통해서 접근이 가능하다
  • 파드와 파드 사이의 논리적 브리지 역할
  • 스펙 안에 타입을 명시함으로써 여러 방법으로 노출 가능한 구조

쿠버네티스의 객체들에 대해 논리연산을 허용해주는 기본 그룹핑 단위인 Label... 이라는 것이 있다? -- Label로 네이밍해서 이거로 서비스를 찾는거임! 말이 어렵군...

kubectl expose 명령어 👉 외부에서 엑세스 할 수 있도록 파드에 대한 새로운 서비스 생성

서비스를 생성하면 파드에 대한 엔드포인트가 생성된다

  • ClusterIP
  • NodePort
  • LoadBalancer
  • ExternalName

파드(Pod)

여러 App 컨테이너 그룹을 추상화 한 개념

  • 원자적인 단위 👉 하나 죽으면 다같이 내린다
  • 쿠버네티스의 Deployment → 컨테이너를 직접 만드는 것이 아니라 컨테이너를 가진 Pods를 생성한다!
  • App에 특화된 논리적은 호스트를 모델링한 것
    👉 App 컨테이너들을 Pod 안에 담을 수 있다
  • Pod 안에 들어있는 컨테이너들은 IP Address와 port 정보를 공유하며 스케쥴링 되는 방식

Deployment는 Pod와 연관이 되어있다...! 고 하셨당...
👉 Deployments를 사용할 때, 이미지 버전을 업데이트하면 Pod가 종료되거나, 새로운 Pod가 이전 Pod를 대체하는 방식

Pods는 라이프사이클로 운영되는데 아무래도 Node에 담겨있다보니... Worker노드가 죽으면 당연히 Node 안에서 실행되는 Pods 역시 죽는다

POD Lifecycle

  • livenessProbe : 컨테이너가 정상적으로 작동하지 않으면, 컨테이너를 재시작해서 문제 해결 옵션
  • readinessProbe : 컨테이너가 제대로 작동하지 않으면 Pod로 들어오는 요청 제외 옵션

본 포스팅은 글로벌소프트웨어캠퍼스와 교보DTS가 함께 진행하는 챌린지입니다.

profile
영차영차 😎

0개의 댓글