쿠버네티스21 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 - 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 - 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. 이전 1 다음 728x90 반응형