본문 바로가기

Kubernetes

쿠버네티스 헬름 헬름(Helm)은 쿠버네티스의 패키지 관리자다. 헬름 설치 가이드는 아래에서 확인할 수 있다. https://helm.sh/ko/docs/intro/install/ 헬름 설치하기 헬름 설치하고 작동하는 방법 배우기. helm.sh 헬름에는 이미 많은 차트가 제공되고 있다. 차트를 다운받아 적용하면 애플리케이션을 손쉽게 배포할 수 있다. 기본적으로 참조하는 저장소가 등록되어 있지 않으면 저장소를 추가하려면 helm repo add 명령어를 사용한다. 아티팩트 허브는 여러 헬름 저장소를 통합 검색할 수 있는 서비스다. 헬름 커뮤니티가 관리하는 저장소는 물론 다양한 OSS가 제공하는 헬름 저장소도 등록되어 있다. 헬름 저장소에서 검색했던 것처럼 아티팩트 허브에서도 차트를 검색할 수 있다. # Stable 저장.. 더보기
쿠버네티스 보안 쿠버네티스에는 사용자와 비슷한 개념으로 서비스 어카운트(ServiceAccount)가 있다. 서비스 어카운트는 쿠버네티스에서만 사용되는 것으로 파드에서 실행되는 프로세스를 위해 할당되며 네임스페이스와 연결된 리소스다. 파드 기동 시 반드시 서비스 어카운트 한 개를 할당해야 하며 서비스 어카운트 기반 인증/인가를 하고 있다. 지정하지 않으면 기본 서비스 어카운트가 할당된다. apiVersion: v1 kind: ServiceAccount metadata: name: sample-serviceaccount namespace: default imagePullSecrets: - name: myregistrykey 인증이 필요한 개인 저장소에서 지정된 이미지를 가져오기 위해 시크릿인 imagePullSecrets.. 더보기
쿠버네티스 노드 스케줄링 매니페스트를 통해 쿠버네티스 사용자와 관리자는 노드 스케줄링을 할 수 있다. 일단 쿠버네티스 사용자가 배치하고 싶은 노르를 선택하는 방법이다. 종류 개요 nodeSelector(가장 단순한 노드 어피니티) 단순한 노드 어피니티 가능 노드 어피니티 특정 노드상에서만 실행 노드 안티어피니티 특정 노드 이외에서 실행 인터파드 어피니티 특정 파드가 존재하는 도메인(노드, 존 등)에서 실행 인터파드 안티어피니티 특정 파드가 존재하지 않는 도메인(노드, 존 등)에서 실행 쿠버네티스 클러스터에서 노드 리소스에는 노드의 PC정보 등이 라벨로 지정되어있다. 노드 스케줄링을 위해 사용자가 지정한 라벨을 추가로 부여할 수 있으면 명령어는 kubectl label node로 지정할 수 있다. 단순한 노드 어피니티만을 실행하는.. 더보기
쿠버네티스 헬스 체크 쿠버네티스에는 파드가 정상인지를 판단하기 위한 헬스 체크 기능이 있다. 파드에 설정된 spec.restartPolicy에 따라 파드를 재시작한다. 쿠버네티스에는 Liveness Probe, Readiness Probe, Startup Probe라는 세 가지 헬스 체크 방법이 있다. Probe 종류 역할 실패 시 동작 Liveness Probe 파드 내부의 컨테이너가 정상 동작 중인지 확인 컨테이너 재기동 Readiness Probe 파드가 요청을 받아들일 수 있는지 확인 트래픽 차단 (파드를 재기동하지 않음) Startup Probe 파드의 첫 번째 기동이 완료되었는지 확인 다른 Probe 실행을 시작하지 않음 Liveness Probe는 파드 내부의 컨테이너가 정상적으로 동작 중인지 확인하기 위한 헬스.. 더보기
쿠버네티스 리소스 관리 및 오토 스케일링 쿠버네티스는 컨테이너 단위로 리소스 제한 설정이 가능하다. 제한 가능한 리소스는 CPU, 메모리, Ephemeral 스토리지, 플러그인을 이용한 GPU 등이 있다. CPU/메모리 제한 CPU는 클럭 수로 지정하지 않고 1vCPU를 1000m(millicores) 단위로 지정한다. apiVersion: apps/v1 kind: Deployment metadata: name: sample-resource spec: replicas: 3 selector: matchLabels: app: sample-app template: metadata: labels: editor: vscode spec: containers: - name: nginx-container image: nginx:1.16 resources: r.. 더보기
쿠버네티스 볼륨 쿠버네티스의 스토리지 리소스 종류에는 볼륨(volume)과 영구 볼륨(Persistentvolume) 그리고 영구 볼륨 클레임(PersistentVolumeClaim)이 있다. 볼륨은 미리 준비된 사용 가능한 볼륨(호스트 볼륨/nfs/iSCSI/Ceph) 등을 매니페스트에 직접 지정하여 사용할 수 있다. 하지만 쿠버네티스에서 신규 볼륨을 생성하거나 기존 볼륨을 삭제하는 작업은 할 수 없고 매니페스트에서도 볼륨 리소스를 생성하는 것도 불가능하다. 하지만 영구 볼륨은 외부 영구 볼륨을 제공하는 시스템과 연계하여 신규 볼륨을 생성하거나 기존 볼륨을 삭제하는 등의 작업이 가능하다. 영구 볼륨 클레임은 이름 그대로 생성된 영구 볼륨 리소스를 할당하는 리소스다. 영구 볼륨은 클러스터에 볼륨을 등록만 하기 때문에 실.. 더보기
쿠버네티스 컨피그 API 쿠버네티스에는 컨테이너에 대해 설정 파일, 패스워드 같은 기밀 정보 등을 추가할 수 있다. 컨테이너의 설정 내용은 환경 변수나 파일이 저장되어 있는 영역을 마운트 하여 전달하는 것이 일반적이다. 정적 설정으로 컨테이너의 환경 변수 전달 apiVersion: v1 kind: Pod metadata: name: sample-env labels: app: sample-app spec: containers: - image: nginx:1.16 name: my-name env: - name: MAX_CONNECTION value: 100 더보기 # 생성된 파드의 컨테이너 내의 환경 변수 MAX_CONNECTION을 출력하면 해당 값이 출력된다 $ kubectl exec -it sample-env -- env | .. 더보기
쿠버네티스 인그레스 쿠버네티스 서비스의 LoadBalancer 타입은 L4 로드 밸런싱을 제공하는 리소스였지만 인그레스(Ingress)는 L7 로드 밸런싱으 제공하는 리소스다. 인그레스는 서비스들을 묶는 서비스들의 상위 객체로 서비스 종류의 하나로서가 아닌 독립된 리소스로 구현되어 있다. 인그레스 리소스 생성 apiVersion: v1 kind: Service metadata: name: sample-ingress-svc-1 spec: type: NodePort ports: - name: "http-port" protocol: "TCP" port: 8888 targetPort:80 selector: ingress-app: sample1 --- apiVersion: v1 kind: Pod metadata: name: samp.. 더보기