본문 바로가기

About

(221)
[k8s] 노드 스케쥴링 - Taints와 Toleratioin(테인트와 톨러레이션) 테인트(Taints)와 톨러레이션(Toleration) 쿠버네티스 클러스터의 특정 노드에 테인트(Taint)를 설정할 수 있습니다. Node Affinity는 Pod가 특정 노드를 선택하게 하는 Pod의 속성이었다면 테인트(Taint)는 반대로 노드가 파드 셋을 제외하도록하는 노드에 설정하는 속성입니다. 기본적으로 테인트를 설정한 노드는 파드들을 스케줄링하지 않습니다. 테인트를 설정한 노드에 파드들을 스케줄링하려면 파드에 톨러레이션(Toleration)을 설정해야 합니다. 그럼 테인트는 톨러레이션에서 설정한 특정 파드들만 실행하고 다른 파드는 실행하지 못하게 합니다. 테인트와 톨러레이션은 주로 노드를 특정 역할만 하도록 만들 때 사용합니다. 예를 들어 데이터베이스용 파드를 실행한 후 노드 전체의 CPU나..
[k8s] 파드 스케줄링 - Inter-Pod Affinity, Anti-Affinity(파드 어피니티와 안티 어피니티) Inter-Pod Affinity, Anti-Affinity Affinity(Inter-Pod Affinity)와 Anti-Affinity는 Deployment나 StatefulSet으로 파드를 배포했을 때 개별 파드 사이의 관계를 정의하는 용도로 사용합니다. Inter-Pod Affinity Node Affinity가 node의 label을 기준으로 Pod가 배포될 node를 선택한다면, Inter-Pod Affinity 는 기존에 배포된 Pod를 기준으로 배포될 node를 결정합니다. 서비스 A의 파드와 서비스의 B의 파드가 자주 통신한다고 했을 때, Affinity는 이런 상황에서 서비스 A와 서비스 B의 파드들을 같은 노드에 속하게 만들어 효율을 높입니다. 예를 들어 데이터베이스나 캐시 같은 서비..
[k8s] 파드 스케쥴링 - Node Affinity(노드 어피니티) Node Affinity 노드 어피니티(Node Affinity)는 노드 셀렉터와 비슷하게 노드의 레이블을 기반으로 파드를 스케쥴링합니다. 노드 어피니티와 노드셀렉터를 함께 설정할 수도 있으며, 이 때는 노드 어피니티와 노드셀렉터의 조건을 모두 만족하는 노드에 파드를 스케쥴링합니다. 참고로 Affinity는 한국어로 다음과 같은 의미를 가집니다. 1.친밀감 (=rapport) 2.(밀접한) 관련성, 친연성 노드 어피니티에는 두 가지 필드가 있습니다. requiredDuringSchedulingIgnoredDuringExecution : '스케쥴링하는 동안 꼭 필요한' 조건 preferredDuringSchedulingIgnoredDuringExecution : '스케쥴링하는 동안 만족하면 좋은' 조건입니..
[k8s] Liveness Probe - ExecAction을 이용한 Pod Health Check kubernetes에서는 HTTP Request나 TCP Socket와 같은 리퀘스트의 결과가 아니라 컨테이너 안에서 임의의 명령을 실행하여 그 결과로 파드의 가동 여부를 판단할 수 있습니다. 매니페스트 파일 작성 # pod-liveness-exec.yaml # 1. 기본 항목 apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec # 2. Pod Spec spec: # 3. Container 사양 containers: - name: liveness image: busybox # busybox args: - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy..
[k8s] Liveness Probe - HTTP Request를 이용한 Health Check(HTTPGetAction) 웹 애플리케이션의 경우 특정 URL에 HTTP 리퀘스트를 보내, 그 반환값을 체크함으로써 애플리케이션이 정상적으로 움직이고 있는지를 판단할 수 있습니다. 매니페스트 파일 작성 # 기본 항목 apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-http # Pod Spec spec: # Container spec containers: - name: liveness image: k8s.gcr.io/liveness args: - /server livenessProbe: httpGet: # Http 리퀘스트 반환 값에 따라 체크함 path: /healthz port: 8080 httpHeaders: - name: X-Custom-Hea..
[Programmers] 수식 최대화(Python 풀이) - 2020 카카오 인턴십 코딩테스트 문제 https://programmers.co.kr/learn/courses/30/lessons/67257 코딩테스트 연습 - 수식 최대화 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 programmers.co.kr 풀이 수식의 분리(숫자와 연산자 배열) 먼저 수식을 숫자와 연산자로 분리합니다. get_numbers_and_exps() 함수는 수식을 받아 숫자 배열과 연산자 배열을 반환합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def get_numbers_and_exps(expression): # 수식을 숫자와 연산자 배열로 분리 exps = []..
[Flask] JWT access token 인증(로그인 토큰 인증) Access Token을 생성하는 방법은 여러 가지가 있는데, 가장 널리 사용되는 기술은 중 하나가 바로 JWT(JSON Web Tokens)입니다. JSON Web Token은 이름 그대로 JSON 데이터를 token으로 변환하는 방식입니다. Flask에서 이를 이용하여 웹 토큰 인증을 하는 것을 다루어 보겠습니다. 예제에서는 PyJWT 1.4.0 버전과 bcrypt 3.2.0 버전을 이용합니다. pip3 install PyJWT==1.4.0 pip3 install bcrypt==3.2.0 Access Token 인증 과정은 다음과 같습니다. 1. 토큰 생성 2. 토큰 사용 예시 코드 로그인 시 인증 확인 후 Access 토큰 생성 (Flask router) @bp.route('/login', meth..
[k8s] 파드의 우선순위(Pod QoS, Quality of Service) 쿠버네티스는 하나의 클러스터에서 여러 개의 컨테이너 애플리케이션을 실행할 수 있습니다. 하지만 예를 들어 '온라인 처리를 제공하는 컨테이너으 우선순위를 높이고 싶다', '배치 처리를 하는 리소스의 우선순위를 낮추고 싶다' 와 같은 조건을 주고 싶은 경우 QoS 클래스를 사용하여 파드에 우선순위를 붙일 수 있습니다. 파드의 QoS 클래스 조건 쿠버네티스에서는 파드에 대해 3개의 Quality of Service(QoS) 클래스를 제공하고 있습니다. 이 QoS는 Resource Requests와 리소스의 상한을 정하는 Resource Limits 조건을 바탕으로 우선순위가 다음과 같이 정해집니다. BestEffort 파드 안의 어떤 컨테이너에도 Resource Requests와 Resource Limit이 ..
[k8s] Probe - Pod Health Checks(readiness Probe vs liveness Probe) 쿠버네티스 클러스터 상에는 많은 파드가 가동됩니다. 이것들이 정상적으로 움직이고 있는지 아닌지를 체크해서 만일 문제가 있으면 재빨리 복구해야 합니다. 쿠버네티스에서는 컨테이너 애플리케이션이 올바르게 움직이고 있는지 아닌지를 항상 감시하여 문제가 있으면 파드를 자동으로 재시작하는 장치가 있습니다. 위 장치를 Probe라고 합니다. 즉 프로브(Probe)는 컨테이너에서 kubelet에 의해 주기적으로 수행되는 진단(diagnostic)입니다. 진단 방식(Probe)에는 다음 두가지 가 있습니다. livenessProbe 컨테이너가 실행됐는지 확인합니다. 이 진단이 실패하면 kubelet은 컨테이너를 종료시키고, restart 정책에 따라 컨테이너를 재시작합니다. 컨테이너에 liveness Probe를 어떻게..
[k8s] Pod LifeCycle(파드의 생명 주기) Pod LifeCycle 파드는 생성부터 삭제까지의 과정에 생명 주기(LiefCycle)이 있습니다. 파드의 생명 주기는 다음과 같습니다. 파드의 Status 값 설명 Pending 파드의 작성을 기다리고 있는 상태, 컨테이너 이미지의 다운로드 등에 시간이 걸리는 경우가 있습니다. Running 파드가 가동 중인 상태 Succeeded 파드 안의 컨테이너가 정상적으로 종료된 상태 Failed 파드 안의 컨테이너 중 하나의 컨테이너가 실패하여 종료된 상태 Unknown 어떤 이유로 파드와 통신할 수 없는 상태 파드는 Pending 단계에서 시작해서, 기본 컨테이너 중 적어도 하나 이상이 OK로 시작하게 되면 Running 단계를 통과하고, 그런 다음 파드의 컨테이너가 실패로 종료되었는지 여부에 따라 Suc..