DevOps/Kubernetes 18

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter18. 오토스케일링

18. 1 HPA의 구조 HPA는 컨트롤러 매니저(kube-controller-manager) 안에서 주기적으로 실행하면서 설정된 HPA의 상태를 확인함. HPA가 디플로이먼트에 속한 파드들의 상태를 모니터링하다가 지정된 조건에 이르면 디플로이먼트를 스케일해서 파드 개수를 늘리거나 줄임. 지정된 자원을 API로 먼저 확인한 후 조건에 맞을 때 HPA가 오토스케일링함. 18.2 HPA 설정하기 targetCPUUtilizationPercentage : CPU사용률이 얼마일 때 오토스케일링을 적용할 지 설정함.

DevOps/Kubernetes 2021.07.22

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter17. 로깅과 모니터링

17.1 로깅 오케스트레이터를 사용하는 환경에서 로그를 수집할 때 로그를 로컬 디스크에 파일로 저장하지 말아야 함. 쿠버네티스는 특정 앱 컨테이너의 로그를 확인하려면 전체 클러스터의 노드 중 어떤 노드에 해당 컨테이너가 실행되었는지 확인해야 로그도 확인이 가능함. 파드 로그 확인하기 ‘Kubectl logs -f 파드이름’ : 파드의 로그 확인 2. 일래스틱서치로 로그를 수집한 후 모아서 보기 로컬 디스크에 로그를 저장하면 용량 문제로 삭제한 예전 로그들을 확인할 수 없음. 장비 각각에 저장한 로그를 한 곳에 모아서 살펴보도록 서버를 구축함. 일래스틱서치 파드를 배포하고 서비스를 붙여 외부에 노출시킴. 키바나는 일래스틱서치의 데이터를 검색하므로 접근할 도메인을 알아야함. env의 ELASTICSEARCH..

DevOps/Kubernetes 2021.07.22

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter16. 쿠버네티스 DNS

16.1 쿠버네티스 DNS 클러스터 안에서만 사용하는 DNS 설정 가능. 파드 사이에 통신 시 도메인 사용 가능. IP로 통신 설정시 IP 대역이 다를 때 수정해야 하므로 번거로움 16.2 클러스터 안에서 도메인 사용하기 내부 도메인은 서비스와 파드를 대상으로 사용하며 일정한 패턴이 있음. 서비스 접근 :’서비스이름.네임스페이스이름.svc.cluster.local’처럼 구성함. 파드 접근 : ’파드IP주소.네임스페이스이름.pod.cluster.local’처럼 구성함. 단 IP주소를 사용하면 의미가 없음 그러므로 파드 생성 시, 호스트네임과 서브 도메인을 설정해서 사용하기 .spec.template.spec.hostname .spec.template.spec.subdomain 설정 시, ’호스트네임이름.서..

DevOps/Kubernetes 2021.07.22

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter15. 클러스터 네트워킹 구성

15.1 파드 네트워킹 쿠버네티스는 파드에 IP를 할당함. 파드들은 IP를 이용해 서로 통신함. 도커 컨테이너의 네트워킹 도커 브리지 타입 네트워크는 호스트안에 docker() 라는 브리지를 추가해 컨테이너와 호스트 사이를 연결함. docker()는 호스트의 네트워크 네임스페이스라 함. 호스트의 기본 네트워크는 여기서 만들어지고 관리함. container1(veth0)과 container2(veth1)는 컨테이너 네트워크 네임스페이스라고 함. 컨테이너를 생성할 때마다 만들어지고 컨테이너마다 별도의 네트워크를 사용할 수 있도록 함. veth는 한쪽 끝은 컨테이너, 다른 한쪽 끝은 호스트의 브리지(docker() )를 연결하여 호스트 네임스페이스와 컨테이너 네임스페이스 사이를 통신함. 도커 컨테이너 네트워킹..

DevOps/Kubernetes 2021.07.22

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter14. 데이터 저장

14.1 볼륨 컨테이너는 기본적으로 상태가 없는 앱 컨테이너를 사용함. -> 다른 노드로 자유롭게 옮길 수 있음 -> 상태를 저장할 수 없어 컨테이너가 재시작시 데이터가 사라짐 데이터를 보존하기 위해 볼륨을 사용함. 볼륨은 클라우드 볼륨 서비스, 디스크, 서버 컨테이너 볼륨 플러그인 등 다양한 종류가 있음 .spec.container.volumeMounts.mountPropagation : 파드 안에있는 컨테이너끼리 혹은 노드 안에 파드들끼리 공유할 지 설정 None : 컨테이너가 만들어 놓은 마운트를 호스트에서 볼 수 없음. HostToContainer : 호스트에서 해당 볼륨 하위에 마운트된 다른 디렉터리들도 볼 수 있음 Bidirectional : 호스트 안 모든 컨테이너나 파드에서 같은 볼륨을 사..

DevOps/Kubernetes 2021.07.22

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter13. 인증과 권한 관리

13.1 인증 사용자가 쿠버네티스의 API에 접근하려면 인증이 필요함. 외부에서 접속시 TLS 인증이 적용되어있음. 접속하려면 kube-apiserver에 있는 인증서와 클라이언트에 있는 인증서 사이의 검증을 통과해야함. -> 인증되지 않은 클라이언트가 kube-apiserver에 접속하지 못하게 하려는 것 쿠버네티스는 접속시에 사용자 계정과 서비스 계정으로 인증을 요청함. 사용자 계정은 별도의 외부 인증 시스템에 있는 사용자 정보를 연결해 사용함 서비스 계정은 쿠버네티스가 직접 관리하는 사용자 계정이며 시크릿이 할당되어있어 비밀번호 역할을 함 kubectl의 config 파일에 있는 TLS 인증 정보 구조 확인하기 Kube-apiserver와 통신할 때 기본 인증 방법으로 TLS를 사용함. TLS는 통..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter12. 파드 스케줄링

12. 1 노드 셀렉터 파드가 클러스터 안 어떤 노드에서 실행될 지를 키-값 쌍으로 결정함. 노드에서도 레이블 설정이 가능한데 보통 노드의 환경(os, arch 등)을 적어둠. 노드에 레이블 추가 ‘ kubectl label nodes “노드이름” 레이블키=레이블값 ’ 파드에 노드셀렉터 설정 spec.nodeSelector 에 키값을 설정함 -> 해당 레이블을 가진 노드에 실행될 것임을 설정할 수 있음. 12.2 어피니티와 안티 어피니티 노드 어피니티 노드셀렉터와 비슷하게 노드의 레이블 기반으로 파드를 스케줄링함. spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution : 스케줄링하는 동안 꼭 필요한 조건 .nodeSelecto..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter11. 시크릿

11.1 시크릿 만들기 내장 시크릿 쿠버네티스 클러스터 안에서 쿠버네티스 API에 접근 시 사용됨 (serviceAccount 계정의 비밀번호 역할로 쓰임) 사용자 정의 시크릿 사용자가 만든 시크릿 명령으로 시크릿 만들기 ‘Kubectl create secret’ ‘kubectl create secret generic “시크릿 이름” ‘ (—from-literal=키=값) ' kubectl create secret docker-registry(시크릿타입) private-reg-cred(이름) --docker-username=(dock_user) --docker-password=(dock_password) --docker-server=(myprivateregistry.com:5000) --docker-em..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter10. 컨피그맵

10.1 컨피그맵 사용하기 .data 실제 사용하려는 환경 값을 넣음 ‘ kubectl create configmap webapp-config-map --from-literal=APP_COLOR=darkblue ‘ : 컨피그맵 생성 ( —from-literal : .data (키:값) 설정 ) 10.2 컨피그맵 설정 중 일부만 불러와서 사용하기 containers[].env[].name 필드에 DEBUG_LEVEL이라는 환경 변숫값을 설정함 containers[].env[].valueFrom 필드값은 어디에서 가져올 것인지를 정하며 configMapKeyRef 필드는 어떤 컨피그맵이 어떤 키를 가져올지 지정함. 10. 3 컨피그맵 설정 전체를 한꺼번에 불러와서 사용하기 spec.containers[].e..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter09. 레이블과 애너테이션

9.1 레이블 키-값 으로 구성. 메타데이터로 설정 가능. 컨트롤러들이 파드를 관리할 때 자신이 괄니해야 할 파드를 구분하는 역할. 노드에도 설정 가능하므로 자원 할당시에 할당할 노드를 구분하여 사용가능. 특정 레이블을 선택 시, 레이블 셀렉터를 사용함. 명령어 1. —selector “키=값” 해당 레이블 값을 가진 것들 출력 (—no-headers : 헤더값 미출력) ( wc -l : 행 수 출력 ) 2. —show-labels : 파드들의 모든 레이블 출력 3. ' Kubectl label node “노드이름” “키:값” ' 노드에 레이블 설정 9.2 에너테이션 키-값 쌍으로 구성하며 레이블처럼 사용자가 설정할 수 있음. 에너테이션은 쿠버네티스 시스템이 필요한 정보들을 담았으며, 쿠버네티스 클라이언..

DevOps/Kubernetes 2021.07.21