- 3. 쿠버네티스 다루기2023년 04월 20일 20시 34분 21초에 업로드 된 글입니다.작성자: 각수짱728x90반응형SMALL
쿠버네티스 다루기
쿠버네티스 용어
- Namespace:
물리 클러스터 내의 복수의 가상 클러스터
개발/운영/테스트 등을 네임스페이스로 나누면 개발은 CPU 100개, 운영은 400개와 같이 네임스페이스별로 포드나 서비스를 나눠서 관리 가능 - Master:
마스터 노드에서 실행되는 세 개의 프로세스 집합(kube-apiserver, kube-controller-manager, kube-scheduler)을 의미 - Node:
kubelet, kube-proxy, 동작 중인 pod를 유지하고 런타임 환경을 제공하는 노드를 의미 - Control Plane:
master와 kubelet을 포함하는 컨트롤 플레인을 의미 - Object:
시스템 상태를 나타내는 추상 개념으로 Pod, Service, Volume, Namespace 등이 존재 - Controller:
ReplicaSet, Deployment, StatefulSet, DaemonSet, Job 등과 같이 기초 오브젝트를 기반으로 부가 기능 및 편의 기능을 제공하는 더 높은 수준의 추상 개념 - Pod:
컨테이너의 집합으로 가장 작은 배포 단위.
Pod 내부의 컨테이너들은 네트워크와 볼륨을 공유하며, 클러스터 내에서 실행 중인 프로세스를 나타냄
각 Pod는 하나의 IP만을 사용 - Service:
논리적인 Pod 집합과 접근 정책을 추상화한 개념 - Cluster IP:
클러스터 내에서 사용되는 내부 IP를 의미 - External IP:
외부에서 접근 가능한 IP를 의미 - NodePort:
노드에서 서비스가 노출되는 포트를 의미 - TargetPort:
Pod 내부에서 사용되는 포트를 의미 - Endpoints:
Pod IP와 TargetPort의 조합
쿠버네티스 컴포넌트
자세한 정보: https://kubernetes.io/ko/docs/concepts/overview/components/
컨트롤 플레인(마스터 노드)
- etcd:
쿠버네티스 클러스터의 설정 데이터를 저장하는 분산 데이터 저장소 (키-값 형태).
대규모 클러스터의 경우 고가용성을 위해 3개에서 최대 5개 노드의 etcd 클러스터 구성. - kube-apiserver:
각 노드에서 보내온 API 요청이 쿠버네티스 API 서버로 전달되어, etcd 오브젝트 스토어에 업데이트 전 검증을 수행한 후 데이터를 저장 - kube-controller-manager:
다양한 매니저를 하나의 바이너리로 통합한 도구로, 노드, 레플리케이션, 엔드포인트, 서비스 어카운트 & 토큰 컨트롤러 등의 역할을 수행 - kube-scheduler:
아직 스케줄링되지 않은 포드를 현재 사용 가능한 노드에 바인딩하는 역할을 수행
노드 서비스 데몬
- kube-proxy:
로드 밸런싱과 네트워크 프록시 기능을 담당하며, 서비스를 지역적으로 반영하고 TCP 및 UDP 포워딩을 수행
환경 변수나 DNS를 통해 클러스터 IP를 찾습니다. - kubelet:
노드에 존재하는 포드의 다양한 부분을 관리하고 마스터에 있는 API 서버와 통신
API 서버에서 포드 secret 다운로드, 볼륨 마운트, 포드의 컨테이너 실행, 노드와 각 포드 상태 보고, 컨테이너 활성 여부 조사 등을 수행
쿠버네티스 오브젝트
쿠버네티스는 클러스터의 상태를 나타내기 위해 오브젝트를 사용. 구체적으로 말하자면, 오브젝트는 다음과 같은 정보를 포함:
- 어떤 컨테이너화된 애플리케이션이 동작 중인지 (그리고 어느 노드에서 동작 중인지)
- 그 애플리케이션이 이용할 수 있는 리소스
- 그 애플리케이션이 어떻게 재구동 정책, 업그레이드, 그리고 내고장성과 같은 것에 동작해야 하는지에 대한 정책
오브젝트 명세와 상태
- 오브젝트들은 모두 오브젝트의 특성 (설정정보)을 기술한 오브젝트 스펙 (Object Spec)으로 정의
- 커맨드 라인을 통해서 오브젝트 생성 시 인자로 전달하여 정의하거나, YAML이나 JSON 파일로 스펙을 정의
- status는 쿠버네티스 시스템과 컴포넌트에 의해 제공되고 업데이트된 오브젝트의 현재 상태를 나타냄
오브젝트 관리하기
명령어:
kubectl create deployment nginx --image nginx
YAML 파일 예제:
kubectl apply -f nginx-deployment.yml apiVersion: apps/v1 # API 버전 kind: Deployment # 오브젝트 종류 metadata: name: nginx-deployment # 오브젝트 이름 spec: selector: matchLabels: app: nginx # 라벨 선택자 minReadySeconds: 5 # 최소 준비 시간 template: metadata: labels: app: nginx # 라벨 설정 spec: containers: # 컨테이너 목록 - name: nginx # 컨테이너 이름 image: nginx:latest # 사용할 이미지 ports: # 포트 설정 - containerPort: 80 # 컨테이너 포트
728x90반응형LIST'k8s' 카테고리의 다른 글
2. 쿠버네티스 환경 구축 (0) 2023.04.20 1. 쿠버네티스 (0) 2023.04.20 이전글이 없습니다.댓글 - Namespace: