Kubernetes(쿠버네티스)

[Kubernetes] Ch1. API 리소스와 Kubectl (1)

잭피 2022. 11. 16. 22:36

쿠버네티스 리소스 카테고리

  1. 워크로드 API 카테고리 : 컨테이너 실행에 관련된 리소스
  2. 서비스 API 카테고리 : 컨테이너를 외부에 공개하는 엔드포인트를 제공하는 리소스
  3. 컨피그 & 스토리지 API 카테고리 : 설정/기밀 정보/영구 볼륨 등에 관련된 리소스
  4. 클러스터 API 카테고리 : 보안이나 쿼터 등에 관련된 리소스
  5. 메타데이터 API 카테고리 : 클러스터 내부의 다른 리소스를 관리하기 위한 리소

워크로드 API 리소스

총 8가지 종류의 워크로드 리소스가 있으며, 클러스터 위에서 컨테이너를 기동하기 위해 사용되는 리소스이다

[파드, 레플리케이션 컨트롤러, 레플리카셋, 디플로이먼트, 데몬셋, 스테이트풀셋, 잡, 크론잡]

서비스 API 카테고리

컨테이너 서비스 디스커버리와 클러스터 외부에서도 접속이 가능한 엔드포인트 등을 제공하는 리소스

서비스와 인그레스라는 2가지 종류의 서비스 API 카테고리가 있다

[서비스(ClusterIP, ExternalIP, NodePort, LoadBalancer, Headless(None), ExternalName, None-selector), 인그레스]

컨피크 & 스토리지 API 카테고리

설정과 기밀 데이터를 컨테이너에 담거나 영구 볼륨을 제공하는 리소스

시크릿과 컨피그맵은 모두 키-밸류 형태의 데이터 구조로 되어 있음

[시크릿, 컨피크맵, 영구 볼륨 클레임]

클러스터 API 카테고리

클러스터 자체 동작을 정의하는 리소스

보안 관련 설정이나 정책, 클러스터 관리성을 향상시키는 기능을 위한 리소스 등 여러 리소스가 있다

[노드, 네임스페이스, 영구 볼륨, 리소스 쿼터, 서비스 어카운트, 롤, 클러스터 롤, 롤바인딩, 클러스터롤바인딩, 네트워크 정책]

메타데이터 API 카테고리

클러스터 내부의 다른 리소스 동작을 제어하기 위한 리소스

ex) 파드를 오토 스케일링시키기 위해 사용하는 HPA는 디플로이먼트 리소스를 조작해 레플리카 수를 변경함으로써 오토 스케일링을 구현

[LimitRange, HorizontalPodAutoscaler, PodDistruptionBudget, 커스텀 리소스 데피니션)

네임스페이스로 가상적인 클러스터 분리

쿠버네티스 클러스터를 서비스 환경 / 스테이징 환경 / 개발환경으로 구분하는 경우 많이 사용한다

기본으로 아래와 같은 4가지 네임스페이스가 생성된다

  1. kube-system - 쿠버네티스 클러스터 구성 요소와 애드온이 배포될 네임스페이스
  2. kube-public - 모든 사용자가 사용할 수 있는 컨피그맵 등을 배치하는 네임스페이스
  3. kube-node-lease - 노드 하트비트 정보가 저장된 네임스페이스
  4. default - 기본 네임스페이스

Kubectl

쿠버네티스 클러스터 조작은 모두 마스터 API를 통해 이뤄진다

조작할 때 ‘kubectl’을 사용하는 것이 일반적이다

인증 정보와 컨텍스트(config)

kubectl이 마스터와 통신할 때는 접속 대상의 서버 정보, 인증 정보 등이 필요하다

kubectl은 컨텍스트를 전환하여 여러 환경을 여러 권한으로 조작할 수 있도록 설계되어 있다

# 컨테스트 목록 표시
kubectl config get-contexts

# 컨테스트 전환
kubectl config use-context <context-name>

# 현재 컨텍스트 표시
kubectl config current-context

생성,삭제,갱신

# 생성,갱신
kubectl apply -f <name>.yaml

# 목록조회
kubectl get pods

# 삭제
kubectl delete -f <name>.yaml

리소스 생성에도 apply를 사용하자

💡 리소스 생성에도 create가 아닌 apply를 사용해야 하는 이유:

      create와 apply를 섞어서 사용하면 apply를 실행할 때, 변경사항을 검출하지 못하는 경우가 있다

 

파드 재기동

디플로이먼트 등의 리소스와 연결되어 있는 모든 파드를 재기동할 수 있음

(단, 리소스와 연결되어 있지 않은 단독 파드에는 사용할 수 없다)

kubectl rollout restart deployment <deployment-name>
# Deployment 리소스의 모든 파드 재기동