전체 글 316

[ 쿠버네티스 입문: 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

[ 리팩토링 by 마틴 파울러 ] Chapter12. 상속 다루기

12.1 메서드 올리기 12.2 필드 올리기 12.3 생성자 본문 올리기 생성자는 할수 있는 일과 호출순서에 제약이 있음 (생성될 때만 호출, 리턴 X, 오브젝트 초기화 용도) 부모-자식의 클래스 중, 생성자 호출 단계에서 부모의 생성자를 호출하지 않는 자식의 경우가 있다면 체크 후 자식 생성자에 따로 알맞은 로직을 호출하도록 코딩한다 12.4 메서드 내리기 12.5 필드 내리기 12.6 타입 코드를 서브클래스로 바꾸기 타입코드 비슷한 대상들을 특정 특성에 따라 구분해야 할 때 서브 클래스로 생성하여 조건에 따라 다르게 동작하는 다형성 제공하기 특정 타입에서만 의미가 있는 값을 사용하는 필드나 메서드가 있을 때 사용하기 직접 상속 Employee를 상속한 클래스가 타입에 따라 Engineer, Manag..

Refactoring 2021.07.22

[ 리팩토링 by 마틴 파울러 ] Chapter11. API 리팩토링

모듈과 함수는 소프트웨어를 구성하는 빌딩 블록이며, API는 이 블록들을 끼워 맞추는 연결부다. 이런 API를 이해하기 쉽고 사용하기 쉽게 만드는 일은 중요하며 어렵다. 그래서 API를 개선하는 방법을 새로 깨달을 때마다 그에 맞게 리팩터링 해야한다. 11. 1 질의 함수와 변경 함수 분리하기 목표 : “부수 효과” 없애기 겉보기 부수 효과가 전혀 없이 값을 반환해주는 함수를 추구해야 함 Get함수 안에 set이 같이 있는 경우 11. 2 함수 매개변수화하기 두 함수의 로직이 아주 비슷하고 단지 리터럴 값만 다르다면? 하나의 함수로 만들고 중복 없애기 매개변수로 boolean값을 써서 제어에 쓰는 경우 아님 11.3 플래그 인수 제거하기 호출할 수 있는 함수들이 무엇이고 어떻게 호출해야 하는지를 이해하기..

Refactoring 2021.07.22

[ 리팩토링 by 마틴 파울러 ] Chapter10. 조건부 로직 간소화

조건부 로직을 이해하기 쉽고 깔끔하게 만들어야 프로그램의 전체 코드가 복잡하지 않게된다. 10.1 조건문 분해하기 조건, 분기 모두 함수로 추출해버려 가독성 높이기 왜 이 코드가 실행되는 지 모를때가 많음 10.2 조건식 통합하기 비교하는 조건은 다르지만 그 결과로 수행하는 동작은 똑같은 코드들이 있다. 이럴 때 and나 or연산자를 사용하여 여러 개의 비교 로직을 하나로 합칠 수 있다. 간단한 여러 조건문을 하나의 복잡한 조건문으로 통합하기 부수효과에 유의하기 10.3 중첩 조건문을 보호 구문으로 바꾸기 보호 구문 : 한쪽만 정상이라면 비정상 조건을 if로 검사한 다음, 조건이 참이면 함수에서 빠져나온다. if절과 else절에 똑같은 무게를 두어, 코드를 읽는 이에게 양 갈래가 똑같이 중요하다는 뜻을 ..

Refactoring 2021.07.22

[ 리팩토링 by 마틴 파울러 ] Chapter09. 데이터 조직화

데이터 구조에 집중한 리팩터링 9.1 변수 쪼개기 변수 1개당 역할은 하나이다 역할이 둘 이상인 변수가 있다면 쪼개야 한다. (여러 용도로 쓰인 변수는 코드를 읽는 이에게 커다란 혼란을 줌) 같은 역할에 여러 번의 할당은 필요할 때도 있다 -> 루프변수, 수집변수 9.2 필드 이름 바꾸기 점진적으로 안전하게 바꾸기 9.3 파생 변수를 질의 함수로 바꾸기 9.4 참조를 값으로 바꾸기 객체 내부를 수정하던 것을, 값 객체 통채 하나로 바꾸기 ( 불변 데이터이므로 외부에 건네주는 경우 등 나중에 그 값이 바뀌어 내부에 영향 끼치지 않음 ) 새로운 속성을 담은 객체로 기존 내부 객체를 통채로 대체 값 객체 - 불변 : setter없이 constructor 만으로 9.5 값을 참조로 바꾸기 데이터를 갱신해야 할 ..

Refactoring 2021.07.22

[ 리팩토링 by 마틴 파울러 ] Chapter08. 기능 이동

지금까지는 프로그램 요소를 생성 혹은 제거하거나 이름을 변경하는 리팩터링을 다뤘다. 여기에 더해 요소를 다른 컨텍스트(클래스나 모듈 등)로 옮기는 일 역시 리팩토링의 중요한 축이다. 8.1 함수 옮기기 함수가 자신이 속한 모듈 A보다 다른 모듈 B를 더 많이 참조한다면 모듈성을 높이기 위해 서로 연관된 요소들을 함께 묶고, 요소 사이의 연결 관계를 쉽게 찾고 이해할 수 있도록 해야 함. 함수를 옮길 시에 대상 함수의 현재 컨텍스트와 후보 컨텍스트를 둘러보면 도움이된다. 8.2 필드 옮기기 데이터 구조가 적절치 않음을 깨달으면 곧바로 수정하기 (어떤 레코드를 넘길 때마다 또 다른 레코드의 필드도 함께 넘기고 있다면 데이터 위치를 옮겨야 할 것) 필드 캡슐화 => 필드값을 외부에서 변경하지 못하게 할 시 사..

Refactoring 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