728x90 개발강의정리/DevOps64 [데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - 멀티플 스케줄러 멀티플 스케줄러 멀티 스케줄러의 필요성 기본 스케줄러가 사용자의 필요에 맞지 않으면 사용자 고유의 스케줄러를 구현 가능 기본 스케줄러와 함께 여러 스케줄러를 동시에 실행 가능 각 포드에 사용할 스케줄러를 지정하는 방식도 가능 스케줄러의 사용 옵션 https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/ 스케줄러를 실행하는 yaml 파일이 너무 크니 복붙으로 해결 https://Kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ 이미지의 경우 에러가 발생 다음 이미지를 사용 k8s.gcr.io/kube-scheduler-amd64:v1... 개발강의정리/DevOps 2021. 1. 19. [데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - 수동 스케줄링 수동 스케줄링: 원하는 포드를 원하는 노드에 포드 메뉴얼 스케줄링 특수한 환경의 경우 특정 노드에서 실행되도록 선호하도록 포드를 제한 일반적으로 스케줄러는 자동으로 합리적인 배치를 수행하므로 이러한 제한은 필요하지 않음 더 많은 제어가 필요할 수 있는 몇 가지 케이스 SSD가 있는 노드에서 포드가 실행하기 위한 경우 블록체인이나 딥러닝 시스템을 위해 GPU 서비스가 필요한 경우 서비스의 성능을 극대화하기 위해 하나의 노드에 필요한 포드를 모두 배치 nodeName 필드를 사용한 매뉴얼 스케쥴링 포드를 강제로 원하는 node를 스케줄링 할 수 있음 spec 아래에 nodeName: work1과 같이 노드 이름 설정 apiVersion: v1 kind: Pod metadata: name: http-go sp.. 개발강의정리/DevOps 2021. 1. 19. [데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - 스태틱 포드 스태틱 포드 스태틱 포드의 필요성 스태틱 포드: kubelet이 직접 실행하는 포드 각각의 노드에서 kubelet에 의해 실행 포드들을 삭제할때 apiserver를 통해서 실행되지 않은 스태택 포드(static pod)는 삭제 불가 즉, 노드의 필요에 의해 사용하고자 하는 포드는 스태틱 포드로 세팅 다음 명령어 들을 사용하여 실행하고자 하는 static pod의 위치를 설정 가능 $ sudo systemctl status kubelet kubelet.service - kubelet: The Kubernetes Node Agent Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled) Drop-In: /etc.. 개발강의정리/DevOps 2021. 1. 19. [데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - 데몬셋 데몬셋, 노드당 포드 하나씩 데몬셋 레플리케이션컨트롤러와 레플리카셋은 무작위 노드에 포드를 생성 데몬셋은 각 하나의 노드에 하나의 포드만을 구성 kube-proxy가 데몬셋으로 만든 쿠버네티스에서 기본적으로 활동중인 포드 데몬셋 예제 https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/#writing-a-daemonset-spec kubectl apply -f https://k8s.io/examples/controllers/daemonset.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-elasticsearch namespace: kube-system labels: .. 개발강의정리/DevOps 2021. 1. 19. [데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - 시스템 리소스 요구사항과 제한 설정 시스템 리소스 요구사항과 제한 설정 컨테이너에서 리소스 요구사항 CPU와 메모리는 집합적으로 컴퓨팅 리소스 또는 리소스로 부름 CPU 및 메모리 는 각각 자원 유형을 지니며 자원 유형에는 기본 단위를 사용 리소스 요청 설정 방법 spec.containers[].resources.requests.cpu spec.containers[].resources.requests.memory 리소스 제한 설정 방법 spec.containers[].resources.limits.cpu spec.containers[].resources.limits.memory CPU는 코어 단위로 지정되며 메모리는 바이트 단위로 지정 자원 유형 단위 CPU m(millicpu) Memory Ti, Gi, Mi, Ki, T, G, M, K.. 개발강의정리/DevOps 2021. 1. 19. [데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - Init 컨테이너 Init 컨테이너 init 컨테이너의 특징 포드 컨테이너 실행 전에 초기화 역할을 하는 컨테이너 완전히 초기화가 진행된 다음에야 주 컨테이너를 실행 Init 컨테이너가 실패하면, 성공할때까지 포드를 반복해서 재시작 restartPolicy에 Never를 하면 재시작하지 않음 이 yaml은 mydb와 myservice가 탐지될 때까지 init 컨테이너가 멈추지 않고 돌아감 https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#init-containers-in-use pod-init-container.yaml apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec.. 개발강의정리/DevOps 2021. 1. 19. [데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - 한 포드에 멀티 컨테이너 한 포드에 멀티 컨테이너 하나의 포드에 다수의 컨테이너를 사용 하나의 포드를 사용하는 경우 같은 네트워크 인터페이스와 IPC, 볼륨 등을 공유 이 포드는 효율적으로 통신하여 데이터의 지역성을 보장하고 여러 개의 응용프로그램이 결합된 형태로 하나의 포드를 구성할 수 있음 $ kubectl exec -it two-containers -- cat /usr/share/nginx/html/index.html Defaulting container name to nginx- container. Use 'kubectl describe pod/two-containers - n default' to see all of the containers in this pod. Hello from the debian containe.. 개발강의정리/DevOps 2021. 1. 19. [데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - 초기 명령어 및 아규먼트 전달과 실행 초기 명령어 및 아규먼트 전달과 실행 초기 실행시 명령어와 아규먼트를 전달 Pod을 생성할 때 spec.containers.command와 args에 실행하기 원하는 인자를 전달하면 컨테이너가 부팅된 뒤 실행 https://kubernetes.io/ko/docs/tasks/inject-data-application/define-command-argument-container/#%ED%8C%8C%EB%93%9C%EB%A5%BC-%EC%83%9D%EC%84%B1%ED%95%A0-%EB%95%8C-%EC%BB%A4%EB%A7%A8%EB%93%9C%EC%99%80-%EC%9D%B8%EC%9E%90%EB%A5%BC-%EC%A0%95%EC%9D%98%ED%95%98%EA%B8%B0 pod-command-args.y.. 개발강의정리/DevOps 2021. 1. 19. [데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - 애플리케이션 변수 관리 애플리케이션 변수 관리 도커 컨테이너의 환경 설정 쿠버네티스의 환경 변수는 YAML 파일이나 다른 리소스로 전달 하드 코딩된 환경 변수는 여러 환경에 데이터를 정의하거나 유지, 관리가 어려움 ConfigMap은 외부에 컨테이너 설정을 저장할 수 있음 환경변수를 포드에 저장하는 방법 https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/#define-an-environment-variable-for-a-container envars.yaml apiVersion: v1 kind: Pod metadata: name: envar-demo labels: purpose: demonstrate-enva.. 개발강의정리/DevOps 2021. 1. 19. [데브옵스를 위한 쿠버네티스 마스터] VisualStudio Code 설치와 활용 VS Code 설치와 활용 사용한 운영체제는 Ubuntu 20.04버전이며 쿠버네티스 환경은 ~ 버전이다 VirtualBox에 Kubernetes가 설치된 상태로 진행 여기서는 VirtualBox Kubernetes 환경에서 진행하지만 클라우드 환경이나 로컬 쿠버네티스도 충분히 사용 가능함 다만 애저 클라우드 환경에 경우에는 프로비저닝 할 수 있는 추가 툴을 설치해야 함 1. 우분투에 VS Code 설치 우분투에 VS Code를 설치하는 가장 간단한 방법은 snap을 사용해서 설치하는 것 물론 visual studio 사이트를 직접 방문해 deb 파일을 받고 dpkg로 설치하는 방법도 있음 여기서는 snap을 사용해 설치함 $ sudo snap install --classic code # or code-.. 개발강의정리/DevOps 2021. 1. 19. [Apache kafka 조금 아는 척하기] 카프카 컨슈머 https://www.youtube.com/watch?v=xqrIDHbGjOY&list=PLwouWTPuIjUgr29uSrSkVo8PRmem6HRDE&index=1 컨슈머 토픽 파티션에서 레코드 조회 Properties prop = new Properties(); prop.put("bootstrap.servers","localhost:9092") prop.put("group.id","group1"); // group.id 지정 prop.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); prop.put("value.serializer", "org.apache.kafka.common.serialization.Str.. 개발강의정리/DevOps 2021. 1. 5. [Apache kafka 조금 아는 척하기] 카프카 프로듀서 https://www.youtube.com/watch?v=geMtm17ofPY&list=PLwouWTPuIjUgr29uSrSkVo8PRmem6HRDE&index=2 프로듀서 토픽에 메시지 전송 토픽, 키, 값 프로듀서를 사용해서 메시지를 보내는 코드 // Properties를 통해서 ack, batch사이즈 등의 설정 함 Properties prop = new Properties(); prop.put("bootstrap.servers", "kafka01:9092,kafka01:9092,kafka01:9092"); prop.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); prop.put("value.serial.. 개발강의정리/DevOps 2021. 1. 5. 이전 1 2 3 4 5 6 다음 💲 추천 글 728x90