[Docker] 도커 네트워크 도커 컨테이너 및 서비스는 도커 네트워크를 통해 격리된 컨테이너 간의 네트워크 연결뿐만 아니라 도커 외의 다른 애플리케이션 워크로드와도 연결이 가능하다. 이때 도커 네트워크의 하위 시스템 연결을 위해 도커 네트워크 드라이버를 사용하면 상호 간 통신이 가능하다. 1. 도커 네트워크 인터페이스 Networking overview docs.docker.com 위 docs의 네트워크 정의는 다음과 같다. 도커 설치 시 기본적으로 제공되는 docker0은 소프트웨어적으로 구현된 가상 이더넷 브릿지 네트워크고, 이것을 통해 격리된 컨테이너들의 상호 간 통신을 제공한다. 별도의 브릿지 네트워크를 생성하여 연결값으로 설정하지 않는 한 실행되는 모든 컨테이너는 docker0 브릿지에 연결되..
[Docker] 컨테이너 리소스 도커 컨테이너를 생성할 때, 리소스 제한이 가능하다. CPU, Memory 등의 리소스를 제한하는 방법을 알아보자 테스트용으로 컨테이너를 하나 띄워놓고 진행을 해보자 docker run --name nginx -d nginx:latest 컨테이너의 리소스는 cgroup의 리소스를 이용해서 할당한다. 💡cgroups (control groups) 프로세스들의 자원의 사용 (CPU, 메모리, 입출력, 네트워크 등)을 제한하고 격리시키는리눅스 커널 기능 단일 또는 태스크 단위의 프로세스 그룹에 대한 자원 할당을 제어한다. Memory 1. 메모리 할당 먼저 메모리의 limit을 확인해보자 docker stats nginx 아무런 설정을 하지 않고, 컨테이너를 생성했을 시 메모리..
[K8s] NodePort VS LoadBalancer VS Ingress 너무 헷갈려서 정리..😢 ClusterIP 클러스터 내의 다른 앱이 접근할 수 있게 해준다. 외부 접근이 되지 않는다. 쿠버네티스 proxy를 통해선 접근이 가능하다. 외부로 노출되지 않고 클러스터 내에서만 접근 가능한 서비스에 적합하다. ExternalName 외부서비스를 쿠버네티스 내부에서 호출하고자 할 때 사용한다. Selector가 아닌 DNS 이름을 사용하는 특수한 서비스다. NodePort 서비스에 외부 트래픽을 직접 보낼 수 있는 방법이다. 모든 Node에 특정 포트를 열어두고, 이 포드로 보내지는 모든 트래픽을 서비스로 포워딩한다. 개발 및 테스트 환경에서 주로 사용된다. LoadBalancer Load Balanc..
[K8s] Helm Helm https://helm.sh/docs/ Docs Home Everything you need to know about how the documentation is organized. helm.sh 쿠버네티스 패키지 매니저 Helm의 기능 새로운 chart 생성 chart로 chart archive(tgz) files로 패키지화 하기 chart가 저장되는 chart 저장소와 상호작용 kubernetes cluster에 chart의 설치 및 제거, 릴리즈 주기 관리 Helm의 구성 Chart : Helm 패키지, k8s application, tool, service를 구동하는데 필요한 resource의 집합 Repository : helm chart를 모아두고 용유하는 저장소 ..
[Docker] 도커 스토리지 볼륨 마운트 도커 볼륨 마운트를 사용하면 호스트의 폴더나 파일을 컨테이너에 연결할 수 있기 때문에, 컨테이너 내부에서 생성되는 데이터를 호스트의 파일 시스템에 저장할 수 있음 컨테이너가 종료되더라도 데이터를 유지할 수 있기 때문에, 데이터 지속성이 보장됨 사용법 my-nginx라는 컨테이너를 실행시키면서 컨테이너의 /usr/share/nginx/html 이라는 경로와 /home/test_mount 라는 경로가 mount 됨 docker run -d --name my-nginx -v /home/test_mount:/usr/share/nginx/html nginx ⚠ 이미 실행 중인 컨테이너에 volumn을 추가하는 기능은 도커에서 지원하지 않음 이미 실행 중인 컨테이너에 볼륨..
[Docker] 도커 이미지 빌드 (Docker Image Build) 도커 파일 (Dockerfile) : 컨테이너 빌드를 위한 명령어의 집합, 다양한 인스트럭션을 지원하고 대소문자를 구분하지 않음 ❗ 베이스 이미지는 필수 FROM 컨테이너의 베이스 이미지 (OS) LABEL 컨테이너 빌더의 정보, 버전과 같은 부가정보 제공 RUN 컨테이너 빌드를 위해 base image에서 실행 할 Command ADD 컨테이너 빌드 시 호스트의 파일을(tar, url 포함) 컨테이너로 푸시 COPY 컨테이너 빌드 시 호스트의 파일을 컨테이너로 복사 WORKDIR 컨테이너 빌드 시 명령이 실행될 작업 디렉토리 설정 ENV 환경 변수 지정 USER 명령 및 컨테이너 실행 시 적용할 유저 설정 EXPOSE 컨테이너 동작..
쿠버네티스 (Kubernetes) Volume 관리 Kubernetes Volume 파드 내의 컨테이너가 종료되더라도 파일 시스템이 유지되도록 하고 싶다면? 쿠버네티스 볼륨을 정의해서 사용 가능 여러 개의 컨테이너가 볼륨을 공유해서 사용할 수도 있음 Volumes On-disk files in a container are ephemeral, which presents some problems for non-trivial applications when running in containers. One problem is the loss of files when a container crashes. The kubelet restarts the container but with a clean state. A ..
쿠버네티스 (Kubernetes) Ingress 인그레스 컨트롤러 (Ingress Controller) 🔎 OSI 7계층 L1 : cable L2: MAC Address (LAN) L3: IP (DIP/SIP) L4: Port (SPord, Dpord) . . L7: Message (GET) LoadBalancer L4 : Port Number와 IP만 보기떄문에 Path를 못찾음 L7 : Path를 찾을 수 있음 Ingress Controller : L4 LoadBalancer를 쓰더라도 Rule을 통해 path를 찾을 수 있게 해줌 서비스 인그레스 (Service Ingress) : HTTP나 HTTPS를 통해 클러스터 내부의 서비스를 외부로 노출시키는 API 인그레스의 기능 외부 URL을 제공 트래..
쿠버네티스 (Kubernetes) 서비스 쿠버네티스 네트워크 Pod Network : CNI에서 관리하는 Pod 간 통신에 사용되는 클러스터의 전체 네트워크 Service Network : Service discovery를 위해 Kube-proxy가 관리하는 Cluster-wide 범위의 Virtual IP 🔎 CNI : 컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기 위한 표준 컨테이너들의 네트워크를 연결 컨테이너 삭제 시 할당된 자원을 제거 쿠버네티스 서비스 파드를 통해 실행되고 있는 어플리케이션을 네트워크에 노출 시키는 가상의 컴포넌트 파드가 외부와 통신할 수 있도록 클러스터 내부에서 고정적인 IP를 갖는 서비스를 이용할 수 있음 쿠버네티스 서비스 유형 1️⃣ ClusterIP (Priv..
쿠버네티스 (Kubernetes) 컨트롤러 (2) DaemonSet DaemonSet 전체 노드에서 Pod가 한 개씩 실행되도록 보장 log 수집기, 모니터링 에이전트와 같은 프로그램 실행 시 적용 apiVersion: apps/v1 kind: DaemonSet metadata: name: ds-nginx spec: selector: matchLabels: app: web template: metadata: name: nginx-pod labels: app: web spec: containers: - image: nginx:1.14 name: nginx StatefulSet StatefulSet Pod의 상태를 유지해주는 컨트롤러 애플리케이션의 상태를 저장하고 관리 ==> 각 Pod에 대한 고정 ID를 ..
쿠버네티스 컨트롤러 (1) 쿠버네티스 컨트롤러 쿠버네티스는 선언적 선언을 하면 그 선언에 클러스터 상태를 맞추고 감시하며 항상 제어 쿠버네티스 Pod를 관리하는 역할을 함 컨트롤러 로보틱스와 자동화에서 컨트롤 루프 는 시스템 상태를 조절하는 종료되지 않는 루프이다. 컨트롤 루프의 예시: 실내 온도 조절기 사용자는 온도를 설정해서, 사용자가 의도한 상태 를 온도 조절 kubernetes.io Replication Controller Replication Controller Pod가 항상 실행되도록 유지하는 Kubernetes Resource 어떤 이유로든 Pod가 사라지면 누락된 Pod를 감지하고 대체 Pod를 만듦 Template 필수 요소 세가지 Label Selector Replica Count Po..