ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [산대특] Vagrant kubectl, yaml, Core Process, Component, API
    [산대특]클라우드기반 빅데이터 활용 정보 시스템보안과정/Cloud 2024. 11. 11. 17:37

    1111

     

    Vagrant 로 만든 Kubernetes 환경에서 가상 노드들에 대한 정보를 보는 명령어

    master 노드에서 kubectl get nodes -o wide

     

    master node == Control-Plane

    ssh로 접속해서 작업할 수 있다. 

    master node 에서는 pod 가 실행되지 않는다.

     

    Yaml 파일을 잘 다뤄야 Kubernetes 를 잘 다룬다고 할 수 있다. 

    apiVersion 오브젝트의 API 버전
    kind 리소스의 종류표시, kubectl api-resources로 확인 가능
    metadata 라벨, 주석, 이름 등의 리소스 부가정보 표시
    spec 리소스 생성을 위한 정보 입력

    yaml 파일은 위의 항목 등들로 구성됨

     

    kubectl apply -f ~.yaml  파드 생성
    kubectl delete -f ~.yaml 생성했던 모든 파드 삭제
    kubectl delete pod pod_이름 파드 지정 삭제

     

    Name Space = 파드 내의 컨테이너들에게 고유한 작업환경을 제공하며 서로 공유함. 

    -> 내부 주소로 서로 통신이 가능하다. 

     

    Nginx 웹 서버와 로그 정보 등을 모으는 MySQL 을 연결해서 구축해야할 때,

    하나의 컨테이너에 실행시키면 무거울 수 있으니, 한 파드 안에 두 개의 컨테이너를 실행.

    NginX 를 보조 컨테이너로 설정(sidecar)

     

    K8s 구성한 기본 Core Process 용어

    kubectl  쿠버네티스 클러스터를 조작하는 CLI 도구
    kube-apiserver kubectl 등의 API 클라이언트로부터 오는 REST 요청을 검증, API 객체를 구성, 상태를 보고하는 서버
    kube-scheduler 쿠버네티스의 기본 스케쥴러로 새로 생성된 모든 파드에 대해 점수를 매긴 뒤 실행할 최적의 노드를 선택
    etcd 쿠버네티스 클러스터의 모든 관리 데이터가 저장되는 곳

    Kubernetes는 기반 스토리지(backing storage)로 etcd를 사용
    모든 데이터가 etcd에 보관

    무중단으로 Kubernetes 버전을 업그레이드하기 위해, KaaS(Kubernetes as a Service)는
    마스터 노드를 하나씩 삭제하고 교체하는 방식을 사용
    => etcd 서버 일부를 삭제하고 추가하는 작업이 반복,
    안정적인 API의 개발과 운영을 위해 etcd의 동작 원리를 잘 파악해야 한다.
    kubelet 파드와 컨테이너 실행, 파드와 노드 상태를 API 서버에 보고,
    컨테이너의 동작을 확인하는 프로브(probe) 실행과
    내장된 cAdvisor를 통한 매트릭 수집과 공개 등의 일을 하는 관리자적인 명령어
    kube-proxy 각 노드에서 작동, 로드밸런싱을 제공, Service와 파드의 변경을 감지해서 최신 상태로 유지,
    iptables의 규칙을 관리, Service_명과 ClusterIP를 내부 DNS에 등록
    coredns 파드가 Service_명으로부터 IP_주소를 얻는데 사용, 버전 1.11부터 kube-dns 대신 coredns를 사용

    Addon Component 용어

    calico-kube-controllers 네트워크 드라이버 Calico를 위한 컨트롤러, 외부 저장공간 etcd를 사용하게 한다.
    calico-node 모든 노드에서 실행, 노드 간 파드의 통신, 라우팅, 네트워크 접근 관리 등을 제공.
    SDN(Software Defined Network)와 유사한 기능을 수행.
    kubernetes-dashboard 쿠버네티스를 GUI로 관리하게 하는 웹 대시보드.
    kube-flannel 모든 노드에서 실행, 여러 노드 사이에서 IPv4 네트워크를 제공.
    따라서 파드(컨테이너)는 쿠버네티스 클러스터 내부에서 사용되는 IP_주소로
    다른 노드에 있는 파드와 노드를 통해서 통신. 네트워크에 접근제어가 필요하면 Calico를 사용.

    K8s 조작은 API를 통해 이뤄짐. 

    kubectl 으로 Master Node 의 kube-apiserver 에 Yaml/Json 형식의 Manifest 파일로 오브젝트를 생성/변경/제거

    K8s 운영 자동화 -> GoLang 통달시 가능

     

    K8s API 용어

    쿠버네티스 객체
    (Object)
    쿠버네티스 클러스터 내부의 엔티티로서 파드, 컨트롤러, Service 등의 인스턴스를 의미
    각각의 객체는 쿠버네티스API의 리소스 종류(kind로 표시됨)에 맞게 설정되고 생성
    객체를 만들 때에는 kube-systemd으로 네임스페이스에서 유일한 이름을 부여
    워크로드
    (Workload)
    객체의 카테고리를 나타내는 용어, 컨테이너의 실행을 관리하기 위한 컨테이너, 파드, 컨트롤러의 그룹을 의미
    컨테이너
    (Container)
    쿠버네티스에서 컨테이너(이미지)는 독자적으로 실행하는 것은 불가능, 반드시 파드(pod)로 실행
    컨테이너 실행시 이미지_이름, 실행 명령어, 실행 인자, 환경 변수, 볼륨,
    CPU 사용 시간, 메모리 크기의 요청 값과 상한 값 등.. => 최적의 상태에서 실행 가능
    파드
    (Pod)
    컨테이너를 실행하기 위한 객체.
    파드는 한 개 또는 여러 개의 컨테이너를 담을 수 있다.
    컨테이너의 집합으로 볼 수 있다. 각각의 컨테이너는 API나 OS 이미지이다. 
    컨트롤러
    (Controller)
    파드의 실행을 제어하는 객체로서 여러 종류가 있어서 목적에 맞게 사용

    ex) 파드의 개수가 지정된 숫자보다 적으면 자동으로 지정한 개수가 되도록 파드를 늘려서 실행.
    배치처리를 위한 Job(작업) 컨트롤러는 배치(batch) 처리가 종료될 때까지 재실행을 반복.
    설정
    (Configuration)
    컨테이너 내 어플의 설정 값이나 비밀번호 등의 정보는 네임스페이스에서 취득하는 것이 좋다.
    => 설정을 저장하는 컨피그맵(ConfigMap), 비밀번호
    => 기밀 정보를 담기 위한 시크릿(Secret) 객체 등과 같은 설정을 말함.
    Service
    (Service)
    컨테이너 이미지 파드 서버와 외부 클라이언트 노드를 연결하는 역할
    서버 역할을 하는 파드가 대표 IP_주소(ClusterIP)를 취득하여 내부 DNS에 등록,
    외부에서 이 대표 IP_주소로 들어온 트래픽을 부하 분산해서 적절한 파드에게(Label) 나눠주는 역할도 수행
    스토리지
    (Storage)
    파드나 컨테이너는 프로세스.
    실행 시에만 존재하는 일시적 객체, 중요한 데이터를 그대로 저장해서는 안 됨.
    데이터를 잃지 않기 위해서는 퍼시스트 볼륨(Persist Volume)을 사용해 전원이 꺼지거나
    프로세스가 없어져도 데이터를 잃지 않게 하는 외부 스토리지 시스템에 데이터를 저장시켜야 함.
    but, 여러 노드에서 접속 가능한 퍼시스트 볼륨은 NAS와 같은 외부 스토리지 시스템과 연동시켜야 한다.
    (K8s 의 범주에 포함 X)

    K8s Dashborad - GUI 관리 도구

연의 취업 도전기.