목록DevOps (91)
우노
들어가기 앞서, terraform untaint 명령어는, State 파일에 특정 리소스에 문제가 없다고 저장해놓기 위해 사용됩니다. 예제 부팅이 느린 앱(Pod)을 Deployment를 통해 배포한다고 가정해봅시다. terraform apply 시, Deployment는 Pod의 앱 배포를 기다리게 됩니다. 하지만, Pod 앱의 부팅이 느리기 때문에 Terraform에선 Deployment exceeded its progress deadline 에러를 뱉고 중지하게 되며, State에는 Deployment가 정상 배포 되지 않았다고 저장되게 됩니다. 하지만, 실제 환경에서 Pod 앱의 부팅이 끝나 Deployment가 정상 배포된다면 State 파일과 실제 환경의 설정이 달라지게 됩니다. 이때, 코드 ..
들어가기 앞서, 해당 포스팅에선, 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..
Local에서 Github Branch 삭제 git push origin --delete 해당 명령어를 실행하는 branch 위치는 상관 없으며, Github 콘솔에서 반영 결과를 바로 확인할 수 있습니다. Github Branch와 Local의 Remote Branch 상태 동기화 Github Branch가 삭제되어도 Local의 Remote Branch에는 반영되지 않으므로, 아래 명령어로 동기화할 수 있습니다. git fetch --all --prune 반영 결과 확인 git branch -a Local Branch 삭제 git checkout # 지우려는 local branch의 상위 branch로 이동 git branch -d # local branch 삭제 참고 https://remagine...
Service란? Pod는 IP가 랜덤하게 지정 되고, 재시작 될 때마다 변경되기 때문에, 고정된 엔드포인트로 호출하는 것이 어렵습니다. 이때, Service를 사용해 고정된 IP로 Pod에 접근하도록 설정할 수 있습니다. 뿐만 아니라, Service를 통해 트래픽이 여러 Pod들에게 로드밸런싱되도록 설정할 수 있습니다. Service Type 서비스 유형은 크게 3가지로 구분됩니다. ClusterIP NodePort LoadBalancer ExternalName (해당 유형은 생략하겠습니다.) ClusterIP 디폴트 설정입니다. ClusterIP 유형은, Service에 클러스터 내부 가상 IP 주소인 ‘ClusterIP’를 할당해, 클러스터 내부에서만 해당 Service에 접근할 수 있도록하는 설정..
들어가기 앞서, 쿠버네티스 클러스터는 노드들의 집합이며, 노드는 두가지 종류로 이루어져있습니다. Master Node - Control Plane(컨트롤 플레인) 워커 노드와 클러스터 내 파드들을 관리하고 제어합니다. Worker Node - Data Plane(데이터 플레인) 파드를 통해 실제 Application을 동작시킵니다. Control Plane(컨트롤 플레인) Control Plane은 현재의 클러스터 상태를 사용자가 원하는 클러스터 상태(ex. yaml 파일 내용)로 끊임없이 조정해 주는 컨트롤 센터입니다. 즉, Control Plane에는 실제 서비스와는 무관한, k8s 클러스터 운영과 관련된 컴포넌트들로 이루어져 있습니다. API Server REST, kubectl 명령어 등을 입력 ..
들어가기 앞서, 해당 포스트에선, HTTP(S) Google Cloud Load Balancer(GCLB)를 Terraform을 사용해 생성하는 방법에 대해서 다뤄보겠습니다. GCLB 주요 구성 요소 프론트 엔드 : 클라이언트 요청을 받을 IP 주소, 포트, 프로토콜을 지정 Global Address 클라이언트 요청을 받을 IP 주소 지정 Global Forwarding Rule 클라이언트 요청을 Target Proxy에 전달 Target Proxy 클라이언트 요청을 Url Map으로 전달 호스트 및 경로 규칙 - 부하 분산기 Url Map 클라이언트 요청 Url에 따라 특정 Backend Service로 트래픽 전달 백엔드 Backend Service Backend Service로 등록된 Backend..
들어가기 앞서, 해당 포스트에서는, docker build 시 특정 경로에 있는 Dockerfile을 빌드하는 방법에 대해서 다뤄보겠습니다. 특정 경로의 Dockerfile 빌드 방법 docker build -t -f . # docker build -t mlflow -f /mlflow/Dockerfile . 주의 사항 Dockerfile에서 상대 경로를 사용해 COPY를 사용한다면, 기본 PATH는 docker build 명령어를 실행한 PATH가 됩니다. 참고 https://docs.docker.com/engine/reference/commandline/build/