목록분류 전체보기 (767)
우노
들어가기 앞서 쿠버네티스를 통해 애플리케이션을 배포하기 위해서는 많은 오브젝트가 필요합니다. 대표적으로는 deployment, pod, configmap, secret, service, persistent volume, persistent volume claim 등이 있습니다. 쿠버네티스는 이러한 오브젝트들을 정의하고 생성할때 yaml 파일 형식을 활용합니다. 하지만, 각각의 애플리케이션마다 모든 오브젝트들의 yaml 파일을 관리하는 것은 매우 반복적이고 번거로운 작업입니다. 따라서, 이를 편하게 하고자 만든 것이 helm입니다. Helm, Helm Chart란? Helm은 Kubernetes 클러스터에 애플리케이션을 쉽게 배포하고 관리하기 위해 개발된 Kubernetes 용 패키지 매니저입니다. 이때,..
들어가기 앞서, terraform untaint 명령어는, State 파일에 특정 리소스에 문제가 없다고 저장해놓기 위해 사용됩니다. 예제 부팅이 느린 앱(Pod)을 Deployment를 통해 배포한다고 가정해봅시다. terraform apply 시, Deployment는 Pod의 앱 배포를 기다리게 됩니다. 하지만, Pod 앱의 부팅이 느리기 때문에 Terraform에선 Deployment exceeded its progress deadline 에러를 뱉고 중지하게 되며, State에는 Deployment가 정상 배포 되지 않았다고 저장되게 됩니다. 하지만, 실제 환경에서 Pod 앱의 부팅이 끝나 Deployment가 정상 배포된다면 State 파일과 실제 환경의 설정이 달라지게 됩니다. 이때, 코드 ..
부하 분산 알고리즘 로드 밸런서가 리얼 서버로 부하를 분산할 때, 로드 밸런서에서는 사전에 설정한 분산 알고리즘을 통해 부하 분산이 이루어집니다. 기본적인 부하 분산 알고리즘은 5가지 종류가 있습니다. 라운드 로빈(Round Robin) 현재 구성된 장비에 부하를 순차적으로 분산함 총 누적 세션 수는 동일하지만 활성화 된(처리 중인) 세션 수는 달라질 수 있음 최소 접속 방식(Least Connection) 현재 구성된 장비 중 가장 활성화 된(처리 중인) 세션 수가 적은 장비로 부하를 분산함 가중치 기반 라운드 로빈(Weighted Round Robin) 라운드 로빈 방식과 동일하지만 각 장비에 가중치를 두어 가중치가 높은 장비에 부하를 더 많이 분산함 처리 용량이 다른 서버에 부하를 분산하기 위한 분..
Migos - Working a Fool Coi Leray, Nicki Minaj - Blick Blick Abhi The Nomad, JZAC - KD Money
들어가기 앞서, 해당 포스팅에선, Datadog CLI인 datadog-ci를 통해 Datadog의 Syntheitc Tests를 실행하는 방법에 대해서 다뤄보겠습니다. datadog-ci 설치 npm install -g @datadog/datadog-ci datadog-ci를 위한 API Key와 APP Key 생성 API Key Datadog Dashboard → Organization Settings → ACCESS → API Keys → New Key APP Key Datadog Dashboard → Organization Settings → ACCESS → Application Keys → New Key datadog-ci를 사용해 Synthetic Tests 실행 # 특정 ID를 가진 Test..
들어가기 앞서, Terraform으로 특정 자원을 생성할 경우, 해당 자원이 이미 생성되어 있는 상태라면, already exist 에러가 발생하게 됩니다. 따라서, 해당 포스팅에선 terraform import를 사용해, 이미 생성되어 있는 자원을 유지하면서 Terraform State 파일을 업데이트할 수 있는 방법을 다뤄보겠습니다. 생성하고자 하는 리소스 블록 선언 resource "google_cloud_scheduler_job" "test" { } 리소스 블록을 선언하지 않을 경우, 아래와 같은 에러가 발생하게 됩니다. Before importing this resource, please create its configuration in the root module. Terraform State..
들어가기 앞서, Google Kubernetes Engine(이하 GKE)에서 동작하는 애플리케이션들이 다양한 Google Cloud 서비스에 접근하기 위해선, GKE가 Google Cloud 서비스 접근 권한을 가지고 있어야합니다. 따라서 일반적으로는, Google Cloud 서비스 접근에 필요한 Role이 할당되어 있는 Google Service Account를 생성한 뒤, 쿠버네티스 RBAC(Role-based Access Control)를 위한 Kubernetes Service Account에 Google Service Account를 매핑해서 사용되고 있습니다. 따라서 해당 포스트에선, Terraform을 사용해 Google Service Account를 생성하고, Google Service A..
들어가기 앞서, kubernetes_secret을 사용해, 임의의 파일을 외부에 공개되지 않도록 pod에 저장한 뒤, container에서 pod의 volume을 mount하는 방법에 대해서 다뤄보겠습니다. 예제 코드 kubernetes_secret을 사용해, pod에 저장할 파일 정의 resource "kubernetes_secret" "access_secret" { metadata { name = "mlflow-access-secret" namespace = kubernetes_namespace.mlflow_nginx.metadata[0].name } data = { # "파일명" = "파일내용" ".htpasswd" = "id:pwd" } } kubernetes_deployment를 사용해, con..
Nginx proxy_pass 시 cookie 전달 location / { proxy_pass http://backend; add_header Set-Cookie "my_cookie=my_value; Path=/; HttpOnly; Secure"; } HttpOnly 브라우저에서 해당 쿠키로 접근할 수 없습니다. Secure HTTPS가 아닌 통신에서는 쿠키를 전송하지 않습니다.
예제 코드) Request 로그 출력 //Express 기본 모듈 불러오기. var express = require('express'); var http = require('http'); //Express 객체 생성 var app = express(); //기본포트를 app 객체에 속성으로 설정 app.set('port', process.env.PORT || 3000); app.use(function(req, res, next){ console.log('요청 처리'); // 전체 request 로그 출력 console.log(JSON.stringify(req.headers)); // request 로그 중, customheader 헤더값을 뽑아 b..