Docker 13

kubenetes - 퍼시스턴트 볼륨(PV)과 퍼시스턴트 볼륨 클레임(PVC)

지금까지는 디플로인먼트의 각 포드는 별도의 데이터를 가지고 있지 않았으며, 단순히 요청에 대한 응답만 반환했다. 하지만 데이터베이스처럼 포드 내부에서 특정 데이터를 보유해야 하는 상태가 있는 애플리케이션의 경우에는 데이터를 어떻게 관리할지 고민해야한다. 즉 포드의 데이터를 영속적으로 저장하기 위한 방법이 필요하다. (docker의 볼륨) 쿠버네티스에서는 호스트에 위치한 디렉토리를 각 포드와 공유함으로써 데이터를 보전하는 것이 가능하지만 한계가 존재한다. 바로 포드에 장애가 생겨 다른 노드로 옮겨갔을 때 해당 데이터를 사용할 수 없는 문제점이다. 그래서 필요한 방법이 퍼시스턴트 볼륨을 사용하는 것이다. 개념 워커 노드들이 네트워크상에서 스토리지를 마운트해 영속적으로 데이터를 저장할 수 있는 볼륨을 의미 종..

Docker 2021.02.19

kubenetes 심화 : 인그레스(Ingress)

개념 인그레스는 일반적으로 외부에서 내부로 향하는 것을 지칭하는 단어이다. 예를 들어보면 인그레스 트래픽은 외부에서 서버로 유입되는 트래픽을 의미하며, 인그레스 네트워크는 인그레스 트래픽을 처리하기 위한 네트워크를 의미한다. 기본적인 기능 - 외부 요청의 라우팅 : /apple, /apple/red 등과 같이 특정 경로로 들어온 요청을 어떠한 서비스로 전달하는지 정의하는 라우팅 규칙을 설정할 수 있다. - 가상 호스트 기반의 요청 처리 : 같은 IP에 대해 다른 도메인 이름으로 요청이 도착했을 때, 어떻게 처리할 것인지 정의할 수 있다. - SSL/TLS 보안 연결 처리 : 여러 개의 서비스로 요청을 라우팅할 때, 보안 연결을 위한 인증서를 쉽게 적용할 수 있다. 등등 여러 가지의 기능이 있다. 인그레스..

Docker 2021.02.05

쿠버네티스 리소스의 관리와 설정 (네임스페이스, 컨피그맵, 시크릿)

이번 장에서는 네임스페이스, 컨피그맵, 시크릿의 사용 방법을 알아보겠다. 네임스페이스 쿠버네티스는 리소스를 존리적으로 구분하기 위해 네임스페이스라는 오브젝트를 제공한다. (포드, 페플리카셋, 디플로이먼트, 서비스 등과 같은 쿠버네티스 리소스들이 묶여 있는 하나의 가상 공간 또는 그룹이라고 이해하자.) 보통 namespace를 ns라고 줄려서 사용 가능하다. # default에 존재하는 포드를 확인하려면 이때 --namespace 대신 -n 사용가능 kubectl get pods --namespace default kubectl get pods -n kube-system default 는 우리가 쿠버네티스를 성치하면 자동으로 사용하도록 설정되는 네임스페이스로 kubectl 명령어로 쿠버네티스 리소스를 사용..

Docker 2021.01.31

kubernetes 시작하기

모든 리소스는 오브젝트 형태로 관리된다. 컨테이너의 집합 = Pods 집합을 관리하는 컨트롤러 = Replica Set 사용자 = Service Acoount 노드 = Node 하나의 오브젝트로 사용할 수 있음 # 사용할 수 있는 오브젝트 확인 kubectl api-resources # 특정 오브젝트의 간단한 설명 kubectl explian 오브젝트_이름 전부다 다루지는 않고 자주 사용하는 것 위주로 설명하겠다. 쿠버네티스는 명령어로도 사용할 수 있지만, YAML 파일을 더 많이 사용한다. 컨테이너, 설정값, 비밀값등 모든 것을 YAML 파일로 작성하기 때문에 쿠버네티스를 잘 사용한다는 것은 YAML 파일을 잘 작성하는 것이다. 쿠버네티스는 여러 개의 컴포넌드로 구성돼 있다. 크게 마스터 노드와 워커 ..

Docker 2021.01.29

Kubernetes 설치(쿠버네티스)

쿠버네티스 : 그리스어로 조타수라는 뜻 오늘날 사실상 표준으로 사용되고 있는 컨테이너 오케스트레이션 도구 도커 스웜처럼 여러 대의 도커 호스트를 하나의 클러스터로 만들어 준다는 점은 같지만, 세부적인 기능을 더욱 폭넓게 제공하고 있다. 장점 1. 서버 자원 클러스터링, 마이크로 서비스 구조의 컨테이너 배포등 서비스 운영에 필요한 대부분의 오케스트레이션 기능을 폭넓게 지원 2. 많은 오픈소스 진영에서 쿠버네스트의 소스코드에 기여하고 있음 (성능, 안정성 면에서 신뢰) 3. 영속성 볼륨, 스케줄링, 장야 복구, 오토 스케일링 등 컨테이너 기반의 클라우드를 운영할 때 필요한 대부분의 컴포넌트를 사용자카 커스터마이징 가능 3. CNCF 및 다른 클라우드 운영도구들과 쉽게 연동, 확장성이 높음 하지만 다른 오케스..

Docker 2021.01.25

Docker 스웜과 서비스

호스트에서 도커 엔진을 구동하다가 CPU, 메모리, 디스크 용량과 같은 자원이 부족하면 어떻게 해결하나 ?? 1. 매우 성능이 좋은 서버를 새로 산다. 2. 서버를 클러스터로 만들어 자원을 벙렬로 확장한다. ex. 필요 자원 32GB 1. 32GB의 서버를 삼 2. 8GB 서버를 4개 사용함 1번의 방법은 자원의 확장성, 비용측면에서 좋은 해답이 아님 2번방법이 필요한 확장하기도 좋고 비용측에서도 더 좋은 해결방안임 그러나 여러 대의 서버를 하난의 자원 풀로 만드는 것은 어려운 작업이다. 1. 서버를 발견 2. 컨테이너 할당법 3. 클러스터 내의 서버가 다운됐을 때 고가용성 보장 문제 등등 그래서 제공하는 것이 도커 스웜이다. ( 지금은 많이 사용하지 않음, 하지만 개념은 알아야함 ) 스웜 클래식과 도커..

Docker 2021.01.20

도커 컴포즈

도커 컴퍼즈란?? 여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리하는 것 도커 컴포즈를 사용하는 이유 여러 개의 컨테이너가 하나의 애플리케이션을 동작할 때 이를 테스트하려면 각 컨테이너를 하나씩 생성해야 한다. 매번 run 명령어를 여러 번 사용할 수 있지만 각 컨테이너가 제대로 동작하는지 확인하는 테스트 단계에서는 번거롭다. 즉 매번 실행 따로 하기 귀잖다. 그래서 여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리하는 것이 편리하다. 도커 컴포즈는 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작한다. 또한 설정 파일에 정의된 서비스의 컨테이너 수를 유동적으로 조절할 수 있으며 컨테이너의 서비스 디스커버리도 자동으로..

Docker 2021.01.12

Docker File

1. 이미지를 생성하는 법 개발한 애플리케이션을 컨테이너화를 할 때 가장 먼저 생각나는 방법은 아래와 같다. 1. 아무것도 존재하지 않는 이미지(우분투, centOS 등)로 컨테이너를 생성 2. 애플리케이션을 위한 환경을 설치하고 소스코드 등을 복사해 잘 동작하는 것을 확인 3. 컨테이너를 이미지로 커밋 위와 같은 방법은 애플리케이션이 동작하는 환경을 구성하기 위해 일일이 수작업으로 패키지를 설치하고 소스코드를 깃에서 복제하거나 호스트에서 복제해야한다. (너무 귀잖다.) 하지만 도커는 위와 같은 일련의 과정을 손쉽게 기록하고 수행할 수 있는 빌드 명령어를 제공한다. 완성된 이미지를 생성하기 위해 컨테이너에 설치해야 하는 패키지, 추가해야 하는 소스코드, 실행해야 하는 명령어와 셸 스크립트 등을 하나의 파..

Docker 2021.01.04

Docker 이미지

모든 컨테이너는 이미지를 기반으로 생성되므로 이미지를 다루는 방법을 꼭 알고 있어야 한다. 이미지의 이름을 구성하는 저장소, 이미지 이름, 태그를 잘 관리하는 것뿐만 아니라 이미지가 어떻게 생성되고 삭제되는지 이미지의 구조는 어떻게 돼 있는지 알아보자. 도커는 기본적으로 도커 허브라는 중앙 이미지 저장소에서 이미지를 내려받는다. 기본적으로 docker create, docker run, docker pull의 명령어로 만들고 검색하고 내려받는다. 대부분이 이미 제공하거나 다른 사람들이 제공했기 때문에 APP 이미지를 직접 만들지 않아도 손쉽게 사용할 수 있다. 내가 사용하고 싶은 이미지가 있는지 docker search (이미지) 명령어를 통해 찾아볼 수 있다. 1. 도커 이미지 생성 1. 컨태이너 생성..

Docker 2021.01.04

컨테이너 자원 할당 제한

가장 간단한 방법은 docker inspect 컨테이너name 명령어를 쓰는 것이다. | grep \"Memory\" : 메모리 확인 run 명령어에서 설정된 컨테이너에서 할당 자원을 제한하거나 업데이트 할 수 있는 방법 docker update [변경할 자원 제한] [컨테이너name] 메모리 제한 ( 너무 작은 메모리는 할당하면 메모리 부족으로 컨테이너 실행되지 않음 ) docker run -d --memory="1g" --name memory_1g nginx CPU 제한 컨테이너에 가중치를 설정해 해당 컨테이너가 CPU를 얼마나 사용할 수 있는지 나타내준다. (비율로 생각하면 됨) docker run -d --cpu-shares 1024 --name cpu_share nginx --cpiset-cpu..

Docker 2020.12.30