목록DevOps & Infra/K8S(Kubernetes) (35)
오늘도 한 뼘 더
# 배경 쿠버네티스의 CPU, Memory 등의 사용량 Metric을 보고 싶다. # 문제 metric을 보기 위해 다음 명령어를 입력하면 에러가 발생한다. > kubectl top nodes error: Metrics API not available # 원인 Metric-server가 없어서 발생하는 문제이다. metric-server 없이는 metric을 볼 수 없다. # 해결 방법 ## Metric-Server 설치 https://github.com/kubernetes-sigs/metrics-server GitHub - kubernetes-sigs/metrics-server: Scalable and efficient source of container resource metrics for Kuber..
Deployment (디플로이먼트) 레플리카셋과 포드의 배포를 관리 포드와 레플리카셋을 관리하기 때문에 deployment를 삭제하지 않고 pod을 삭제하면 pod은 삭제되지 않고 계속 생성된다. "--record" 명령어를 통해 revision이 가능하다. deployment-nginx.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx-my template: metadata: name: nginx-pod labels: ngnix-my spec: containers: - name: nginx image: nginx:latest p..
Replica Set(레플리카셋) 일정 개수의 포드를 유지하는 컨트롤러 역할 노드 장애 등의 이유로 포드를 사용할 수 없다면 다른 노드에서 포드를 생성할 수 있도록 한다. yaml 파일에 여러 개의 리소를 만들도록 지정할 수 있으나 이는 포드 개수를 유지하는 방법은 아니다. 레플리카 셋 사용 전 apiVersion: v1 kind: Pod metadata: name: nginx-pod-a spec: containers: - name: nginx-container image: nginx:latest ports: - containerPort: 80 protocol: TCP --- apiVersion: v1 kind: Pod metadata: name: nginx-pod-b spec: containers: -..
Pod(포드) 1개 이상의 컨테이너로 구성된 컨테이너의 집합 1개 또는 그 이상의 컨테이너가 하나의 포드에 존재할 수 있다. pod 목록 확인하기 kubectl get pods pod 상세 내용 확인 kubectl describe pods pod yaml 예시 apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx-container image: nginx:latest ports: - containerPort: 80 protocol: TCP apiVersion : YAML 파일에서 정의한 오브젝트의 API 버전 정보 kind : 오브젝트 종류 metadata : 라벨, 주석, 이름 등과 같은 리소스의 부가 정보 s..
쿠버네티스 컨테이너 오케이스트레이션 도구 CNCF 및 다른 클라우드 운영 도구들과 쉽게 연동되어 확장성이 좋다 클라우드 운영에서의 리소스들에 대한 커스터마이징이 가능하다 쿠버네티스의 리소스는 대부분 오브젝트의 형태로 관리한다. Pods, Replica Set 등이 하나의 오브젝트이다. 관리 리소스가 도커보다 더 많이 투여된다는 단점도 존재 오브젝트의 종류를 확인하기 위해 다음 명령어를 사용한다. 다음과 같이 오브젝트의 종류를 확인할 수 있다. kubectl api-resources
# 배경 Deployment.yaml파일에 환경변수를 작성하는데 해당 환경변수가 코드에 노출이 되는 것을 보호하고 싶다. # Secret.yaml 환경변수 등을 보호하기 위해서 쿠버네티스에서 secret.yaml을 제공한다. [예시] my-secret.yaml apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque stringData: JWT_SECRET: 100000223456908359043 TAGGING_DB_PASSWORD: password12345 TZ: Asia/Seoul 해당 파일을 사용하고자 하는 cluster에 접근하여 배포한다. kubectl apply -f my-secret.yaml # Deployment.yaml에 se..
# deployment.yaml 작성 deployment-test.yaml apiVersion: apps/v1 kind: Deployment metadata: name: deployment-test-service spec: replicas: 1 selector: matchLabels: app: test-service template: metadata: name: dev-test-service labels: app: test-service spec: containers: - name: test-service image: ${image-url} ports: - containerPort: 1000 env: - name: TZ value: Asia/Seoul replica : 몇 개를 올릴 것인지 설정 app ..
# AWS Load Balancer Controller 쿠버네티스 클러스터의 AWS Elastic Load Balancer를 관리한다. https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/aws-load-balancer-controller.html AWS Load Balancer Controller 추가 기능 설치 - Amazon EKS 배포된 차트는 보안 업데이트를 자동으로 수신하지 않습니다. 새 차트가 사용 가능해지면 수동으로 업그레이드해야 합니다. 업그레이드 시 이전 명령에서 install을 upgrade로 변경하되, 이전 명령 docs.aws.amazon.com # IAM 정책 생성하기 한국 리전 IAM 정책 다운로드하기 curl -o iam_poli..
# 관리형 노드 그룹 이란? EKS의 관리형 노드 그룹은 사용자를 위해 EC2 인스턴스를 생성하고 관리해준다. https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/managed-node-groups.html 관리형 노드 그룹 - Amazon EKS 이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오. docs.aws.amazon.com # 관리형 노드 그룹 생성하기 $ eksctl create nodegroup \ --cluster ${cluster-name} \ --region ap-northeast-2 \ --name ${nodegroup-name..
# 배경 개발계와 운영계에 대한 Cluster를 분류하였다. 연결되어있는 설정이 두 개인데 이를 번갈아가면서 사용하고 싶다. # 다중 클러스터 접근 ## 클러스터 확인(전체) $ kubectl config get-contexts ## 현재 사용 중인 클러스터 확인 $ kubectl config current-context ## 클러스터 변경 $ kubectl config use-context ${context-name}