Kubernetes 146

API Groups

사용자는 kubectl을 이용하거나 kube-apiserver와 직접 상호작용하여 Kubernetes API를 사용할 수 있다. 예시 - kubenetes 클러스터 버전 확인 curl /version # 예시 curl https://kube-master:6443/version - 포드 목록 확인 curl /version # 예시 curl https://kube-master:6443/version API Group api resource를 묶어놓은 그룹으로. yaml 파일 작성 시 apiVersion에 명시된다. Kubernetes API는 상태 모니터링, 메트릭 수집, 로그 등의 목적에 따라 그룹화된다. 목적 api 경로 Group 비고 클러스터 상태 모니터링 /metrics /healthz 클러스터의 ..

KubeConfig

KubeConfig kubectl을 사용할 때 인증 정보를 지정하지 않고 사용할 수 있도록 인증 정보를 저장한 설정 파일 즉, kubectl 사용 시 사용할 인증 정보를 저장한 파일 Kubernetes 사용자는 생성해둔 인증서 파일과 키를 지정하여 curl을 이용해 kube-apiserver에 쿼리를 요청할 수 있다. curl - 포드 목록 확인 curl https://my-kube-playground:6443/api/v1/pods \ --key admin.key \ --cert admin.crt \ --cacert ca.crt kubectl을 사용할 때도 마찬가지로, 인증 정보를 지정하여 kube-apiserver에 요청을 전달할 수 있다. kubectl - 포드 목록 확인 kubectl get pod..

Authentication

Kubernetes 클러스터는 물리 노드, 가상 노드 및 동작하는 다양한 요소로 구성되어 있다. Kubernetes 클러스터는 인증 및 권한 부여 메커니즘을 이용해 구성 요소 간 통신과 클러스터에 대한 접근 관리성을 확보함으로써 보호되어야 한다. 사용자 쿠버네티스는 기본적으로 사용자 계정을 관리하지 않는다. 즉, kubectl create user와 같은 명령어로 사용자를 생성할 수 없고, kubectl get users와 같은 명령어로 사용자를 확인할 수도 없다. 쿠버네티스는 인증서, LDAP과 같은 서비스, 사용자 정보가 저장된 정적 파일 등을 이용해 사용자를 관리한다. 단, Service Accounts는 쿠버네티스에 생성하고 관리할 수 있다. 사용자 유형 인간 User Accounts 관리자 : ..

Authentication, Authorization and Admission Control

쿠버네티스 클러스터에서 보안이 필요한 부분과 그 방법에 대해 정리한다. 호스트 쿠버네티스 클러스터를 형성한 호스트에 대한 접근은 보호되어 있어야 한다. 비밀번호 인증 접근은 제한되어야 하며, SSH 키 인증 접근만이 허용되어야 한다. kube-apiserver kube-apiserver는 쿠버네티스 내 모든 작업의 중심으로, 사용자는 kubectl를 이용하거나 apiserver에 직접 접근하여 클러스터와 상호작용할 수 있다. 클러스터에서 거의 모든 작업을 kube-apiserver를 통해 수행할 수 있으므로 apiserver 자체에 대하 접근 제어가 필수적이다. 고려사항 누가 클러스터에 접근할 수 있는가 ID/PASSWD, Token, 인증서, 외부 인증 공급자(LDAP), Service Accounts..

Storage Class 관련 명령어

PV와 PVC를 이용하면 퍼시스턴트 스토리지를 쉽게 사용할 수 있지만 클러스터 관리자가 실제 스토리지를 프로비저닝해두어야 한다는 불편함이 있다. 쿠버네티스는 이 작업을 자동으로 수행할 수 있도록 PV 동적 프로비저닝(Dynamic Provisioning)을 지원하여, PV 프로비저너를 배포하고 사용자가 선택 가능한 PV 타입을 정의하는 스토리지 클래스(SC, Storage Class) 객체를 기반으로 지원한다. 이 글에서는 Storage Class 목록을 확인하고, 생성하는 명령어를 정리해둔다. Storage Class 목록 확인 get 명령을 이용해 Storage Class의 목록을 확인할 수 있다. kubectl get storageclasses.storage.k8s.io Storage Class 상..

Volume 관련 명령어

Pod는 수시로 삭제되었다가 재생성되는데, 삭제 시에 포드 내부에 있는 데이터도 함께 삭제된다. 유지해야 하는 데이터가 존재한다면 Volume을 구성해 Pod에 마운트해야 한다. 이 글에서는 Volume 구성 및 PV/PVC를 이용한 구성 및 확인 명령어에 대해 정리한다. Volume (HostPath) 구성 포드 생성 yaml 파일에 .spec.containes.volumeMounts 필드와 .spec.volumes 필드를 작성하여 구성한다. apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: webapp name: webapp spec: containers: - image: kodekloud/event-simulator na..

[NVIDIA/gpu-monitoring-tools] dcgm-exporter CrashLoopBackOff

쿠버네티스 환경에서 GPU 서버인 노드를 Grafana와 Prometheus를 이용해 모니터링하고자 한다. 모니터링 도구는 NVIDA Gpu Monitoring tools이며, 각 노드에 dcgm-exporter 설치가 필요하다. 이 글에서는 helm chart package로 dcgm-expoter 컨테이너를 실행하는 포드를 클러스터에 배포했다. 그러나, 배포 이후 아래와 같이 CrashLoopBackOff 상태인 dcgm-expoter 포드가 존재했다. 해당 현상의 원인을 찾아 해결한 방법을 정리해둔다. 현상 에러 메시지 드라이버 초기화 관련 에러인 것으로 추측된다. $ kubectl logs dcgm-exporter-fk4s5 Warning #2: dcgm-exporter doesn't have s..

Ingress 확인 및 생성

Ingress란 클러스터 내의 서비스에 대한 외부 접근을 관리하는 개체로, 일반적으로 HTTP를 관리한다. 이 글에서는 Ingress 정보를 확인하고 생성하는 명령어에 대해 정리한다. Ingress 목록 확인 get 명령으로 이름, 호스트 등의 정보를 확인할 수 있다. kubectl get ingresses.networking.k8s.io Ingress 상세 정보 확인 describe 명령으로 이름, 규칙 등의 상세 정보를 확인할 수 있다. kubectl describe ingresses.networking.k8s.io --namespace= # 예시 kubectl describe ingresses.networking.k8s.io --namespace=app-space ingress-wear-watch ..

Network Policy 생성 및 확인

Network Policy는 IP 주소 또는 Port 수준에서 트래픽 흐름을 제어하는 경우 사용한다. 포드가 네트워크 상의 네트워크 엔티티와 통신할 수 있도록 허용하는 방법을 정의한다. 이 글에서는 Network Policy 정보를 확인하고, 생성하는 방법에 대해 정리한다. Network Policy 목록 확인 kubectl get networkpolicies.networking.k8s.io Network Policy 상세 정보 확인 이름, Label, 정책 유형 등의 정보를 확인할 수 있다. kubectl describe networkpolicies.networking.k8s.io # 예시 kubectl describe networkpolicies.networking.k8s.io payroll-poli..

Services 관련 명령어

Services란 포드에서 실행 중인 애플리케이션을 네트워크 서비스로 노출하는 방법이다. 즉, 서비스를 통해 포드에 접근할 수 있다. 이 글에서는 Services 목록 및 정보를 확인하고, 생성하는 방법에 대해 정리한다. Services 목록 확인 get 명령어로 Services 목록을 확인한다. 서비스의 이름, 유형 등을 확인할 수 있다. kubectl get service 사진에서 확인할 수 있는 kubernetes 서비스는 kubernetes 시작 시 생성된 기본 서비스이다. Services 상세 정보 확인 describe 명령어로 Services의 상세 정보를 확인한다. Port, TargetPort, Label, Endpoints 등의 정보를 확인할 수 있다. kubectl describe se..