2020/04(34)
-
쿠버네티스 입문 - 10 - 쿠버네티스 DNS
쿠버네티스 DNS 파드 사이에 통신할 때 IP 가 아닌 도메인을 사용할 수 있다. 특정 서비스에 접근하는 도메인은 "서비스이름.네임스페이스.svc.cluster.local" 이다. 특정 파드에 접근하는 도메인은 "파드IP주소.네임스페이스.pod.cluster.local" 이다. 하지만 파드의 IP 를 도메인에 포함시키면 도메인을 사용할 이유가 없다. DNS 를 클라이언트나 API 게이트웨이가 호출할 서비스를찾는 서비스 디스커버리 용도로 사용할 수 도 있다. DNS 질의 구조 DNS 도 쿠버네티스 클러스터 안에서 파드로 실행되는 것이다. 파드마다 도메인이름을 어떤 순서로 찾을지 설정할 수 있다. 이 때 .spec.dnsPolicy 를 사용한다. .spec.dnsPolicy 는 다음 과 같은 타입을 가질 수..
2020.04.08 -
쿠버네티스 입문 - 09 - 클러스터 네트워킹
도커 컨테이너의 네트워킹 일반적인 도커 컨테이너 네트워크는 브리지 타입 네트워크 구조로 되어있다. 브리지 타입 네트워크 구조는 아래와같다. 호스트는 호스트 네트워크 네임스페이스를 가진다. 그리고 여기에 docker0 라는 브리지를 만든다. 컨테이너는 컨테이너 네트워크 네임스페이스를 가진다. 그리고 여기에 컨테이너를 만든다. 컨테이너 네트워크 네임스페이스에는 가상 이더넷(베스)을 가지고 있다. 도커는 docker0에 베스들을 연결하여 통신한다. 네트워크 네임스페이스는 서로 연결되기 전까지 독립적으로 동작한다. 네트워크 네임스페이스는 별도의 ARP, 라우팅, iptable 을 가진다. 도커 컨테이너의 네트워크 타입 브리지 : 호스트에 브리지를 만들고 컨테이너와 호스트는 가상 이더넷(베스)을 이용해 연결한다...
2020.04.08 -
쿠버네티스 입문 - 08 - 볼륨
볼륨 컨테이너는 기본적으로 상태가 없는 앱 컨테이너를 사용한다. 컨테이너가 실행 되지 않거나 삭제되었을 때 현재까지 저장한 데이터가 사라진다. 한편 앱의 특성에 따라 컨테이너에 문제가 생겨도 데이터를 보존해야할 때가 있다. 대표적인 예가 데이터를 파일로 저장하는 젠킨스, 데이터베이스인 MySQL 등이 있다. 이럴 때 볼륨을 사용한다. 볼륨 관련 필드중에 .spec.container.volumeMounts.mountPropagation 이 있다. 이 설정을 이용하면 파드 하나 안의 컨테이너들끼리 볼륨을 공유할지 같은 노드 안의 파드들 끼리 볼륨을 공유할지 설정할 수 있다. 이는 다음 3가지 타입을 가진다. None 호스트에서 해당 볼륨 하위에 마운트 된 다른 디렉토리들은 해당 볼륨이 볼 수 없게한다. 컨테..
2020.04.08 -
쿠버네티스 입문 - 07 - 파드 스케줄링
파드 스케줄링 기법 노드 셀렉터 : 특정 노드에 스케줄링 되도록 하는 가장 간단한 설정 노드 어피니티 : 파드를 노드의 레이블 기반으로 스케줄링한다. 파드 어피니티 : 파드를 지정한 레이블을 가진 파드들이 있는 노드로 스케줄링한다. 테인트와 톨러레이션 : 테인트가 걸린 노드에 요구하는 톨러레이션이 설정되있지 않은 파드라면 생성하지 못하도록한다. 어피니티가 적용된 파드 샘플 apiVersion: v1 kind: Pod metadata: name: kubernetes-nodeaffinity-pod spec: containers: - name: kubernetes-nodeaffinity-pod image: arisu1000/simple-container-app:latest ports: - containerPo..
2020.04.05 -
쿠버네티스 입문 - 06 - 컨피그맵, 시크릿
컨피그맵 컨테이너에 필요한 환경설정을 분리해서 저장할 수 있다. 클라우드 네이티브 아키텍쳐에서 컨테이너는 템플릿에 맞춰 변하지 않는 자원이여야한다. 그런데 개발용과 프로덕션용 서비스를 다르게 설정해야하는 경우가 생긴다. (ex. DB 설정, 로그 출력 레벨...) 이럴때 컨피그맵을 사용한다. 컨피그맵 샘플 configmap-dev.yml apiVersion: v1 kind: ConfigMap metadata: name: config-dev namespace: default data: DB_URL: localhost DB_USER: myuser DB_PASS: mypass DEBUG_INFO: debug configmap-prod.yml apiVersion: v1 kind: ConfigMap metadat..
2020.04.04 -
쿠버네티스 입문 - 05 - 레이블, 셀렉터, 어노테이션
레이블 레이블은 오브젝트를 구분하는 역할이다. 레이블은 사용자가 임의로 원하는 값을 지정한다. 레이블은 셀렉터와 같이 사용되며 셀렉터는 특정 레이블이 있는 자원을 선택할 때 사용된다. 레이블 덕분에 컨트롤러와 파드가 느슨한 결합을 할 수 있다. 레이블을 사용하면 특정 파드에 문제가 생길 경우 서비스에 영향 없이 해당 파드만을 따로 분리해서 확인할 수있도록 하게 해준다. 접두어 kubernetes/io 가 있는 레이블 키는 쿠버네티스 시스템에서 사용하는 레이블이다. 카나리 배포는 레이블을 이용하여 구현할 수 있다. 레이블 셀렉터 크게 등호 기반 / 집합 기반으로 나뉜다. 등호 기반 셀렉터는 레이블을 가지고 있냐 없냐로 셀렉트한다. 집합 기반 셀렉터는 레이블을 가지고 있냐 없냐 이외에도 특정 문자열이 들어가..
2020.04.04