🧩 DevOps/Kubernetes

    [Kubernetes] k8s Monitoring : Helm으로 Prometheus, Grafana 설치하기

    📌Index Prometheus란? Prometheus 및 Grafana 설치 ✔️ Prometheus란? Prometheus란 SoundCloud가 개발한 솔루션으로, 오픈소스 모니터링 툴이다. Prometheus Architecture 빨간색으로 표시된 것이 프로메테우스의 컴포넌트이다. Retrieval : Pushgateway 혹은 Targets으로부터 metrics를 pulling한다. Short-lived jobs : 생명주기가 짧은 것들은 Pushgateway가 받아둔다. Service Discovery : k8s apiserver에게 질의하면 수집 대상을 가지고 온다. TSDB: 시계열(Time Series) DB는 시간대별로 데이터(시계열 데이터)를 저장하기에 최적화된 DB로, Promet..

    [Kubernetes] Helm이란? Helm의 개요와 사용법

    📌Index Helm이란? Helm 설치하기 Helm 사용법 Helm 실습 ✔️ Helm이란? Helm이란, Kubernetes 패키지 관리를 도와주는 것(패키지매니저)으로, yaml 파일의 모음이라고 할 수 있다. Helm에 대한 많은 문서나 책에서 2버전을 다루고 있는데, 2버전은 더 이상 개발되지 않는다. 2버전은 3버전과 명령어도 다르고, 아키텍처 구조도 다르다. 아래의 그림이 버전2의 아키텍처로, 특히 가장 큰 차이점은 Helm Tiller의 여부이다. Helm Tiller는 Pod로, 버전2에서 사용되었다가, 여러가지 보안 문제로 버전3에서부터는 더 이상 사용되지 않는다. Tiller와 Client는 서로 gRPC로 통신을 했으나, 버전3부터는 Client에서 바로 API Server로 요청한..

    [Kubernetes] kubectx, kubens 설치 및 powerlevel10 커스터마이징

    kubectx란? 다중 클러스터 사용 시 클러스터 context 전환을 쉽게 해 주는 툴이다. kubens란? 쿠버네티스 클러스터 내에서 네임스페이스 변환을 쉽게 해 주는 툴이다. kubectx / kubens 설치하기 Github URL 👉 https://github.com/ahmetb/kubectx kubectx $ wget https://github.com/ahmetb/kubectx/releases/download/v0.9.4/kubectx $ sudo install kubectx /usr/local/bin 설치 확인 $ which kubectx /usr/local/bin/kubectx kubens $ wget https://github.com/ahmetb/kubectx/releases/downlo..

    [Kubernetes] k8s Authentication(인증)과 RBAC(인가) + 실습

    📌Index k8s Authentication(인증) RBAC 실습 💻실습 1 : Service Account 만들기 💻실습 2 : 사용자 생성을 위한 x509 인증서를 만든 후, ClusterRoleBinding으로 Role 부여하기 ✔️ k8s Authentication(인증) Authenticating | Kubernetes 쿠버네티스에는 계정, 사용자라는 개념이 존재하며, 크게 2가지 컨셉 ServiceAccount(SA)와 NormalUser가 있다. 1. Service Account(SA) 쿠버네티스가 관리하는 SA 사용자로, 사용자가 아닌 Pod가 사용한다. 우리가 따로 지정하지 않더라도 파드를 만들 때 SA가 default로 설정된다. 파드의 정보를 yaml 형식으로 확인하면 service..

    [Kubernetes] Kubeconfig파일이란?

    kubeconfig 파일은 k8s의 설정 파일로, kubectl 명령어로 apiserver에 접근할 때 사용할 인증 정보를 담고있다. 이 쿠버네티스 설정(kubeconfig)은 크게 3가지 부분으로 구성되어 있다. clusters : 쿠버네티스 API 서버 정보(IP 또는 도메인)로, 여러 클러스터를 명시할 수 있다. users : 쿠버네티스 API에 접속하기 위한 사용자 목록으로, 인증 방식에 따라 형태가 다를 수 있다. context : user와 cluster 사이의 관계를 매핑한 것으로, 어떤 context를 사용하느냐에 따라 cluster와 user가 결정된다. context를 기반으로 “어떤 Cluster에 어떤 User가 인증을 통해 쿠버네티스를 사용한다.” 의미로 해석하면 된다. conte..

    [Kubernetes] k8s Taint와 Toleration

    📌Index Taint Toleration ✔️ Taint 특정 노드에 Taint를 지정할 수 있는데, Taint를 설정한 노드에는 포드가 scheduling 되지 않는다. 참고 : kubectl taint Taint 추가하기 $ kubectl taint node [nodename] [key]=[value]:[effect] value는 필수는 아니다. Taint 제거하기 $ kubectl taint node [nodename] [key]=[value]:[effect]- 참고로 Cordon을 설정하면 자동으로 Taint가 추가된다. $ kubectl cordon node2 node/node2 cordoned $ kubectl describe node node2 | grep -i taint Taints: n..

    [Kubernetes] k8s Cordon과 Drain

    📌Index Cordon Drain Cordon Cordon은 지정된 노드에 더이상 포드들이 스케쥴링 되지 않도록 한다. Cordon 설정하기 : Scheduling 금지하기 $ kubectl cordon 해당 노드에 이미 존재하는 것들은 관계없다. 새롭게 생성되는 파드들은 더 이상 해당 노드에 배치되지 않는다. Cordon 해제 $ kubectl uncordon 사용 예시 패치 커널 업데이트 💻 실습 : Cordon과 Affinity의 활용 현재 노드들의 상태는 다음과 같고, $ kubectl get nodes NAME STATUS ROLES AGE VERSION node1 Ready control-plane,master 9d v1.22.8 node2 Ready 9d v1.22.8 node3 Ready..

    [Kubernetes] k8s 어피니티(Affinity)와 안티-어피니티(Anti-Affinity)

    어피니티(Affinity)란, 개념적으로 nodeSelector와 유사한 것으로, 노드의 레이블을 기반으로 파드를 스케줄할 수 있는 노드를 제한할 수 있다. Affinity 종류와 대상 Node nodeAffinity Pod podAffinity podAntiAffinity 🔹 Node Affinity pod.spec.affinity.nodeAffinity Node Affinity는 Node 레이블을 기준으로 새로운 Pod가 특정 Worker Node로 배포되도록 Scheduling한다. preferredDuringSchedulingIgnoredDuringExecution Pod를 조건에 따라 노드에 배포하려고 시도는 하지만 보증할 수 없다는 것을 의미한다. (Soft) requiredDuringSche..

    [Kubernetes] Pod Scheduling : nodeName, nodeSelector

    📌Index nodeName nodeSelector ✔️nodeName nodeName을 설정하면, 스케쥴러에 영향을 받지 않고 사용자가 원하는 노드에 강제로 배치시킬 수 있다. nodeName을 설정하지 않으면 스케쥴러에 의해 노드에 배치된다. 그러나 nodeName은 몇가지 제한 사항으로 인해 되도록이면 사용하지 않는 것을 권장한다. nodeName 을 사용해서 노드를 선택할 때의 몇 가지 제한은 다음과 같다. 만약 명명된 노드가 없으면, 파드가 실행되지 않고 따라서 자동으로 삭제될 수 있다. 만약 명명된 노드에 파드를 수용할 수 있는 리소스가 없는 경우 파드가 실패하고, 그 이유는 다음과 같이 표시된다. 예: OutOfmemory 또는 OutOfcpu. 클라우드 환경의 노드 이름은 항상 예측 가능하..

    [Kubernetes] HPA(Horizontal Pod Autoscaling)란?

    HPA(Horizontal Pod Autoscaling)는 워크로드를 자동으로 업데이트하며 Deployment, ReplicaSets, StatefulSet의 복제본 개수를 조정한다. Metric이 Pod의 CPU 사용량을 측정해서 HPA에 전달하고(HPA는 Metric을 모니터링하고), 실제로 Pod의 수를 늘리거나 줄이는것은 ReplicaSet이나 Deployment에 의해서 컨트롤 된다. CPU 등의 리소스 사용량이 증가 하면 Pod 개수를 늘리고, 리소스 사용량이 감소하면 다시 Pod 개수를 줄인다. 따라서 HPA를 사용하기 위해서는 사용량을 측정하기 위해 반드시 Metric 서버가 필요하다. 단, HPA는 크기를 조정할 수 없는 Object (ex : DaemonSet, Service 등)에는 ..

    [Kubernetes] Resource 요청(Reqeust)과 제한(Limit)

    파드 및 컨테이너 리소스 관리 | Kubernetes : 요청(Request)과 제한(Limit) Resource pod.spec.containers.resources requests : 스케쥴러가 파드를 노드에 배치시킬 때 고려하는 리소스 요청. 이를 수용 가능한 노드에만 파드를 배치한다. cpu memory limits : 애플리케이션이 최대로 증가할 수 있는 상한 값 cpu memory $ kubectl explain pod.spec.containers.resources ... FIELDS: limits Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concep..

    [Kubernetes] k8s 헤드리스 서비스(Headless Service)와 스테이트풀셋(StatefulSet)

    📌Index 헤드리스(Headless) 서비스 스테이트 풀셋(StatefulSets) ✔️ 헤드리스(Headless) 서비스 헤드리스(Headless) 서비스는 StatefulSet과 함께 사용하는 것으로, .spec.clusterIP의 필드 값을 None으로 설정하여 클러스터 IP가 없는 서비스이다. 💻 실습 : 일반적인 ClusterIP 서비스와 Headless 서비스의 비교 먼저 일반적인 ClusterIP 서비스를 다음과 같이 작성한다. myweb-svc.yaml apiVersion: v1 kind: Service metadata: name: myweb-svc spec: type: ClusterIP selector: app: web ports: - port: 80 targetPort: 8080 다음..

728x90