1. 개념 쿠버네티스는 네임스페이스 단위에서의 유저 리소스 접근을 핸들링하기 위한 4가지 접근제어 방식이 존재 Node : 스케줄링 된 파드의 kubelet에서 접근제어 ABAC : 속성기반 접근제어 RBAC : 역할기반 접근제어 Webhook : POST 요청에 대한 접근제어 2. RBAC Role & RoleBinding YAML Role apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: test-pod-reader rules: - apiGroups: [""] # "" means api resources: ["pods"] verbs: ["get", "watch", "list"] resourceNa..
1. 개념 쿠버네티스 클러스터에 접속하기 위한 설정·인증서 정보를 저장하고 있는 파일 kubeconfig가 없을 경우 매번 아래와 같이 긴 명령어를 사용해야 함 kubectl get pod --server my-k8s:6443 --client-key admin.key --client-certificate admin.crt --certificate-authority ca.crt kubeconfig 파일은 $HOME/.kube/config에 존재 kubeconfig 구조 clusters : 접속할 클러스터의 주소 정보 contexts : 어떤 유저가 어떤 클러스터에 접속할지 정의한 정보 users : 클러스터에 접속할 유저 정보 2. kubeconfig 확인 cat ~/.kube/config 3. confi..
1. 리소스 설정 백업 모든 네임스페이스의 모든 리소스 설정을 백업 kubectl get all -A -o yaml > backup.yaml 2. ETCD 백업 ETCD 환경변수 등록 export ETCDCTL_API=3 ETCD 파드의 설정 정보 확인 kubectl get po [etcd_파드이름] -o yaml -n kube-system ex) kubectl get po etcd-controlplane -o yaml -n kube-system ETCD 스냅샷 생성 etcdctl snapshot save --cacert=[trusted-ca-file] --cert=[cert-file] --key=[key-file] [스냅샷_저장경로] ex) etcdctl snapshot save --cacert=/et..
1. 개념 커든 특정 노드를 스케줄러에서 제외시켜 파드가 할당되지 않도록 함 기존에 노드에 배포된 파드는 그대로 남아있음 드레인 특정 노드를 스케줄러에서 제외시켜 파드가 할당되지 않도록 하고, 기존에 배포된 파드를 다른 노드로 이동시킴 노드를 업데이트하는 경우 활용 가능 2. 커든 설정 2.1. 명령어 커든 적용 kubectl cordon [노드_이름] 커든 해제 kubectl uncordon [노드_이름] 2.2. 커든 적용 w3-k8s 노드에 커든 적용 후 디플로이먼트 배포 w3-k8s 노드를 제외한 다른 노드에만 배포된 것을 확인 커든을 해제하고 다른 노드의 파드를 삭제하면 w3-k8s 노드에 재배포된 것을 확인 3. 드레인 설정 3.1. 명령어 드레인 적용 kubectl drain [노드_이름] ..
1. 개념 멀티 컨테이너 파드 하나의 파드에 2개 이상의 컨테이너를 실행하는 파드 파드 당 하나의 컨테이너를 운영하는 것이 일반적이지만, 목적에 따라 메인 컨테이너와 이를 보조하는 컨테이너로 구성 가능(ex. 웹 서버+로그 에이전트 등) 멀티 컨테이너 디자인 패턴으로는 사이드카 / 어댑터 / 앰버서더가 존재 초기화 컨테이너 메인 컨테이너 실행 전 초기화 역할을 수행하는 컨테이너 초기화 컨테이너의 작업이 성공적으로 완료되어야만 메인 컨테이너 실행 초기화 컨테이너의 작업이 실패할 경우 성공할 때까지 계속 재실행 초기화 컨테이너가 여러개일 경우 순차적으로 실행 2. 멀티 컨테이너 생성 yaml을 활용해 생성 apiVersion: v1 kind: Pod metadata: labels: run: test-mult..
1. 개념 파드에 환경변수를 지정하거나 데이터, 설정 등을 저장할 때 3가지 방식(환경변수, 컨피그맵, 시크릿) 활용 가능 시크릿의 경우 입력한 값이 base64로 인코딩되어 저장 2. 환경변수(env) 설정 환경변수 설정 apiVersion: v1 kind: Pod metadata: name: env-test labels: run: env-test spec: containers: - name: env-test image: kodekloud/webapp-color env: - name: APP_COLOR value: green 환경변수 적용 확인 3. 컨피그맵(ConfigMap) 설정 3.1. 컨피그맵 핸들링 yaml 파일을 활용한 컨피그맵 생성 apiVersion: v1 kind: ConfigMap m..
1. 개념 파드 생성 시 파드 내부에서 동작하는 컨테이너에게 전달할 커맨드와 인자 설정 가능 2. YAML을 활용한 커맨드 및 인자 설정 nginx 컨테이너 생성 및 command, args 설정 apiVersion: v1 kind: Pod metadata: name: command-demo spec: containers: - name: command-demo-container image: nginx command: ["echo"] args: ["Hi this is args test"] nginx 컨테이너 생성 및 command, args 설정(간소화 형식) apiVersion: v1 kind: Pod metadata: name: command-demo spec: containers: - name: co..
1. 개념 쿠버네티스는 서비스의 무중단 업데이트를 위해 3가지 배포 방식을 지원 롤링 업데이트 : 정해진 비율만큼의 파드만 점진적으로 배포 블루/그린 : ver 1.0과 ver 2.0을 구성해놓고, 트래픽을 ver 2.0으로 전환 카나리 : ver 2.0을 일부만 배포하고, 트래픽도 일부만 ver 2.0으로 전환. 배포에 문제가 없을 경우 ver 2.0을 점진적으로 배포 및 트래픽 전환 쿠버네티스는 롤링 업데이트를 디폴트 배포 전략으로 설정 또한 배포 이후 장애 시 복구를 위해 이전 버전으로 되돌리는 롤백 지원 2. 롤링 업데이트 옵션 maxSurge 롤링 업데이트를 위해 최대로 생성할 수 있는 파드 갯수 maxSurge를 높게 설정하면 롤링 배포를 빠르게 적용 가능 % 단위 또는 갯수 단위로 지정 가능..
1. 개념 K8s 클러스터의 리소스 사용량을 간단히 확인할 수 있는 오픈소스 리소스 모니터링 도구 kubelet에 포함된 cAdvisor가 메트릭(지표)을 수집해 metrics-server로 전송하는 구조 cAdvisor란? 컨테이너에 대한 정보를 수집·처리 및 전송하는 데몬 metrics-server는 기본적인 리소스 모니터링만 가능하므로, 세부적인 모니터링은 프로메테우스와 그라파나 활용 필요 2. metrics-server 설치 명령어를 이용해 설치 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml metrics-server 디플로이먼트 설정 수정 "--kub..