본문 바로가기

k8s25

Kubernetes::스토리지 (Storage) Persistent Volumes POD에서 Volume의 한계는 무엇인가? 대규모 환경에서는 많은 사용자가 많은 POD를 배포하므로 사용자는 각 포드에 대해 매번 스토리지를 구성해야 한다. 어떤 스토리지 솔루션을 사용하든 POD를 배포하는 사용자는 자신의 환경에 있는 모든 포드 정의 파일에서 이를 구성해야 한다. 변경할 때마다 사용자는 자신의 모든 POD에서 변경해야 한다. Persistent Volumes은 무엇인가? Persistent Volumes은 클러스터에 애플리케이션을 배포하는 사용자가 사용하도록 관리자가 구성한 클러스터 전체 스토리지 볼륨 Pool이다. 사용자는 Persistent Volumes Claim을 사용하여 이 Pool에서 스토리지를 선택할 수 있다. 시나리오 Persistent .. 2023. 12. 19.
Kubernetes::클러스터 유지 (Cluster Maintenance) Cluster 업그레이드 방법 1. controlplane drain 걸기 (master node) drain은 지정된 노드에 있는 포드들을 다른곳으로 이동시키는 명령어이다. $ kubectl drain controlplane --ignore-daemonsets2. 패키지 목록 업데이트 (master node) $ apt update3. kubeadm 1.25 인스톨 (master node) $ apt-get install kubeadm=1.25.0-00 4. kubeadm 1.25 적용 (master node) $ kubeadm upgrade apply v1.25.05. kubelet 1.25 인스톨 (master node) $ apt-get install kubelet=1.25.0-006. 데몬 리로.. 2023. 12. 19.
Kubernetes::어플리케이션 생명주기 (Application Lifecycle Management) 어플리케이션 내 ConfigMap 설정 (Configure ConfigMaps in Applications) ConfigMap 생성 명령어로 key-value 값을 인자 값으로 주어 생성하는 방법이다. $ kubectl create configmap app-config --from-literal=APP_COLOR=blue --from-literal=APP_MOD=prod properties 파일을 사용하여 생성하는 방법이다. ※ 파일을 사용하여 생성하게 되면 key 값이 파일 이름으로 설정되게 되니 주의하기 바란다. $ cat > app_config.properties APP_COLOR=blue APP_MODE=prod $ kubectl create configmap app-config --from-fi.. 2023. 12. 19.
Kubernetes::로깅 모니터링 (Logging Monitoring) Metric Server 설치방법 $ git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git $ cd kubernetes-metrics-server/ $ kubectl create -f . 사용방법 node 보기 $ kubectl top nodes kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% master.example.com 417m 13% 3706Mi 27% node1.example.com 44m 2% 485Mi 12% node2.example.com 59m 2% 613Mi 16% POD 보기 $ kubectl top pods kubectl top pods NAME .. 2023. 12. 19.
Kubernetes::스케쥴링 (Scheduling) - Node Affinity Node Affinity Node Affinity란? 쿠버네티스 클러스터의 특정 노드에 노드 어피니티를 사용해 쿠버네티스 파드를 할당하는 방법을 말한다. 노드에 레이블 추가 클러스터의 노드를 레이블과 함께 나열하자. $ kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS master.example.com Ready control-plane,master 347d v1.22.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master.example.com,kubernetes.io/os=linux.. 2023. 12. 19.
Kubernetes::스케쥴링 (Scheduling) 수동 스케쥴링 (Manual Scheduling) 클러스터에 스케줄러가 없을 때 수동으로 처리하는 방법이다. POD에는 기본적으로 설정되지 않은 NodeName이라는 필드가 있는데 이 필드를 설정하여 수동으로 스케쥴링 하는 방법이다. apiVersion: v1 kind: Pod metadata: name: nginx labels: name: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 8080 nodeName: node02 또 다른 방법 apiVersion: v1 kind: Binding metadata: name: nginx target: apiVersion: v1 kind: Node name: node02 api.. 2023. 12. 19.
Kubernetes::핵심 개념 (Core Concepts) 핵심 개념 (Core Concepts) Kubernetes Architecture (쿠버네티스 아키텍처) Master Node 구성 설명 API Server ㆍ쿠버네티스 클러스터의 모든 작업을 제어하는 REST API Controller ㆍ클러스터를 설계한 상태로 유지 (파드 개수 유지) ㆍ백그라운드에서 클러스터 컨트롤러를 관리 ㆍAPI 서버를 이용하여 클러스터 상태를 모니터링 Scheduler ㆍ노드가 배정되지 않은 새로 생성된 Pod를 감지하고 그것을 어느 Node에서 실행될지를 선택 ㆍPod를 어떻게 Node에 배치할지를 예약 ETCD ㆍ클러스터의 모든 정보를 저장하는 데이터 저장소 ㆍ고가용성을 가진 Key-Value 저장소 구조 Worker Node 구성 설명 kubelet ㆍ노드에서 실행되는 에.. 2023. 12. 19.
Kubernetes - Helm (헬름) Helm (헬름) 이란? 헬름은 쿠버네티스 애플리케이션 관리하는 도구이다. 헬름 차트는 복잡한 쿠버네티스 애플리케이션도 편리하게 정의하여 설치하거나 업그레이드할 수 있다. 아키텍쳐 주요 특징 복잡성 관리 차트는 매우 복잡한 애플리케이션도 표현하고, 반복적인 애플리케이션 설치를 제공하며, 단일 권한으로 서비스할 수 있다. 쉬운 업데이트 즉시(in-place) 업그레이드와 커스텀 훅을 통해 업데이트하는 수고를 줄여줄 수 있다. 간단한 공유 차트는 버전 관리, 공유, 퍼블릭이나 프라이빗 서버 호스팅이 편리하다 롤백 helm rollback을 사용하여 릴리스를 예전 버전으로 간편하게 되돌릴 수 있다. 주요 개념 3가지 차트 쿠버네티스 애플리케이션의 인스턴스를 생성하는 데에 필요한 정보의 꾸러미이다. 설정 릴리스.. 2021. 12. 28.
Kubernetes 대시보드 설치 쿠버네티스 대시보드 설치 1. 대시보드 yaml 파일 다운로드 root@master:~# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml --2021-12-07 15:31:28-- https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml raw.githubusercontent.com (raw.githubusercontent.com)을(를) 해석하는 중... 185.199.110.133, 185.199.109.133, 185.199.108.133, ... 접속 raw.githubuse.. 2021. 12. 8.
Kubernetes - canary deployment (카나리 배포) canary deployment (카나리 배포) 정의 파드를 배포(업데이트)하는 방법 배포 방법 설명 블루 그린 업데이트 블루 제품을 전부 제거 후 그린 제품을 업데이트 (서비스 중단 간격이 생김) 롤링 업데이트 서비스 중단없이 한 개씩 업데이트 하는 방법 카나리 배포 기존 버전을 유지한 채로 일부 버전만 신규 버전으로 올려서 신규 버전에 버그나 이상은 없는지 확인 시나리오 name=mainui version=stable 버전의 pod를 생성 root@master:~# cat > mainui-stable.yaml apiVersion: apps/v1 kind: Deployment metadata: name: mainui-stable spec: replicas: 2 selector: matchLabels: .. 2021. 12. 3.
[쿠버네티스] annotation (어노테이션) annotation (어노테이션) 정의 Label과 동일하게 key-value를 통해 리소스의 특성을 기록 Kubernetes 에게 특정 정보 전달할 용도로 사용 예를 들어 Deployment의 rolling update 정보 기록 annotations: kubernetes.io/change-cause: version 1.15​​ 관리를 위해 필요한 정보를 기록할 용도로 사용 릴리즈, 로깅, 모니터링에 필요한 정보들을 기록 annotations: builder: "홍길동" buildDate: "20211203" imageRegistry: https://hub.docker.com/​​ 생성 root@master:~# cat > annotation.yaml apiVersion: v1 kind: Pod met.. 2021. 12. 3.
쿠버네티스 - label (레이블) label (레이블)정의Node를 포함하여 pod, deployment 등 모든 리소스에 할당리소스의 특성을 분류하고 selector를 이용해서 선택Key-Value 한쌍으로 적용생성파드이름생성방법레이블cmdpodcmd 명령어run=cmdpod (자동으로 할당됨)pod-demoyaml 파일 label-pod-demoyaml 파일name=mainui,rel=stableroot@master:~# kubectl run cmdpod --image=nginx:1.14 --port=80 pod/cmdpod created root@master:~# cat > pod1.yaml apiVersion: v1 kind: Pod metadata: name: pod-demo spec: containers: - name: ngi.. 2021. 12. 2.
Kubernetes - Ingress (인그레스) Ingress 정의 HTTP나 HTTPS를 통해 클러스터 내부의 서비스를 외부로 노출 기능 Service에 외부 URL을 제공 트래픽을 로드밸런싱 SSL 인증서 처리 Virtual hostring을 지정 구축순서 1. ingress-nginx.yaml 다운로드 링크 : https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters root@master:~# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/baremetal/deploy.yaml --2021-12-01 15:19:15-- https://ra.. 2021. 12. 1.
Kubernetes - kube-proxy kube-proxy 정의 Kubernetes Service의 backend 구현 endpoint 연결을 위한 iptables 구성 nodePort로의 접근과 Pod 연결을 구현 (iptables 구성) kube-proxy mode userspace 클라이언트의 서비스 요청을 iptables를 거쳐 kube-proxy가 받아서 연결 kubernetes 초기버전에 잠깐 사용 iptables default kubernetes network mode kube-proxy service API 요청시 받아서 iptables 룰을 통해 연결 클라이언트 연결은 kube-proxy가 받아서 iptables 룰을 통해 연결 IPVS 리눅스 커널이 지원하는 L4 로드밸런싱 기술을 이용 별도의 ipvs 지원 모듈을 설정한 후.. 2021. 11. 30.
Kubernetes - Headless Service Headless Service 정의 ClusterIP가 없는 서비스로 단일 진입점이 필요 없을 때 사용 Service와 연결된 Pod의 endpoint로 DNS 레코드가 생성됨 쿠버네티스 coreDNS에 등록되며 DNS resolving Service로 요청이 가능해진다. Pod의 DNS 주소: pod-ip-addr.namespace.pod.cluster.local 생성 사전에 Deployment를 먼저 생성하고 그 다음에 Service를 생성하여 묶어준다. root@master:~# cat > deploy-nginx.yaml apiVersion: apps/v1 kind: Deployment metadata: name: webui spec: replicas: 3 selector: matchLabels: .. 2021. 11. 30.
Kubernetes - Service (서비스) Service (서비스) 정의 동일한 서비스를 제공하는 Pod 그룹의 단일 진입점을 제공 파드들의 하나의 IP로 묶어서 관리를 해줌 Service 종류 ClusterIP selector의 label가 동일한 파드들의 그룹으로 묶어 단일 진입점 (Virtual_IP)을 생성 클러스터 내부에서만 사용가능 type 생략 시 default 값으로 10.96.0.0/12 범위에서 할당됨 생성 사전에 Deployment를 먼저 생성하고 그 다음에 Service를 생성하여 ClusterIP로 묶어준다. root@master:~# cat > deploy-nginx.yaml apiVersion: apps/v1 kind: Deployment metadata: name: webui spec: replicas: 3 selec.. 2021. 11. 30.
Kubernetes - Deployment Deployment 정의 ReplicaSet을 컨트롤해서 Pod수를 조절 Rolling Update & Rolling Back RollingUpdate란? 서비스 중단없이 이루어질 수 있도록 하는 업데이트 생성 root@master:~# cat > deployment-examl.yaml apiVersion: apps/v1 kind: Deployment metadata: name: app-deploy spec: replicas: 3 selector: matchLabels: app: webui template: metadata: labels: app: webui spec: containers: - image: nginx:1.14 name: web ports: - containerPort: 80 root@ma.. 2021. 11. 25.
Kubernetes - DaemonSet DaemonSet 정의 전체 노드에서 Pod가 한개씩 실행되도록 보장 로그 수집기, 모니터링 에이전트와 같은 프로그램 실행시 적용 생성 root@master:~# cat > daemonset-exam.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: daemonset-nginx spec: selector: matchLabels: app: webui template: metadata: name: nginx-pod labels: app: webui spec: containers: - name: nginx-container image: nginx:1.14 root@master:~# kubectl create -f daemonset-exam.yaml daemo.. 2021. 11. 25.
Kubernetes - CronJob CronJob 정의 job 컨트롤러로 실행할 Application Pod를 주기적으로 반복해서 실행 Linux의 cronjob의 스케줄링 기능을 Job Controller에 추가한 API 다음과 같은 반복해서 실행하는 Job을 운영해야 할 때 사용 Data Backup Send email Cleaning tasks Cronjob Schedule: "0 3 1 * *" Minutes (from 0 to 59) Hours (from 0 to 23) Day of the month (from 1 to 31) Month (from 1 to 12) Day of the week (from 0 to 6) 생성 옵션 설명 concurrencyPolicy Allow: 중복실행 가능, Forbid: 중복실행 불가 root@.. 2021. 11. 24.
Kubernetes -Job Controller Job Controller 정의 쿠버네티스는 Pod를 running 중인 상태로 유지 Batch 처리하는 Pod는 작업이 완료되면 종료됨 Batch 처리에 적합한 컨트롤러로 Pod의 성공적인 완료를 보장 생성 옵션 설명 completions 실행해야 할 jobs의 수가 몇 개인지 지정 parallelism 병렬성. 동시 running되는 pod 수 activeDeadlineSeconds 지정 시간 내에 Job을 완료 옵션 설명 restartPolicy Never: Pod를 재시작, OnFailure: Container를 재시작 backoffLimit restartPolicy가 OnFailure일 경우 재시작 횟수를 지정 root@master:~# cat > job-exam.yaml apiVersion: .. 2021. 11. 23.
Kubernetes - StatefulSet StatefulSet 정의 Pod의 상태를 유지해주는 컨트롤러 Pod 이름 Pod의 볼륨(스토리지) 생성 root@master:~# cat > sf-nginx.yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: sf-nginx spec: replicas: 3 serviceName: df-nginx-service podManagementPolicy: Parallel selector: matchLabels: app: webui template: metadata: name: nginx-pod labels: app: webui spec: containers: - name: nginx-container image: nginx:1.14 root@master:~#.. 2021. 11. 22.
Kubernetes - ReplicaSet ReplicaSet 정의 ReplicationController 와 같은 역할을 하는 컨트롤러 ReplicationController 보다 풍부한 selector matchExpressions 연산자 표현 설명 In key와 values를 지정하고 key, value가 일치하는 Pod만 연결 NotIn key는 일치하고 value는 일치하지 않는 Pods에 연결 Exists key에 맞는 label의 pod를 연결 DoesNotExist key와 다른 label의 pod를 연결 실행방법 생성 root@master:~# cat > rs-nginx.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: rs-nginx spec: replicas: 3 selec.. 2021. 11. 21.
Kubernetes - ReplicationController ReplicationController 정의 요구하는 Pod의 개수를 보장하며 파드 집합의 실행을 항상 안정적으로 유지하는 것을 목표 요구하는 Pod의 개수가 부족하면 template 이용해 Pod를 추가 요구하는 Pod 수 보다 많으면 최근에 생성된 Pod를 삭제 기본 구조 selector replicas template 실행방법 생성 replicas를 3으로 설정하고 3개의 pod를 생성 root@master:~# cat > rc-nginx.yaml apiVersion: v1 kind: ReplicationController metadata: name: rc-nginx spec: replicas: 3 selector: app: webui template: metadata: name: nginx-pod.. 2021. 11. 19.
Kubernetes - static Pod (정적 파드) static Pod 란? API 서버없이 특정 노드에 있는 kubelet 데몬에 의해 직접 관리 /etc/kubernetes/manifests/ 디렉토리에 k8s yaml 파일을 저장시 적용됨 static pod 설정 파일 : /var/lib/kubelet/config.yaml static 파드 생성 1. master에서 현재 pod 조회 현재 생성된 파드가 존재하지 않음 root@master:~$ kubectl get pods -o wide No resources found in default namespace. 2. node1 에서 config 파일 확인 root@node1:~# cat /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v.. 2021. 11. 18.
kubernetes 아키텍쳐 Master Node 구성 설명 API Server ㆍ쿠버네티스 클러스터의 모든 작업을 제어하는 REST API Controller (컨트롤러) ㆍ클러스터를 설계한 상태로 유지 (파드 개수 유지) ㆍ백그라운드에서 클러스터 컨트롤러를 관리 ㆍAPI 서버를 이용하여 클러스터 상태를 모니터링 Scheduler (스케쥴러) ㆍ노드가 배정되지 않은 새로 생성된 Pod를 감지하고 그것을 어느 Node에서 실행될지를 선택 ㆍPod를 어떻게 Node에 배치할지를 예약 etcd ㆍ클러스터의 모든 정보를 저장하는 데이터 저장소 ㆍ고가용성을 가진 Key-Value 저장소 구조 Worker Node 구성 설명 kubelet ㆍ노드에서 실행되는 에이전트로 컨테이너가 Pod에서 실행중인지 확인 ㆍkubelet은 다양한 메커니즘을.. 2021. 10. 21.
728x90
반응형