인공지능 개발자 수다(유튜브 바로가기) 자세히보기

MLOps

쿠버네티스(Kubernetes) 기본적인 사용 방법

Suya_03 2024. 3. 28. 01:25

목차

    반응형

     

    1. 터미널을 열어줍니다.

    쿠버네티스 명령어는 터미널 안에 작성해 주세요.

     

     

    2.  쿠버네티스 기본 구조

    2.1. 클러스터 (Cluster)

    쿠버네티스 클러스터는 여러 컴퓨터(물리적 또는 가상)의 그룹으로, 쿠버네티스를 사용하여 관리됩니다. 클러스터는 컨테이너화된 애플리케이션을 배포, 관리, 확장하기 위한 환경을 제공합니다. 클러스터 내에서 컨테이너는 포드라는 단위로 구성되어 실행됩니다. 클러스터는 고가용성, 고성능, 확장성 등을 제공하여 애플리케이션의 요구사항을 충족시키기 위해 설계됩니다.

    클러스터는 크게 마스터 노드와 워커 노드로 구분됩니다:

    • 마스터 노드: 클러스터의 관리, 스케줄링, 구성 변경 등의 책임을 집니다. API 서버, 스케줄러, 컨트롤러 매니저 등의 구성 요소가 포함됩니다.
    • 워커 노드: 실제로 애플리케이션 컨테이너가 배포되고 실행되는 노드입니다. 포드를 호스팅하며, Kubelet, Kube-proxy 등의 구성 요소가 포함됩니다.

     

    2.2. 노드 (Node)

    노드는 클러스터를 구성하는 개별 컴퓨터(물리적 또는 가상)입니다. 노드는 쿠버네티스에 의해 관리되며, 여러 포드를 실행할 수 있는 환경을 제공합니다. 각 노드는 클러스터의 일부로서, 애플리케이션의 부하를 분산하고 고가용성을 제공하는 역할을 합니다.

    노드는 다음과 같은 주요 구성 요소를 포함합니다:

     

    • Kubelet: 노드에서 실행되는 주요 쿠버네티스 에이전트로, 마스터 노드의 지시에 따라 컨테이너를 시작하고, 중지하며, 유지 관리합니다.
    • Kube-proxy: 네트워크 프록시와 로드 밸런서 역할을 하며, 쿠버네티스의 서비스 개념을 실현합니다.
      컨테이너 런타임: 컨테이너 실행을 담당하는 소프트웨어로, Docker, containerd, CRI-O 등이 있습니다.
      클러스터와 노드는 쿠버네티스의 기본적인 실행 환경을 형성하며, 이를 통해 다양한 애플리케이션과 서비스를 효율적으로 관리하고 운영할 수 있습니다.

    2.3. 쿠버네티스 핵심 컴포넌트

        - API 서버

        - etcd

        - 스케줄러

        - 컨트롤러 매니저

        - 코어 DNS

        - 네트워크 플러그인

     

    3. 쿠버네티스 오브젝트

    • 파드(Pods)
      • 파드는 쿠버네티스에서 애플리케이션 컨테이너를 실행하는 가장 기본적인 배포 단위입니다. 파드는 하나 이상의 컨테이너를 포함할 수 있으며, 이 컨테이너들은 스토리지와 네트워크를 공유하고, 파드 내에서 서로 통신할 수 있습니다.
      • 파드 내의 컨테이너들은 밀접하게 연관되어 있으며, 같은 물리적 또는 가상의 머신 상에 배치됩니다. 이는 그들이 서로 효율적으로 통신할 수 있게 하며, 리소스 사용을 최적화합니다.
      • 파드는 일반적으로 하나의 애플리케이션 인스턴스를 실행하는 데 사용됩니다. 스케일링이 필요한 경우, 일반적으로 파드의 복제본을 생성하여 부하를 분산시킵니다.
      • 파드 내의 컨테이너들은 생명주기(생성, 종료)가 서로 밀접하게 연관되어 있어야 합니다. 예를 들어, 한 컨테이너가 다른 컨테이너 없이는 의미가 없거나 정상적으로 기능할 수 없는 경우, 이들은 같은 파드에 속해야 합니다.
    • 서비스(Services)
      • 서비스는 파드 그룹에 대한 지속적인 접근 지점을 제공합니다. 네트워크를 통해 서비스에 연결함으로써, 파드가 다운되거나 스케일링되어도 안정적으로 서비스를 이용할 수 있습니다.
    • 볼륨(Volumes)
    • 네임스페이스(Namespaces)
      • 네임스페이스는 쿠버네티스 클러스터 내의 리소스를 논리적으로 분리하는 방법을 제공합니다. 이를 통해 하나의 클러스터를 여러 사용자나 프로젝트 간에 분할하여 사용할 수 있습니다.
      • 네임스페이스는 여러 팀이나 프로젝트가 같은 클러스터를 공유할 때 리소스 충돌을 방지하고, 접근 제어를 구분하는 데 도움을 줍니다. 예를 들어, '개발', '스테이징', '프로덕션' 등과 같이 환경별로 네임스페이스를 분리할 수 있습니다.
      • 네임스페이스는 리소스 할당량(Quotas)과 정책(Policies)을 설정하는 데에도 사용됩니다. 이를 통해 각 네임스페이스별로 리소스 사용을 제어할 수 있습니다.
    • 레플리케이션 컨트롤러(Replication Controllers) 및 레플리카셋(ReplicaSets)

    4. 명령어 정리

    4.1. 쿠버네티스 켜기, 끄기

    minikube start
    minikube stop

     

    5. kubectl 명령어 정리

    5.1. 클러스터와 통신

    • kubectl config
      • kubectl config current-context   #Display the current-context
      • kubectl config delete-cluster    #Delete the specified cluster from the kubeconfig
      • kubectl config delete-context    #Delete the specified context from the kubeconfig
      • kubectl config delete-user       #Delete the specified user from the kubeconfig
      • kubectl config get-clusters      #Display clusters defined in the kubeconfig
      • kubectl config get-contexts      #Describe one or many contexts
      • kubectl config get-users         #Display users defined in the kubeconfig
      • kubectl config rename-context    #Rename a context from the kubeconfig file
      • kubectl config set               #Set an individual value in a kubeconfig file
      • kubectl config set-cluster       #Set a cluster entry in kubeconfig
      • kubectl config set-context       #Set a context entry in kubeconfig
      • kubectl config set-credentials   #Set a user entry in kubeconfig
      • kubectl config unset             #Unset an individual value in a kubeconfig file
      • kubectl config use-context       #Set the current-context in a kubeconfig file
      • kubectl config view              #Display merged kubeconfig settings or a specified kubeconfig file
    • kubectl version # 클라이언트, 서버 버전 확인

    5.2. 클러스터 정보 조회하기

    • kubectl cluster-info # 클러스터 정보 조회
    • kubectl get componentstatuses # 각 컴포넌트의 상태 확인

    5.3. 노드 및 파드 상태 확인하기

    • kubectl get nodes  # 모든 노드의 상태 확인
    • kubectl get pods --all-namespaces  # 모든 네임스페이스에 걸쳐있는 파드의 상태 조회

    5.4. 리소스 조회 명령어

    • kubectl get [리소스 타입] [리소스 이름] [옵션]
      • [리소스 타입]: 조회하려는 리소스의 타입입니다.
        • Pods 🌟
        • Services 🌟
        • Deployments 🌟
        • ReplicaSets 🌟
        • Namespaces
        • ConfigMaps
        • Secrets
        • PersistentVolumes (PVs)
        • PersistentVolumeClaims (PVCs)
        • StatefulSets 🌟
        • Ingress 🌟
        • DaemonSets
        • Jobs
        • CronJobs
        • Role
        • RoleBinding
        • ClusterRole
        • ClusterRoleBinding
        • ServiceAccounts
        • Endpoints
        • Nodes
        • HorizontalPodAutoscalers (HPAs)
        • CustomResourceDefinitions (CRDs)
      • [리소스 이름]: 특정 리소스의 이름입니다. 이름을 지정하지 않으면 해당 타입의 모든 리소스가 조회됩니다.
      • [옵션]
        • --namespace [네임스페이스 이름] 또는 -n [네임스페이스 이름]: 특정 네임스페이스 내의 리소스를 조회합니다. 지정하지 않으면 기본적으로 default 네임스페이스의 리소스가 조회됩니다.
        • -o wide: 리소스에 대한 보다 상세한 정보를 출력합니다.
        • -o yaml: 리소스의 상세 정보를 YAML 형식으로 출력합니다.
        • -o json: 리소스의 상세 정보를 JSON 형식으로 출력합니다.
        • --watch 또는 -w: 리소스의 상태 변화를 실시간으로 모니터링합니다.
    • kubectl describe [리소스 타입] [리소스 이름]
      • 자주 사용하는 [리소스 타입]
        • pods: 파드에 대한 상세 정보를 조회합니다.
        • services: 서비스에 대한 상세 정보를 조회합니다.
        • deployments: 디플로이먼트에 대한 상세 정보를 조회합니다.
        • nodes: 노드에 대한 상세 정보를 조회합니다.
    반응형