Cloud Architect 꿈꾸기

전체 글 73

Kubernetes - Authentication, Authorization

이번에는 Kubernetes에서 지원하는 API 접근제어 정책으로 Authentication, Authorization에 대해 알아보도록 하겠다. Authentication 사용자가 Kubernetes Cluster로 Https 접근을 하기 위해서는 쿠버네티스 설치시에 클러스터로 접근할 수 있는 정보가 담긴 파일을 Kubeconfig에 담아두어야 한다. 즉, 클라이언트 인증서가 kubeconfig에 저장되어 있으면 된다. kubeconfig에는 CA crt, Client crt, Client key가 포함되어있다. 기본적으로 저장되는 장소는 /etc/kubernetes/admin.conf인데 내부를 확인해보면 각각의 인증서가 base64로 인코딩된 상태로 저장되어 있다. 각각의 인증서 내용을 확인해보기 ..

프로그래머스 - 체육복 (탐욕법)

프로그래머스 체육복 (탐욕법)문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return ..

Kubernetes - Volume (Dynamic Provisioning)

Kubernetes의 Volume을 사용하는 구조에서 앞서 PVC / PV를 이용하는 방식을 알아볼 수 있었다. 이번에는 PVC / PV 개념에서 한층 더 나아가 사용자가 PVC를 만들면 알아서 PV를 만들고 실제 Volume과 연결해주는 기능인 Dynamic Provisiong에 대해 알아보려 한다. Dynamic Provisioning Dynamic Provisiong을 사용하기 위해 Kubernetes에서는 StorageClass 오브젝트를 사용할 수 있다. PVC를 만들 때 StorageClassName 부분에 StorageClass의 이름을 넣어주게 되면, 자동으로 StorageVolume을 가진 PV를 생성할 수 있다. 또한 Volume의 status Lifecycle에 대해 알아보자면, 최초..

Kubernetes - Service (Headless, Endpoint, ExternalName)

이번에는 Kubernetes의 Service를 조금 더 깊게 파고자 한다. 1. Headless Headless 서비스는 한 Pod가 Service를 거치지 않고 Service 내부에 있는 Pod에 직접 접근하고 싶을 때 사용할 수 있다. 서비스는 Headless를 이용하여 Cluster IP를 설정하지 않고 (None) Pod에 hostname과 subdomin을 부여함으로써 Pod의 DNS를 통해 직접 접근할 수 있다. 2. Endpoint 기존에 서비스 - Pod간 연결은 Selector를 통해 할당이 되는데, Endpoint를 통해 서비스의 이름과 IP 정보를 넣게되면 selector 없이도 연결이 가능하다. 3. ExternalName 외부의 특정 사이트에서 데이터를 가져오는 상황에서 접근 주소..

Kubernetes - Scheduling

이번에는 Kubernetes Pod가 노드에 할당되기 위한 Scheduling에 대해 알아보려한다. 1. QoS QoS는 노드에 균등하게 자원을 배분한 Pod가 사용되고 있을 때, 만약 Pod에 추가적인 자원이 필요할 때 더 이상 노드에 여유 자원이 없는 경우를 대비해 설정할 수 있는 제약 조건이다. Pod를 생성할 떄 Pod는 다음 QoS 클래스 중 하나를 선택할 수 있다. Guaranteed Burstable BestEffort 1. Guranteed Guaranteed는 모든 Container에 Request와 Limit가 설정되어 있으며, Request와 Limit에는 memory, cpu상한과 요청량이모두 설정되어 있고, 각 컨테이너에 할당된 memory와 cpu의 Request와 limit 값..

프로그래머스 - 카펫 (완전탐색)

프로그래머스 카펫 (완전탐색) 문제 설명 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. ![carpet.png](https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/b1ebb809-f333-4df2-bc81-02682900dc2d/carpet.png) Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 ..

Kubernetes - Pod Lifecycle

이번엔 Kubernetes Pod의 생명주기(Lifecycle)를 알아보도록 한다. 기본적으로 Pod의 Lifecycle phase는 Pending, Running, Succeeded, Failed 그리고 Unknown의 단계로 나뉜다. 1. Lifecycle Phase Pod가 처음 만들어지기 시작하는 시점이다. Pending 상태일 때 Pod 안에서는 initContainer를 통해, 본 컨테이너가 기동되기 전에 초기화 스크립트를 작성하면 Pod를 initalize하는 동안 설정이 적용된다. Pod가 Pending되는 동안 Container는 Creating중 이기 때문에 Waiting 상태가 된다. 정상적으로 Container가 기동되게되면 Pod와 Container의 상태는 모두 Running이 ..

프로그래머스 - 이중우선순위큐 (힙)

프로그래머스 이중우선순위큐 (힙)문제 설명 이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다. 명령어수신 탑(높이) I 숫자 큐에 주어진 숫자를 삽입합니다. D 1 큐에서 최댓값을 삭제합니다. D -1 큐에서 최솟값을 삭제합니다. 이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요. 제한사항 operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다. operations의 원소는 큐가 수행할 연산을 나타냅니다. 원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이..

Kubernetes - DaemonSet, Job, CronJob

Controller의 마지막으로 DaemonSet과 Job, CronJob에 대해 알아보려한다. DaemonSet 통상 ReplicaSet을 사용할 경우 각 노드에 자원이 다르게 남아있는 상태에서 Pod를 배치할 때 자원이 많이 남아있는 노드부터 Pod를 배치하게 된다. 반면 DaemonSet은 자원상테에 상관없이 모든 노드에 Pod를 하나씩 생성하는 특징이 있다. 각 노드들의 성능 상태를 감시하기 위한 성능 수집 (ex. Prometheus) 특정 노드에 장애가 발생했을 경우 로그를 수집하기 위한 용도 (ex. fluentd) 네트워킹 관리를 하기 위해 각 노드에 DaemonSet으로 프록시 역할을 하며 네트워크를 관리하기 위한 스토리지 활용 용도 (ex. GlusterFS) 등에 대표적으로 사용하곤 ..

Kubernetes - Deployment

이번에는 kubernetes에서 운영중인 서비스를 업데이트하여 재배포 할 시 사용되는 기능들에 대해 알아보겠다. Deployment Controller는 크게 4가지로 구성할 수 있다. ReCreate Rolling Update Blue / Green Canary ReCreate ReCreate는 일시적인 서비스 정지가 가능한 곳에서 사용된다. ReCreate로 업데이트를 수행할 경우 기존 사용되던 Pod를 삭제하고 새로운 Pod를 만들어 Service에 연결하게 되는데, 이 때 기존의 Pod를 삭제하면서 잠깐의 Downtime이 발생하게 된다. 따라서 이러한 서비스 중단을 감안할 수 있는 곳에서 쓰일 수 있다. 참고로 revisionHistoryLimit를 이용하여 limit 수 만큼의 업데이트 이전 ..