목록전체 글 (760)
우노
요약 K8S에서 Resource의 Request와 Limit은 컨테이너에 할당되는 CPU, Memory의 자원량을 의미합니다. Request는, 컨테이너 생성 시 필요한 자원량을 의미합니다. Limit은, 컨테이너가 이미 실행 중인 상태에서 추가 리소스가 필요한 경우에 사용할 수 있는 최대 자원량을 의미합니다. 이때 주의할 점은, 반드시 Limit은 Request보다 같거나 커야한다는 것입니다. Limit은 추가로 얼만큼의 리소스를 더 사용할 것인지가 아닌, 컨테이너 생성 시 필요한 자원량과 추가로 사용할 자원량을 더한 최대 자원량을 의미하기 때문입니다. CPU와 Memory의 자원 단위는 아래와 같습니다. CPU : Milicore (1,000 Milicore = 1Core) Memory : Mbyte..
들어가기 앞서, 해당 포스팅에선, Prometheus Config의 scrape_configs 설정 시 static_configs의 targets을 어떻게 설정해야하는지에 대해서 다뤄보겠습니다. Prometheus Config File 예제 코드 global: scrape_interval: 30s evaluation_interval: 30s scrape_timeout: 10s scrape_configs: - job_name: 'Test' static_configs: - targets: ['12.34.567.890:8086'] “http://12.34.567.890:8086/metrics”라는 경로에서 metrics를 scrape 해오고 싶다면, targets에는 “http:/..
K8S Replicaset 상태 확인 명령어 kubectl get replicaset Desired (원하는 수) ReplicaSet으로 관리하길 원하는 Pod의 수를 나타냅니다. 사용자가 설정한 값입니다. Current (현재 수) 실제 동작 중인 Pod의 수를 나타냅니다. Ready (준비된 수) 사용할 준비가 완료된 Pod의 수를 나타냅니다. 참고 정상적인 환경이라면 Desired, Current, Ready 개수가 모두 동일해야합니다.
들어가기 앞서, Pod를 띄웠을 때, 에러로 인해 Pod가 지속적으로 재시작되는 경우가 있습니다. 이때 트러블 슈팅을 위해 일시적으로 Container를 유지하는 방법에 대해서 포스팅하겠습니다. Container Sleep 적용 apiVersion: v1 kind: Pod metadata: name: ubuntu spec: containers: - name: ubuntu image: ubuntu:latest # Just spin & wait forever command: [ "/bin/bash", "-c", "--" ] args: [ "while true; do sleep 3600; done;" ] 정석적인 방법은 아니며, 이외에도 다양한 방법이 사용될 수 있습니다. 참고 https://stackover..
들어가기 앞서, Kubernetes에서 Volume은, 3가지 구조로 사용됩니다. PersistentVolume(PV) PersistentVolumeClaim(PVC) StorageClass 해당 포스팅에선 PV와 PVC에 대해서 먼저 이해한 뒤, StorageClass에 대해서 이해해보겠습니다. PV와 PVC 요약 PV Volume 자체를 의미합니다. 클러스터 내에서 독립적으로 관리되며 별도의 생명 주기를 가집니다. 클라우드 서비스 또는 직접 구축한 Storage와 같은 다양한 소스에서 제공되는 스토리지를 사용할 수 있습니다. PVC 사용자가 PV에 요청한 정보를 의미합니다. 필요한 용량, 액세스 모드 등을 지정하여 PV를 요청합니다. Pod는 직접 PV에 연결되는 대신, PVC를 통해 스토리지에 액세..
들어가기 앞서, 해당 포스팅에선, Istio의 AuthorizationPolicy에 대해서 다뤄보겠습니다. AuthorizationPolicy란? Istio의 AuthorizationPolicy는 서비스 메시 내에서 네트워크 트래픽에 대한 엑세스 제어를 정의하는 데 사용되는 Kubernetes Custom Resource Definition(CRD) 중 하나입니다. AuthorizationPolicy를 사용하면 서비스 간 또는 서비스와 클라이언트 간의 통신을 제한하거나 규제할 수 있습니다. AuthorizationPolicy 예제 코드 AuthorizationPolicy 리소스는 Terraform을 사용해 정의하겠습니다. resource "kubernetes_manifest" "example_author..
들어가기 앞서, Kubernetes(K8s)에서 "ExternalName"은 서비스(Service) 리소스의 유형 중 하나로, 내부 클러스터의 애플리케이션들은 "ExternalName" 유형으로 선언된 서비스(Service)의 DNS를 사용해, 외부 서비스 또는 외부 도메인을 간단하게 참조할 수 있습니다. 예제 클러스터 내부 Pod에서 외부 도메인인 “external-service.example.com”에 접근해야 한다고 가정해 봅시다. 이때, 아래와 같이 ExternalName 유형의 Service를 생성한 뒤, apiVersion: v1 kind: Service metadata: name: my-external-service spec: type: ExternalName externalName: ext..
들어가기 앞서, 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..