728x90 Kubernetes42 [데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - 데몬셋 데몬셋, 노드당 포드 하나씩 데몬셋 레플리케이션컨트롤러와 레플리카셋은 무작위 노드에 포드를 생성 데몬셋은 각 하나의 노드에 하나의 포드만을 구성 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. [데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심개념-Statefulset Statefulset https://blog.naver.com/isc0304/221885403537 스테이트풀셋(Statefulset)이란? 애플리케이션의 상태를 저장하고 관리하는 데 사용되는 쿠버네티스 객체다 기존의 포드를 삭제하고 생성할 때 상태가 유지되지 않는 한계가 있다 때문에 포드를 삭제하고 생성하면 완전히 새로운 가상환경이 시작된다 하지만 필요에 따라 이러한 포드의 상태를 유지하고 싶을 수 있다 응용프로그램의 로그나 기타 다른 정보들을 함께 저장하고자 하는 경우 단순히 PV를 하나 마운트해 이를 유지하기는 어렵다 스테이트풀셋으로 생성되는 포드는 영구 식별자를 가지고 상태를 유지시킬 수 있다 스테이트풀셋를 사용하고 자하는 케이스 다음과 같다 안정적이고 고유한 네트워크 식별자가 필요한 경우 안정적.. 개발강의정리/DevOps 2021. 1. 3. [데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심개념-Storage Storage 볼륨(Volume) 컨테이너가 외부 스토리지에 액세스하고 공유하는 방법 포드의 각 컨테이너에는 고유의 분리된 파일 시스템 존재 볼륨은 포드의 컴포넌트이며 포드의 스펙에 의해 정의 독립적인 쿠버네티스 오브젝트가 아니며 스스로 생성, 삭제 불가 각 컨테이너의 파일 시스템의 볼륨을 마운트하여 생성 볼륨의 종류 임시 볼륨 로컬 볼륨 네트워크 볼륨 네트워크 볼륨 (클라우드 종속적) emptyDir hostpath local iSCSI NFS cephFS glusterFS ... gcePersistentDisk awsEBS azureFile ... 임시 볼륨: 포드가 사라지면 함께 파괴되는 임시 볼륨 포드 내부에서만 컨테이너와 공유하기 위해서 사용 로컬 볼륨: 공유 폴더 같은 개념, 로컬에서만 사용가.. 개발강의정리/DevOps 2021. 1. 3. [데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심개념-Network Network 쿠버네티스 네트워크 모델 한 포드에 있는 다수의 컨테이너끼리 통신 포드끼리 통신 포드와 서비스 사이의 통신 외부 클라이언트와 서비스 사이의 통신 실습 전 설치: sudo apt install net-tools 한 포드에 있는 다수의 컨테이너끼리 통신 pause 명령을 실행해 아무 동작을 하지 않는 빈 컨테이너를 생성 인터페이스를 공유 포트를 겹치게 구성하지 못하는 것이 특징 Docker의 기능을 사용해 쿠버네티스 컨테이너를 관찰 각 포드마다 하나의 pause 이미지 실행 $ sudo docker ps | grep pause 78c434040e28 k8s.gcr.io/pause:3.2 "/pause" 2 hours ago Up 2 hours k8s_POD_weave-net-qq5bk_kube.. 개발강의정리/DevOps 2021. 1. 3. [데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-Services Services 포드의 문제점 포드는 일시적으로 생성한 컨테이너의 집합 때문에 포드가 지속적으로 생겨났을 때 서비스를 하기에 적합하지 않음 IP 주소의 지속적인 변동, 로드밸런싱을 관리해줄 또 다른 개체가 필요 이 문제를 해결하기위해 서비스라는 리소스가 존재 서비스의 요구사항 외부 클라이언트가 몇 개이든지 프론트엔드 포드로 연결 프론트엔드는 다시 백엔드 데이터베이스로 연결 포드의 IP가 변경될 때마다 재설정 하지 않도록 해야함 서비스의 생성방법 kubectl의 expose가 가장 쉬운 방법 YAML을 통해 버전 관리 가능 apiVersion: v1 kind: Service metadata: name: http-go-svc spec: ports: - port: 80 targetPort: 8080 selec.. 개발강의정리/DevOps 2020. 12. 27. [데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-Namespaces Namespaces 네임스페이스란? 리소스를 각각의 분리된 영역으로 나누기 좋은 방법 여러 네임스페이스를 사용하면 복잡한 쿠버네티스 시스템을 더 작은 그룹으로 분할 멀티 테넌트(Multi-tenant) 환경을 분리하여 리소스를 생산, 개발, QA 환경 등으로 사용 리소스 이름은 네임스페이스 내에서만 고유 명칭 사용 현재 클러스터의 기본 네임스페이스 확인하기 $ kubectl get ns NAME STATUS AGE default Active 75m kube-node-lease Active 75m kube-public Active 75m kube-system Active 75m 각 네임스페이스 상세 내용 확인 kubectl get 을 옵션없이 사용하면 default 네임스페이스에 질의\ 다른 사용자와 분리.. 개발강의정리/DevOps 2020. 12. 27. 이전 1 2 3 4 다음 💲 추천 글 728x90