전체 글 420

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

5.1 파드 개념 쿠버네티스는 파드라는 단위로 컨테이너를 묶어서 관리 파드로 컨테이너 여러 개를 한꺼번에 관리할 떄는 컨테이너마다 역할을 부여할 수 있음. 하나의 컨테이너들이 같은 목적을 자원을 공유하게 됨. (IP공유. 포트는 서로 다름) spec.securityContext.runAsUser container를 실행할 User ID 지정하기 spec.containers.securityContext.capabilities.add root가 할 수 있는 일을 추가로 허용하기 5.2 파드 사용하기 5.3 파드 생명 주기 Pending 쿠버네티스 시스템에 파드를 생성하는 중 컨테이너 이미지를 다운로드한 후 전체 컨테이너를 실행하는 도중이므로 파드 안의 전체 컨테이너가 실행될 때까지 시간이 걸림 Running..

DevOps/Kubernetes 2021.07.21

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

4.1 쿠버네티스 클러스터의 전체 구조 4.2 쿠버네티스의 주요 컴포넌트 마스터용 컴포넌트 Etcd /etc/kubernetes/manifests/etcd.yaml : 설정파일 Kube-apiserver 클러스터로 온 요청이 유효한지 검증함. (요청을 실행할 권한이 있는지 검사한 후 응답해줌) 쿠버네티스는 MSA이므로 서로 분리된 컴포넌트 여러 개로 구성되어 있음. 쿠버네티스에 보내는 모든 요청은 kube-apiserver를 이용해서 다른 컴포넌트로 전달함 /etc/kubernetes/manifests/kube-apiserver.yaml : 설정파일 Kube-scheduler 파드가 할당 될 노드를 결정함 Kube-controller-manager 2. 노드용 컴포넌트 Kubelet 클러스터 안 모든 노..

DevOps/Kubernetes 2021.07.21

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

3.1 kubectl 클러스터를 명령으로 관리 및 동작 가능 (자원 생성, 업데이트, 삭제, 디버깅, 모니터링, 트러블슈팅, 클러스터 관리.. ) 설치 기본사용법 - Service Kubernetes : kube-apiserver 관련 파드를 가리킴 - 명령어 Port-forward : 로컬 컴퓨터와 service를 포트포워딩하는 명령어 Logs : 해당 서비스의 로그 수집 3. POSIX/GNU 스타일의 명령 작성 규칙 -n(—namespace) : 네임스페이스 지정 'exec my-pod' : my-pod라는 이름의 파드에 해당 명령을 실행하기(인자 주기) '-c my-container' : 컨테이너 지정 4. 플래그 5. Kubeconfig 환경변수 kubectl은 기본적으로 $HOME/.kube/..

DevOps/Kubernetes 2021.07.21

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

2.3 클라우드 서비스에서 제공하는 쿠버네티스 도구 구글 쿠버네티스 엔진(GKE) 아마존 쿠버네티스 일래스틱 컨테이너 서비스(Amazon EKS) 애저 쿠버네티스 서비스 2.4 쿠버네티스 클러스터를 직접 구성하는 도구 kubeadm 쿠버네티스에서 공식 제공하는 클러스터 생성/관리 도구 고가용성을 제공하는 클러스터 구성 가능 여러 대의 마스터 노드를 구성하고 그 앞에 로드밸런서를 둠. 워커 노드들이 마스터노드에 접근할 때는 로드밸런서를 거쳐 접근함 -> 마스터 노드 1대에 장애 발생하더라도 다른 마스터 노드로 접근할 수 있게 해서 클러스터의 신뢰성을 유지함 etcd클러스터를 마스터 노드와 함께 설치해서 운용하는 방식 CNI (Container Network Interfaces) 1. 칼리코 2. 위브넷 클..

DevOps/Kubernetes 2021.07.21

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

* 이 글은 [ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] 책을 읽고 정리한 포스트임 1.1 컨테이너 리눅스는 원래 프로세스별로 자원을 격리하여(cgroup) 사용하거나, 특정 디렉터리로 권한을 제한하는(chroot) 등의 격리 환경을 구성할 수 있다. 도커를 이용하여 컨테이너 이미지를 만들고 저장소에 저장도 가능. 이를 가지고 가상환경 구현시에 성능을 높이기에 좋았음. 단, 개발환경 설정에 여러 장애요소가 발생해서 어려움을 겪음. 이러한 문제를 컨테이너 오케스트레이션 시스템을 사용하여 해결할 수 있었다. 앱을 배포하고 관리하기가 더 편하고 강력해짐 1.2 컨테이너 오케스트레이션 시스템 상용 서비스 구성 시, 여러 컨테이너를 배포하는 과정을 자동화 해줌. 운영이 훨씬 수월해짐..

DevOps/Kubernetes 2021.07.21

[ 리팩토링 by 마틴 파울러 ] Chapter07. 캡슐화

모듈을 분리하는 가장 중요한 기준은 아마도 시스템에서 각 모듈이 자신을 제외한 다른 부분에 드러내지 않아야 할 비밀을 얼마나 잘 숨기느냐에 있을 것이다. 이러한 구조는 캡슐화를 통해 숨길 수 있다. 7.1 레코드 캡술화하기 간단한 레코드 캡슐화하기 변수 캡슐화를 한 후, 데이터 구조를 표현하는 클래스를 정의하고, 이를 반환하는 함수를 새로 만듬 중첩된 레코드 캡슐화하기 변수 캡슐화를 한 후, 데이터 구조를 표현하는 클래스를 정의하고, 이를 반환하는 함수를 새로 만듬 데이터 구조 안으로 들어가는 코드를 세터로 뽑아 작업함. 7.2 컬렉션 캡슐화하기 컬렉션을 소유한 클래스를 통해서만 원소를 변경하도록 캡슐화하기 => 컬렉션 변경자 메서드를 통해 원소를 변경하도록 하여 원본 모듈 밖에서 컬렉션을 수정하지 않도..

Code 2021.07.21

[ 리팩토링 by 마틴 파울러 ] Chapter06. 기본적인 리팩터링

6.1 함수 추출하기 코드 조각을 찾아 무슨 일을 하는지 파악한 다음, 독립된 함수로 추출하고 목적에 맞는 이름을 붙인다 독립된 함수로 묶을때, 길이나 재사용성 또는 한 화면을 넘어갈 때 등등 많은 기준들이 있다. 하지만 핵심은 ‘목적과 구현을 분리’하는 방식이다. 즉, 무슨일을 하는지 함수의 이름을 통해 파악하도록 하는 것이다. (단, 함수의 이름이 잘 떠오르지 않으면 함수로 추출하면 안됨. 하지만 추출하는 과정에서 이름이 떠오를 수 있으니 일단 추출해 사용해보고 효과가 크지 않으면 인라인해서 써도 됨) 함수를 추출할 때, 원본 함수의 지역 변수를 참조하거나 추출한 함수의 유효범위를 벗어나는 변수는 없는지 검사하고, 있다면 매개변수로 전달한다. 또한 지역변수가 너무 많을 경우 변수 쪼개기나 임시 변수를..

Code 2021.07.21

[ 리팩토링 by 마틴 파울러 ] Chapter04. 테스트 구축하기

리팩토링을 제대로 하려면 실수를 잡아주는 견고한 테스트 스위트가 뒷받침돼야 함. 테스트 작성에 시간이 걸리지만 결국 좋은 테스트를 작성하면 개발 효율을 높여준다. 4.1 자가 테스트 코드의 가치 테스트 케이스 작성을 통해 버그를 찾아낼 수 있음. 버그는 고치는 것보다 찾아내는 것이 어려움. “테스트 스위츠는 강력한 버그 검출 도구로, 버그를 찾는 데 걸리는 시간을 대폭 줄여준다” 저자는 반복적 개발 방법론을 경험할 당시 테스트를 반복 주기마다 포함시켜 작업했다고 한다. 이때 경험하고 누렸던 것중 버그 검출의 효과를 보았고 버그에 대해서는 테스트 코드로 신경을 덜 쓸수 있다고 자신의 경험을 소개하였다. 또한 저자는 개발하기 전에 테스트 케이스부터 작성한다고 한다. 얼핏 순서가 뒤바뀐듯 들리지만 테스트를 작..

Code 2021.07.21

[ 리팩토링 by 마틴 파울러 ] Chapter03. 코드에서 나는 악취

저자는 리팩토링을 하는 시점을 코드에서 '악취'가 날 때라 말한다. '악취'가 나는 코드를 어떤 정확한 기준에 부합한다 라고 보기는 어렵다. 하지만 그동안의 경험을 토대로 하여 가지게 된 직관을 정리하여 제시한 악취들을 공부한 후 리팩토링 작업을 하게될 때, 감을 키워나가면서 리팩토링 실력을 쌓아 나가야 효과를 볼 수 있다. 3.1 기이한 이름 코드를 명료하게 표현하는데 이름만 보고도 각각이 무슨 일을 하고 어떻게 사용해야 하는지 알 수 있도록 신경써서 이름을 지어야 함. 이름만 잘 지어도 나중에 문맥을 파악하느라 해메는 시간을 크게 절약할 수 있음. 3.2 중복 코드 똑같은 코드 구조가 여러 곳에서 반복된다면 하나로 통합하여 더 나은 프로그램을 만들 수 있다. 코드가 중복되면 서로 차이점이 없는 지 주..

Code 2021.07.20

[ 리팩토링 by 마틴 파울러 ] Chapter02. 리팩터링 원칙

* 마틴 파울러의 "리팩토링" 책을 공부한 후 정리한 포스팅 * 비중이 적은 내용은 생략하였음. 2.1 리팩터링 정의 리팩터링 : 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩토링 기법을 적용해서 소프트웨어를 재구성. + 특정한 방식에 따라 코드를 정리 작은 단계들을 거쳐 코드 수정하여 순차적으로 큰 변화를 만들어냄. ( 겉보기동작 : 코드의 동작은 전과 후가 완전히 같아야 함. 내부 동작은 달라져 성능은 변할 수 있음. ) 성능 최적화와 비슷. 코드의 목적을 이해하고 수정하기 쉽게 만듬. 오로지 성능이 목표가 아니다. 2.2 두 개의 모자 소프트웨어 개발시 ‘기능 추가’ 혹은 ‘리팩터링’ 목표를 구분해 작업함. 2.3 리팩터링하는 이유 설계가 좋아짐 내부 설계가 유지되기 위함. 지속적인 리팩토링이 ..

Code 2021.07.20