목록DevOps (91)
우노
들어가기 앞서, K8S에서 CPU는 Milicore단위(1,000 Milicore = 1Core)로, Memory는 Mbyte단위로 할당됩니다. Node 리소스 사용량 확인 kubectl top node NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% node-1 50m 2% 800Mi 40% node-2 75m 3% 900Mi 45% Pod 리소스 사용량 확인 kubectl top pod NAME CPU(cores) MEMORY(bytes) my-pod-1 100m 50Mi my-pod-2 200m 75Mi another-pod 50m 30Mi Pod 내부 Container 별 리소스 사용량 확인 kubectl top pod --containers=true POD NAME ..
들어가기 앞서, 해당 포스팅에선, K8S Deployment로 정의한 Prometheus Container를 기본 설정 파일 및 Basic Auth가 적용된 웹 설정 파일을 기반으로 실행하는 방법에 대해서 다뤄보겠습니다. 관련 리소스는 Terraform으로 관리하고 있기 때문에, HCL 코드를 기반으로 설명하겠습니다. Basic Auth에 사용할 비밀번호 해싱 python3-bcrypt를 사용해 Basic Auth에 사용할 비밀번호를 해싱합니다. import getpass import bcrypt password = getpass.getpass("password: ") hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()) ..
들어가기 앞서, Terraform에서, 공식 K8S Provider가 지원하지 않는 리소스는 ‘kubernetes_manifest’를 사용해 정의할 수 있습니다. 물론, yaml 파일을 그대로 사용할 수는 없으며 yaml의 모든 필드를 HCL 양식에 맞게 수정해야합니다. 다행히도 built-in function인 'yamldecode()'나 ‘tfk8s’ 같은 Tool을 사용해 YAML에서 HCL로 자동 변환할 수도 있습니다. yaml 예제 apiVersion: v1 kind: ConfigMap metadata: name: test-config namespace: default data: foo: bar Terraform kubernetes_manifest 예제 resource "kuber..
들어가기 앞서, Kubernetes의 Service는 특정 Pod에 네트워크 트래픽을 라우팅하는 역할을 합니다. Service는 라벨 셀렉터(spec.selector)를 통해, 해당 라벨과 동일한 라벨(spec.template.metadata.labels)을 가지고 있는 Pod에게 네트워크 트래픽을 라우팅하게 됩니다. 하지만, 라우팅 설정에 사용되는 라벨 관련 필드는 다양하기 때문에 헷갈릴 수 있습니다. service spec.selector (Service가 어떤 Pod에 라우팅할지 정하기 위한 라벨 셀렉터) deployment metadata.labels (Deployment에 할당되는 라벨) spec.selector.match_labels (Deployment가 어떤 Pod를 관리할지 정하기 위한 ..
들어가기 앞서, 해당 포스팅에선 Terraform을 통해 kubernetes_config_map 자원 생성 후 kubernetes_deployment 내부에 kubernetes_config_map 파일을 마운팅하는 방법에 대해서 다뤄보겠습니다. kubernetes_config_map 자원 생성 resource "kubernetes_config_map" "example_config_map" { metadata { name = "example-config-map" } data = { "config-file.txt" =
문제 상황 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? (Details: [2] No such file or directory) docker ps 명령어를 통해 docker 정상 작동을 확인했음에도 불구하고, IntelliJ에서 Docker 연결이 불가능한 상황 해결 방법 터미널에서 아래 명령어를 실행합니다. # {name}에는 자신이 macOS에 설정한 값을 넣는다. sudo ln -s /Users/{name}/.docker/run/docker.sock /var/run/ 이후, Settings → 빌드, 실행, 배포 → Docker → 아래와 같이 재설정합니다. 참고 htt..
들어가기 앞서, kubectl set image 명령어는 Kubernetes에서 사용되며, 이미 존재하는 Pod의 이미지를 업데이트하는 데 사용됩니다. 해당 포스팅에선, kubectl set image 명령어의 기본 사용 방법과 예시를 다뤄보겠습니다. kubectl set image 명령어 kubectl set image deployment/ = deployment-name : 이미지를 업데이트하려는 Deployment의 이름입니다. container-name : 업데이트하려는 컨테이너의 이름입니다. new-image : 새 이미지의 이름과 태그를 지정합니다. 예시 kubectl set image deployment/myapp-deployment myapp-container=myapp:v2 myapp-d..
들어가기 앞서, 컨테이너 생성 시, Dockerfile 하단 지시문(CMD, ENTRYPOINT)을 통해 컨테이너 실행 상태를 유지해주지 않는다면, 컨테이너는 생성된 뒤 실행 상태를 유지하지 않고 종료됩니다. 따라서, 해당 포스팅에선 컨테이너 실행 상태를 유지할 수 있는 간단한 지시문을 다뤄보겠습니다. 지시문 예제 FROM ubuntu CMD ["sh", "-c", "tail -f /dev/null"] tail 로그 파일 또는 텍스트 파일의 내용을 보여주는 명령어입니다. f tail 명령어의 옵션 중 하나로, 파일의 내용을 실시간으로 모니터링하고 파일에 새로운 내용이 추가될 때마다 화면에 표시합니다. /dev/null 표준 출력(standard output)을 버릴 때 사용되는 특별한 파일입니다. 이 파..
들어가기 앞서, Dockerfile 하단 CMD, ENTRYPOINT 지시문 앞에 “sh -c”를 추가하는 경우가 있습니다. 실제로 CMD, ENTRYPOINT 지시문은 “sh -c” 추가 여부에 따라 실행 방식에 차이가 발생하게 됩니다. 해당 포스팅에선, 실행 방식에 따른 차이에 대해서 설명하겠습니다. 지시문 앞에 “sh -c”를 추가하는 경우 FROM ubuntu CMD ["sh", "-c", "mkdir test && tail -f /dev/null"] 원하는 작업은, "mkdir test” 명령어로 test 폴더를 생성하고 "tail -f /dev/null” 명령어로 컨테이너 실행 상태를 유지하는 것입니다. 만약, 지시문 앞에 “sh -c”를 추가한다면 해당 명령어는 원하는 의도대로 실행됩니다. ..
들어가기 앞서, 해당 포스팅에선, kubernetes_manifest 자원을 terraform import 하는 명령어에 대해서 다뤄보겠습니다. 예제 코드 kubernetes_manifest 예제 코드 resource "kubernetes_manifest" "example" { manifest = { apiVersion = "apps/v1" kind = "Deployment" metadata = { name = "example-deployment" namespace = "example-namespace" } spec = { replicas = 3 selector = { matchLabels = { app = "example-app" } } template = { metadata = { labels = {..