본문 바로가기

kubernetes32

Kubernetes::네트워킹 (Networking) 스위칭 (Switching) host system 의 interface 확인 $ ip link 1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback ... 2: enp0s3: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether ... ... interface 의 IP Address 확인 $ ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback ... inet 127.0.0.1/8 scope.. 2023. 12. 19.
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) - 정적 파드 정적 파드 (Static Pods) 정적 파드는 특정 노드의 kubelet 데몬에서 직접 관리한다. kubelet은 각 정적 파드를 감시하고 실패하면 다시 시작한다. 정적 포드는 항상 하나의 특정 노드에서 바인딩된다. 파드 이름에는 앞에 하이픈이 있는 노드 호스트 이름이 접미사로 붙는다. 정적 파드 (Static Pods) 생성 방법 정적인 파드를 생성할 node에 접속 $ ssh node01 nginx 정적인 파드 node01에 생성 $ cat > /etc/kubernetes/manifests/static-web.yaml apiVersion: v1 kind: Pod metadata: name: static-web labels: role: myrole spec: containers: - name: web.. 2023. 12. 19.
Kubernetes::스케쥴링 (Scheduling) - 데몬셋 데몬셋 (Daemon Sets) 개요 클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러이다. 간략히 말해 각 노드에 항상 떠있는 데몬을 이야기한다. DaemonSet는 모든(또는 일부) 노드가 Pod의 복사본을 실행하도록 한다. 노드가 클러스터에 추가되면 Pod가 여기에 추가된다. 클러스터에서 노드가 제거되면 해당 포드는 가비지 수집된다. DaemonSet를 삭제하면 생성된 Pod가 자동적으로 삭제된다. 용도 다음과 같은 용도로 사용할 수 있다. 모든 노드에서 클러스터 저장소 데몬 실행 모든 노드에서 로그 수집 데몬 실행 모든 노드에서 노드 모니터링 데몬 실행 시나리오 Deamonset 생성 $ cat > daemonset.yaml apiVersion: apps/v1 kind: DaemonS.. 2023. 12. 19.
Kubernetes::스케쥴링 (Scheduling) - Resource Limit Resource Limit 노드에서 사용할 수 있는 리소스가 충분하지 않은 경우 kubernetes는 pod 예약을 유지하고 Pending 상태가 된다. Describe로 조회를 해보면 어떤 리소스가 부족한지 이유를 알 수 있다. Resource Requirements 파드 내의 컨테이너에 0.5 CPU 및 256Mi 메모리가 필요하다고 가정하자. 이를 컨테이너에 대한 리소스 요청이라고 한다. 파드 내의 애플리케이션에 기본 리소스보다 더 많은 리소스가 필요한 경우 파드 정의 파일에서 설정해야 한다. apiVersion: v1 kind: Pod metadata: name: simple-webapp-color labels: name: simple-webapp-color spec: containers: - n.. 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 - 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 - pod resource 요청 및 제한 pod resource 요청 및 제한 Resource Requests 파드를 실행하기 위한 최소 리소스 양을 요청 Resource Limits 파드가 사용할 수 있는 최대 리소스 양을 제한 Memory limit을 초과해서 사용되는 파드는 종료 (OOM Kill)되며 다시 스케줄링 된다. pod 실행방법 실행방법 root@master:~# kubectl get pods No resources found in default namespace. root@master:~# cat > nginx.yaml apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx-container image: nginx:1.14 ports:.. 2021. 11. 18.
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 - namespace (네임스페이스) namespace란? namepace 정의 클러스터 하나를 여러 개의 논리적인 단위로 나누어서 사용 쿠버네티스 클러스터 하나를 여러 팀이나 사용자가 함께 공유 용도에 따라 실행해야 하는 앱을 구분할 때 사용 namepace 명령어 namespace 조회 root@master:~# kubectl get namespaces NAME STATUS AGE default Active 3d23h kube-node-lease Active 3d23h kube-public Active 3d23h kube-system Active 3d23h namespace 생성 root@master:~# kubectl create namespace blue namespace/blue created root@master:~# kubect.. 2021. 11. 15.
Kubernetes - kubectl 명령어 실습 kubectl 개념 kubectl 이란? 쿠버네티스 API에 요청할때 사용하는 명령어 kubectl 명령어 구조 kubectl [command] [TYPE] [NAME] [flags] command : 자원에 실행할 명령 (create, get, delete, edit ...) TYPE : 자원의 타입 (node, pod, service ...) NAME : 자원의 이름 flags : 부가적으로 설정할 옵션 (--help, -o options) 예) kubectl get pod webserver -o wide webserver 이름의 POD를 상세히 조회한다. kubectl - node 명령어 node 조회하기 root@master:~# kubectl get nodes NAME STATUS ROLES A.. 2021. 11. 14.
728x90
반응형