전체 글

전체 글

    [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 다음..

    [Kubernetes] TLS/SSL Termination with Ingress

    📌Index TLS/SSL Termination이란? TLS/SSL Termination with Ingress ✔️ TLS/SSL Termination이란? 그림에서 Webservice는 Server이고, Proxy는 일반적으로 Load Balancer이다. TLS/SSL Termination이란 Client와 LoadBalancer 사이에는 HTTPS 즉, TLS(암호화 제공)를 사용하고, 로드밸런서와 실제 서비스 사이에는 HTTP 즉, 평문 통신(암호화 제공X)을 하는 방식을 말한다. 단, 외부에서 실제 서버로 접근하지 못한다는 전제 조건이 있어야한다. 모든 통신에 암호화를 사용하는 방식을 종단간 암호화(E2EE, End to End Encryption)라고 부르는데, TLS/SSL Terminat..

    [Kubernetes] k8s ConfigMap과 Secret (feat. 컨테이너 환경 변수)

    📌Index 컨테이너 환경 변수 ConfigMap Secret ✔️ 컨테이너 환경 변수 쿠버네티스 파드의 컨테이너를 위한 환경 변수를 정의하는 방법에 대해 알아본다. pods.spec.containers.env name value $ kubectl explain pods.spec.containers.env KIND: Pod VERSION: v1 RESOURCE: env DESCRIPTION: List of environment variables to set in the container. Cannot be updated. EnvVar represents an environment variable present in a Container. FIELDS: name -required- Name of the e..

    [Kubernetes] k8s Volume : 동적 프로비저닝 with NFS & 기본 스토리지 클래스

    📌Index 동적 프로비저닝(Dynamic Provisioning) 기본(default) 스토리지 클래스 ✔️ 동적 프로비저닝(Dynamic Provisioning) 동적 프로비저닝(Dynamic Provisioning)은, 사용자가 PVC를 만들면 알아서 PV를 만들고 Volume과의 연결을 진행한다. 동적으로 PV를 생성하기 위해서는 스토리지 클래스(storageClass)가 필요하다. StorageClassName 필드에 사전 생성된 StorageClass Object를 기입하는 것으로 동적 PV가 생성가능하다 이러한 StorageClass는 추가적으로 생성이 가능하며 Default를 설정할 수 있다. 스토리지 클래스 프로비저너를 보면, 동적 프로비저닝을 지원하는 다양한 형태의 스토리지들을 볼 수 ..

    [Kubernetes] k8s 디플로이먼트(Deployments)

    📌Index Deployments란? Deployment Rollback 및 Rollout 기록 조회 Deployment 업데이트 ✔️ Deployments란? 디플로이먼트(deployment)란 K8s에서 애플리케이션 단위를 관리하는 Controller이며, Kubernetes의 최소 유닛인 Pod에 대한 기준 spec을 정의한 Object이다. Kubernetes에서는 각 Object를 독립적으로 생성하기 보다는 Deployment를 통해서 생성하는 것을 권장하고 있으며, Pod와 ReplicaSet의 기준 정보를 지정할 수 있다. ReplicaSets에 대한 자세한 설명은 ReplicationController와 ReplicaSets에서 확인할 수 있다. 이러한 Deployment는 Pod의 sca..

728x90