크리에이티브 커먼즈 라이선스
Creative Commons License

컨테이너 오케스트레이션 시스템, "쿠버네티스(Kubernetes)"

 

Kubernetes?

- 상용 레벨 적용이 가능한 오픈소스 컨테이너 오케스트레이션 시스템

- 빠른 Dev와 간단한 Ops를 지향하는 "리눅스 컨테이너 클러스터" 관리 도구

  : Manage a cluster of Linux containers as a single system to accelerate Dev and simplify Ops

 

Kubernetes 관련 동향

- 구글, Kubernetes 프로덕션 레디 버전 출시 (@OSCON 컨퍼런스, 7.21)

- 리눅스 재단, CNCF( Cloud Native Computing Foundation ) 설립 공표

  . 클라우드 & 컨테이너 친화적 어플리케이션을 위한 기술 개발이 목표

  . 구글, CNCF를 통해 Kubernetes를 발전시킬 계획임을 발표 (Kubernetes CNCF에 기증)

  . AT&T, Box, Cisco, Cloud Foundry, CoreOS, Docker, eBay, Google, Huawei, IBM, Intel,

Joyent, Mesosphere, Red Hat, Twitter, VMware 등 참여

  . 회원사(founding member) 모집중!

- 구글, "컨테이너 엔진" 사업 시작

  . https://cloud.google.com/container-engine/

  . Kubernetes를 호스팅하여 제공하는 managed 서비스

  . 베타 서비스 (몇 주 전까지만 해도 알파 서비스였음)

  . 특징

    - 도커 컨테이너 포맷 지원

    - 선언에 의한 관리(Declarative Management)

      : 컨테이너의 운영 요구조건(CPU/MEM, 리플리카 갯수, KeepAlive 정책)

JSON 파일에 선언하면, 컨테이너 엔진(Kubernetes)이 운영을 보장

  . 가격

    - "컨테이너 엔진"은 구글 "컴퓨트 엔진"이 제공하는 VM 위에서 동작

    - 베타 기간 동안 "컨테이너 엔진"에 대한 과금은 없으며, "컴퓨트 엔진" 사용량만 과금

 

Kubernetes 주요 개념/구성요소

- 클러스터(cluster)

  . 어플리케이션 컨테이너들이 배치되고 실행되는 컴퓨팅 자원

- 파드(pod)

  . 어플리케이션 실행에 필요한 도커 컨테이너들의 집합

  . 생명주기를 같이 하는 컨테이너들의 그룹

  . Kubernetes를 통한 배포(deploy) 및 실행의 최소 단위

- 리플리케이션(replication) 컨트롤러

  . pod들의 라이프사이클 관리자

  . 사용자의 선언(JSON 파일)에 따라 Pod 숫자(replica 숫자)를 관리

  . Pod들의 health status를 체크

- 서비스(service)

  . 관련 pod 집합을 대표하는 단일한/안정적인 이름 (IP Addr, ...)

  . 로드밸런서

- 레이블(label)

  . pod들의 그룹핑/조직화를 위해 관리하는 key-value pair/메타데이터

 

(이상)

저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요

크리에이티브 커먼즈 라이선스
Creative Commons License

도커(Docker) 커맨드 요약

출처: The Docker Book (지은이:제임스 턴불, 옮긴이:장독대, 출판사:루비페이퍼)


도커 관련 개념
+ 도커 이미지
  - 컨테이너 실행을 위해 필요한 프로그램/라이브러리/소스파일 등의 묶음
  - docker build 명령으로 이미지 생성
  - 이미지는 레지스트리에 존재
  - 디폴트 레지스트리는 Docker Inc가 관리하는 퍼블릭 레지스트리인 도커 허브(Docker Hub)
+ Dockerfile
  - 도커 이미지 생성을 위해 작성하는 파일
  - C/C++ 빌드시 사용하는 Makefile에 해당
+ 도커 컨테이너
  - 도커 이미지를 실행한 상태
  - 하나의 이미지로 여러개의 컨테이너를 만들 수 있음
  - docker run 커맨드로 컨테이너 실행
+ union mount
  - 한번에 여러 파일 시스템 layer를 마운트 하지만 마치 하나의 파일 시스템처럼 보이도록 마운트
  - 도커의 파일 시스템은 bootfs부터 layer 형태로 쌓인다
+ 복사후 쓰기 (Copy On Write)
  - 파일을 변경하려면 그 파일은 아래에 존재하는 읽기-전용 레이어로부터 읽기-쓰기 레이어로 복사된다
  - 파일의 읽기-전용 버전은 사라지는 것이 아니라 계속 존재

도커 관련 서비스
+ Quay
  - 퍼블릭 & 프라이빗 레지스트리 서비스 제공
  - 도커 허브의 대안
+ Orchard
  - https://www.orchardup.com/
  - Get Docker host in the cloud, instantly
  - 프라이빗 레지스트리 서비스 제공
  - 도커 컨테이너의 클라우드 호스팅 서비스 제공
  - 유료 서비스
  - Simple PaaS?

Docker 커맨드
+ docker attach 커맨드: 컨테이너에 재접속
+ docker build 커맨드: 도커 이미지 빌드
  > -t 옵션: 레포지터리 이름을 지정
+ docker images 커맨드: 도커 이미지 리스트 확인
+ docker info 커맨드: 도커가 정상 동작하는지 확인
+ docker inspect 커맨드: 컨테이너 상세 정보 확인
+ docker logs 커맨드: 컨테이너의 로그를 가지고 온다
  > -f 옵션: 로그 tailing
  > -f --lines 옵션
  > -t 옵션: 로그를 타임스탬프와 함께 출력
+ docker ps 커맨드: 실행중인 컨테이너 목록 확인
  > -a 옵션: 중지된 컨테이너 포함, 모든 컨테이너 목록 표시
  > -l 옵션: 포트 맵핑 확인
+ docker pull 커맨드: 도커 레지스트리에서 도커 이미지 가져오기
  > 디폴트 레지스트리는 Docker Inc가 관리하는 퍼블릭 레지스트리인 도커 허브(Docker Hub)
+ docker push 커맨드: 이미지를 도커 허브에 넣는다
+ docker rm 커맨드: 컨테이너 제거
+ docker run 커맨드: 도커 컨테이너 실행
  > -i 옵션: 컨테이너가 STDIN을 오픈해서 유지하도록 지정
  > -t 옵션: 컨테이너에 pesudo-tty(터미널)를 할당
  > 실행중인 컨테이너 내부에서
  >     ps 명령으로 컨테이너 프로세스 체크 가능
  >     apt-get 명령으로 SW 패키지 설치 가능
  > --name 옵션: 컨테이너 이름을 지정
  >    옵션을 사용하지 않으면 임의의 이름을 자동 할당
  > -d 옵션: 컨테이너를 데몬 형태로 실행
  > 포트 오픈 옵션
  > -p 옵션: 컨테이너의 어떤 네트워크 포트를 오픈할지 지정
  >     Dockerfile의 EXPOSE 명령으로 지정한 포트의 오픈 여부가 실행단계에서 결정된다
  > -P 옵션: Dockerfile에서 EXPOSE된 모든 포트를 오픈
  > -v 옵션: 호스트에 있는 디렉터리를 컨테이너 안의 볼륨(디렉토리)으로 맵핑
  >     어플리케이션이나 코드가 아직 완성되지 않아서 이미지에 포함하고 싶지 않은 경우 유용
  >     목적지에 rw나 ro 옵션을 추가하여 목적지의 읽기/쓰기 상태 설정 가능
  > --link 옵션: 컨테이너와 컨테이너의 네트워크를 연결
  >     두개의 인자를 요구
  >     하나는 링크할 컨테이너의 이름
  >     다른 하나는 링크를 위한 alias
+ docker start 커맨드: 중지된 컨테이너 시작
+ docker stop 커맨드: 데몬 컨테이너를 중지
+ docker top 커맨드: 실행 중인 프로세스를 조사

Dockerfile 명령어
+ EXPOSE 명령: 컨테이너에 있는 어플리케이션이 컨테이너에 있는 특정 포트를 사용하도록 지정
  > docker run 커맨드로 컨테이너를 실행할 때 포트를 오픈할 수 있도록 대기
+ ENV 명령: 이미지에 환경 변수 설정
  > docker run 실행시 -e 옵션으로도 전달 가능
+ CMD 명령: docker run 커맨드로 컨테이너를 생성할 때 실행할 명령을 설정
+ ENTRYPOINT 명령: CMD와 유사, 쉽게 오버라이되지 않는 실행 명령을 설정
+ WORKDIR 명령: 컨테이너를 위한 작업 디렉터리 설정
  > docker run 실행시 -w 옵션으로 오버라이딩 가능
+ VOLUME 명령: 컨테이너에 볼륨(디렉토리)을 추가
  > 볼륨은 컨테이너 사이에서 공유되고 재사용된다
  > 컨테이너는 볼륨을 공유하기 위해 실행될 필요 없다
  > 볼륨에 대한 변경은 바로 적용된다
  > 볼륨 변경은 이미지 업데이트시 포함되지 않는다
  > 볼륨은 컨테이너가 사용하지 않을 때까지 유지된다
+ ADD 명령: 이미지에 파일과 디렉토리를 추가
+ COPY 명령: ADD 명령과 유사, 파일 복사에 집중, 자동 압축 해제 같은 기능 없음


(이상)


저작자 표시 비영리 변경 금지
신고
Posted by ingee
TAG docker

댓글을 달아 주세요

크리에이티브 커먼즈 라이선스
Creative Commons License

Karma 개발자가 직접 쓴 Karama 에 대한 소개 <논문>

을 요약한다. TDD(Test Driven Development)에 대한 저자의 확고한 신념을 느낄 수 있었다.


TDD

  • TDD는 고품질의 SW를 개발할 수 있는 효과적인 방법
  • TDD는 문서화 측면에서도 이득, 테스트 코드는 항상 up-to-date한 (개발) 코드의 사용법을 알려준다(알려줄 수밖에 없다)
  • 테스트 가능한 코드(testable code)는 재사용성(reusable)이 더 높다


TDD를 위해서는 두가지 전제 조건이 필요

  • Testable Code: 느슨하게 결합된 모듈 구조로 코드를 개발, AngularJS 같은 프레임워크가 해결
  • Testing Environment: Karma 같은 테스트 자동화 도구가 해결


Karma는

  • JavaScript를 위한 Test Runner
  • Jasmine 같은 Test Framework 이 아님. 어떤 Test Framework도 사용 가능(Karma의 장점)
  • 웹앱 테스트의 가장 어려운 점은 코드를 테스트하기 위해 에디터를 떠나 브라우저를 실행시켜 결과를 확인해야 하는 워크플로우의 단절 (context switching), Karma는 이를 해결하기 위한 도구


Karma 모듈 구성도 (Figure 4.1: The high level architecture)


왜 클라이언트-서버 구조를 선택했나?
웹앱은 다양한 기기와 다양한 브라우저에서 실행, 디바이스와 브라우저의 편차를 테스트하기 위해 클라이언트를 분리했음


(이상)

저작자 표시 비영리 변경 금지
신고
Posted by ingee
TAG Karma, TDD

댓글을 달아 주세요



티스토리 툴바