Kubernetes 장점

 

·       Version :

 

 쿠버네티스(Kubernetes) 환경에서는 컨테이너에 애플리케이션에 필요한 모든 항목이 포함되어 있기 때문에 시스템 관리자가 애플리케이션을 실행하기 위해 아무것도 설치할 필요가 없다.

·       애플리케이션 배포 단순화 : 쿠버네티스는 모든 워커 노드를 단일 플랫폼으로 제공하므로 애플리케이션 개발자는 자체적으로 배포할 있으며 클러스터를 구성하는 서버에 대해서 필요가 없다. 특히 특정 컨테이너가  SSD에서만 실행되거나 또는 HDD에서만 실행되어야 하는  경우처럼 특정 리소스가 필요한 경우 쿠버네티스 노드에서 필요한 리소스가 있는 노드를 선택해서 배포할 있다.

·       효율적인 하드웨어 활용 : 쿠버네티스환경에서 애플리케이션을 배포,실행하면 애플리케이션 리소스 요구사항에 따라 사용 가능한 가장 적합한 노드가 선택되어 할당된다. 또한 특정 노드에 애플리케이션을 종속시키지 않는다면 클러스터를 자유럽게 이동할 있어 리소스 가용 상태에 따라 자동으로 이동하거나 매치하여 사용할 있다.

·       자동 복구 모니터링 : 특정 클러스터에 종속되지 않으면 자유롭게 클러스터를 이동할 있기 때문에 이러한 장점으로 인해 모니터링 중에 특정 노드에 장애가 발생하면 자동으로 다른 노드에 애플리케이션이 재배치 되어 실행되기 때문에 야간이나 장애 발생시 즉시 대응할 필요가 없다.

·     오토스케일링 : 쿠버네티스는 애플리케이션에서 사용하는 리소스를 모니터링 하고 애플리케이션에서 실행되는 인스턴스 수를 조정하도록 지시할 있다.

·       개발 환경 단순화 : 애플리케이션이 개발 운영 환경이 동일하기 때문에 개발자는 본인 컴퓨터에서 개발하고 버그를 수정하고, 테스트한 완성된 애플리케이션 환경 그대로 운영 환경에서 실행할수 있다.

 

 

2021-07-30 / Sungwook Kang / https://sungwookkang.com

 

 

Kubernetes, 쿠버네티스

Kubernetes 마스터 노드, 워커 노드

 

·       Version :

 

 쿠버네티스(Kubernetes) 클러스터에서 마스터 노드는 전체 쿠버네티스 시스템을 관리하고 통제하는 쿠버네티스 컨트롤 플레인을 관장한다. 워커 노드는 실제 배포하고자 하는 애플리케이션 실행을 담당한다.

마스터 노드(컨트롤 플레인)에서는 클러스터를 관리하고 클러스터의 기능을 실행한다. 단일 마스터 노드에서 실행하거나 여러 노드로 분할 복제되어 고가용성을 보장할 있는 여러 구성요소로 구성 있다.

·       API Server : 사용자와 컨트롤 플레인과 통신하는 쿠버네티스 API

·       Scheduler : 애플리케이션을 예약하는 스케줄러로, 배포 가능한 구성 요서에 워커 노드 할당을 담당

·       Control Manager : 구성 요소 복제, 워커 노드 추적, 노드 장애 처리 클러스터 기능을 실행

·       etcd : 클러스터 구성을 저장하는 분산 데이터 스토리지  

 

워커 노드는 컨테이너화된 애플리케이션을 실행하는 시스템으로 서비스 실행, 모니터링을 제공한다.

·       Kubelet : API 서버와 통신하고 노드에서 컨테이너를 관리

·       Kube-proxy : 애플리케이션 구성 요소 간에 네트워크 트래픽을 분산하는 쿠버네티스 서비스 프록시

 

 

2021-07-28 / Sungwook Kang / https://sungwookkang.com

 

 

Kubernetes, 쿠버네티스, 마스터 노드, 워커 노드, 컨트롤 플레인, Control Plane

Docker Network

 

·         Version : Docker

 

Docker network 컨테이너에 내부IP 순차적으로 할당하고 컨테이너가 재시작 때마다 부여된 IP 변경될 있다. 내부IP 도커가 설치된 호스트의 내부망에서만 있기 때문에 외부와 통신을 하기 위해 veth* 라는 네트워크 인터페이스를 생성하여 외부와 통신한다.

 

도커가 설치된 호스트에서 ifconfig ip addr같은 네트워크 명령어로 인터페이스를 확인 해보면 실행중인 컨테이너 만큼 veth* 시작하는 인터페이스가 생성된 것을 있다.

·         eth0 : 내부IP 외부로 통신하기 위한 인터페이스로 호스트의 네트워크 이다. Eth0 네트워크가 veth* 시작하는 네트워크와 통신한다.

·         docker0 : veth* 인터페이스와 바인딩되어 호스트의 eth0 인터페이스와 이어주는 역할을 한다.

 

 

도커가 제공하는 기본적인 네트워크는 bridge, host, none, container, ovelay 있다. 도커를 설치하면 기본적으로 docker0 브릿지를 통해 외부와 통신할 있으며 선택에 따라 여러 네트워크 드라이버를 사용할 있다.

 


도커에서 생성되어 있는 네트워크를 확인은 docker network ls 명령어로 확인할 있다.

docker network ls

 

 

[bridge network]

사용자 정의 브릿지를 새로 생성하여 컨테이너에 연결한다. 컨테이너는 연결된 브릿지를 통해 외부와 통신한다. 아래 명령어로 mybrdge라는 네트워크를 생성할 있다.

docker network create --driver bridge mybridge


 



 

docker run또는 create명령어에 --net 옵션의 값을 설정하면 컨테이너가 해당 네트워크를 사용한다.

docker run -it --name container_name --net mybridge nginx

 

서브넷, 게이트웨이, IP할당 임의로 설정하려면 네트워크를 생성할 아래와 같이 옵션을 추가한다. 주의할 점은 --subnet --ip-range 같은 대역 이어야 한다.

Docker network create --drive=bridge \

--subnet=172.72.0.0/16 \

--ip-range=172.72.0,0/24 \

--gateway=172.72.0.1 \

Mybridge

 

run 명령시 --net-alias 옵션을 함께 쓰면 alias이름으로 여러 개의 컨테이너에 접근할 있다.

docker run -it --name container_name1 --net mybridge --net-alias ali01  nginx

docker run -it --name container_name2 --net mybridge --net-alias ali01  nginx

docker run -it --name container_name3 --net mybridge --net-alias ali01  nginx

 

컨테이너 생성이 완료되면 ping 사용해서 컨테이너로 ping 전송되는 것을 확인할 있다. Ping 전달되는 IP 라운드로빈 방식으로 도커 엔진에 내장된 DNS ali01이라는 호스트 이름을 --net-alias dhqtusdmfh ali01 설정한 컨테이너로 변환(resolve)하기 때문이다.

 

[host]

호스트 네트워크는 호스트의 네트워크 환경을 그대로 사용한다. 호스트 머신에서 설정한 호스트 이름을 컨테이너가 상속받기 때문에 컨테이너의 호스트 이름도 무작위 16진수가 아닌 도커 엔진이 설치된 호스트 머신의 호스트 이름을 설정 된다.

docker run -it --name container_name --net host nginx

 

컨테이너의 네트워크를 호스트로 설정할 경우 별도의 포트 포워딩 필요없이 바로 서비스가 가능하다.

 

[none]

어떠한 네트워크도 사용하지 않겠다는 뜻이다. 외부와의 연결이 단절된다.

docker run -it --name container_name --net none nginx

 

[container]

네트워크는 다른 컨테이너의 네트워크 환경을 공유할 있다. 공유되는 속성은 내부 IP, 네트워크 인터페이스의 MAC 주소 등이다. 사용법은 --net container:[컨테이너ID] 이다.

docker run -it --name container_name --net container:container_id nginx

 

[overlay]

여러 도커 데몬 호스트 사이에 분산 네트워크를 만든다. 네트워크는 호스트 특정 네트워크 상단에 위치하여(오버레이) 호스트 서비스 네트워크에 연결된 컨테이너(swarm 서비스 컨테이너 포함) 안전하게 통신할 있다. 도커는 대상 컨테이너간에 패킷 라우팅을 투명하게 처리 한다. swarm 초기화 하거나 docker호스트를 기존 swarm 가입 시키면 해당 도커 호스트에 개의 새로운 네트워크가 생성된다.

·         오버레이 네트워크라 불리는 Ingress swarm 서비스와 관련된 제어 데이터 트래픽을 처리한다. swarm 서비스를 생성하고 사용자 정의 오버레이 네트워크에 연결하지 않으면 기본적으로 ingress 네트워크에 연결된다.

docker network create -d overlay my-overlay

 

독립 실행형 컨테이너가 다른 docker 데몬에서 실행되는 다른 독립 실행형 컨테이너와 통신하기 위해 사용할 잇는 오버레이 네트워크를 만들려면 --attachable 옵션을 사용한다.

docker network create -d overlay --attachable my-attachable-overlay

 

·         브릿지 네트워크라 불리는 docker_gwbrdge 브릿지 네트워크를 만드는것과 동일하게 docker network create 사용하여 사용자 정의 오버레이 네트워크를 만들 있다. 서비스 또는 컨테이너는 한번에 이상의 네트워크에 연결할 있다. 서비스 또는 컨테이너는 각각 연결된 네트워크를 통해서만 통신할 있다.

docker network create \

--subnet 10.11.0.0/16 \

--opt com.docker.network.bridge.name=docker_gwbridge \

--opt com.docker.network.bridge.enable_icc=false \

--opt com.docker.network.bridge.enable_ip_masquerade=true \

docker_gwbridge

 

swarm 서비스와 독립 실행형 컨테이너 모두 오버레이 네트워크에 연결할 있지만 기본 동작 구성 관련 사항은 다르다. 이러한 이유로 오버레이 네트워크에 적용되는 작업, swarm 서비스 네트워크에 적용되는 작업 독립 실행형 컨테이너에 사용되는 오버레이 네트워크에 적용되는 작업으로 나뉜다.

 

모든 swarm 서비스 관리 트래픽은 기본적으로 GCM모드의 AES알고리즘을 사용하여 암호화 된다. Swarm 관리자 노드는 12시간 마다 데이터를 암호화하는데 사용되는 키를 변화시킨다. 오버레이 암호화를 활성화하면 도커는 오버레이 네트워크 연결된 모든 서비스에 대해 IPSEC 터널을 만들어 통신한다.

 

 

[참고자료]

·         Docker Network Overview :  https://docs.docker.com/network/

·         Bridge networks : https://docs.docker.com/network/bridge/

·         Overlay neworks : https://docs.docker.com/network/overlay/

·         Host networks : https://docs.docker.com/network/host/

·         Disable networks : https://docs.docker.com/network/none/

 

 

 

2019-02-20 / Sungwook Kang / http://sqlmvp.kr

 

Docker, docker network, ingress, overlay, container, host, 도커 네트워크, swarm

Docker Compose

-         여러개의 컨테이너를 설정하고 생성하기

 

·         Version : Docker

 

Docker compose 명령은 여러개의 컨테이너 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성한다. 도커 컴포즈의 설정 파일(docker-compose.yml) run 명령어 옵션을 그대로 사용할 있으며 컨테이너의 의존성, 네트워크, 볼륨, 컨테이너 등을 유동적으로 조절할 있다.  예를 들어 파이썬 프로그램이 구동되는 컨테이너와 데이터를 저장하는 redis 서버,  웹서버 컨테이너를 실행한다고 , 각각의 run 명령어 다양한 옵션으로 컨테이너를 생성하고 테스트하기에는 매우 번거롭다. 이때 도커 컴포즈를 활용하면 편리하다.

 

도커 컴포즈는 컨테이너 설정이 정의된 YAML 파일을 읽어 도커 엔진을 통해 컨테이너를 생성한다.


아래 스크립트는 docker-compose.yml 예제 스크립트이다. YAML 파일에서 들여쓰기 , 도커 컴포즈는 TAP 인식하지 못하기 때문에 2개의 공백(Space) 사용하여 하위 항목을 구분한다.

[docker-compose.yml]

version: "3"

services:

  web:

    # replace username/repo:tag with your name and image details

    image: username/repo:tag

    deploy:

      replicas: 5

      restart_policy:

        condition: on-failure

      resources:

        limits:

          cpus: "0.1"

          memory: 50M

    ports:

      - "80:80"

    networks:

      - webnet

  visualizer:

    image: dockersamples/visualizer:stable

    ports:

      - "8080:8080"

    volumes:

      - "/var/run/docker.sock:/var/run/docker.sock"

    deploy:

      placement:

        constraints: [node.role == manager]

    networks:

      - webnet

  redis:

    image: redis

    ports:

      - "6379:6379"

    volumes:

      - "/home/docker/data:/data"

    deploy:

      placement:

        constraints: [node.role == manager]

    command: redis-server --appendonly yes

    networks:

      - webnet

networks:

  webnet:

·         Version : YAML 파일 포맷 버전

·         Service : 생성될 컨테이너들을 묶어 놓는 단위. 서비스 항목 아래에 컨테이너에 적용될 옵션을 지정

·         Web, visualizer, redis : 생성될 서비스 이름. 항목 아래에 컨테이너가 생성될 필요한 옵션을 지정

·         image : 컨테이너를 생성할 사용될 이미지 이름

·         link : docker run --link 같으며 다른 서비스에서 서비스명만으로 접근할 있도록 설정

·         environment : docker run --env, -e 옵션과 동일. 컨테이너 내부에서 사용할 환경변수 지정

·         command : 컨테이너가 실행될 수행할 명령어를 설정.

·         ports : docker run -p 같으며 컨테이너를 개방할 포트를 설정.

·          

 

도커 컴포즈 관련 옵션은 매우 다양하게 지원되므로 자세한 내용은 공식 문서를 참고 있도록 한다.

·         Get Started with Docker Compose : https://docs.docker.com/compose/gettingstarted/

 

도커 컴포즈로 컨테이너를 생성하는 명령은 docker-compose up -d이다. 어떠한 설정도 하지 않으면 기본적으로 로컬 디렉터리의 docker-compose.yml 파일을 읽어 로컬의 도커 엔진에서 생성한다. 컨테이너 생성이 완료되면 docker ps에서 실행된 컨테이너를 확인할 있다.

docker-compose up -d

 

 

 

 

[참고자료]

·         Get Started with Docker Compose : https://docs.docker.com/compose/gettingstarted/

 

 

2019-02-17 / Sungwook Kang / http://sqlmvp.kr

 

Docker,  dockerfile, docker build, 도커 파일, 도커 이미지 생성, dockerfile reference, docker compose, 도커 컴포즈, 도커 컨테이너, docker container

+ Recent posts