Kubernetes

· Kubernetes
Storage Class 아래에서는 Google Cloud의 Persistent Disk를 볼륨으로 사용하는 경우를 예시로 든다. Storage Class를 사용하면 PV가 생성되는 것은 변함없지만, 이를 직접 생성하지 않아도 되게 된다. Cf. Common Storage Class provisioner 더보기 GCE AWS EBS Azure File Azure Disk CephFS Portworx ScaleIO Cf. 프로비저너를 이용하면 프로비전할 디스크 유형, 복제 유형 등과 같은 추가 매개변수를 전달할 수도 있다. (파라미터 종류는 프로비저너에 따라 매우 상이하다.) Static Provisioning 필요로할 때 직접 스토리지를 생성하는 방식이다. 이보다는 애플리케이션이 필요로 할 때 자동으로 ..
· Kubernetes
쿠버네티스의 볼륨은 도커의 볼륨이 동작하는 방식을 기반으로 한다. 따라서 아래 도커의 볼륨 동작 방식에 대해 이해가 필요한 경우에는 아래 게시글을 보고 오는 것을 추천한다. 2024.03.11 - [Docker] - Docker) Storage in Docker Volumes Volumes & Mounts 도커의 컨테이너의 경우 클러스터가 삭제될 때 컨테이너가 처리하던 데이터도 함께 삭제된다. 이를 방지하기 위해 컨테이너로 데이터를 처리하고자 할 때는 컨테이너가 생성될 때 볼륨을 하나 붙여 컨테이너가 삭제된 후에도 데이터는 보존되도록 한다. 쿠버네티스의 파드도 마찬가지이다. 파드가 삭제되면 파드가 처리하던 파드 내의 데이터들도 함께 삭제 된다. 이를 방지하기 위해 파드에 볼륨을 붙일 수 있다. 아래는 0..
· Kubernetes
Network Policy Ingress & Egress 각 애플리케이션(서버)를 기준으로 들어오는 트래픽을 Ingress라고 하고, 나가는 트래픽을 Egress라고 한다. 예를 들어 아래와 같은 구조로 애플리케이션이 통신한다고 가정해보자. Web server를 기준으로 사용자로부터 오는 트래픽은 Ingress이고, API Server로 나가는 트래픽은 Egress이다. Network Security 아래 네트워크 솔루션에서는 노드들을 가로지르는 virtual private network에 의해 모든 파드들이 IP 또는 Pod name 또는 서비스들에 의해 기본적으로 서로 닿을 수 있다. 쿠버네티스에서 네트워킹을 위한 전제 조건 중 하나는 어떠한 솔루션을 구현하든 경로(routes)와 같은 추가 설정을 ..
· Kubernetes
Image Security Image name 아래와 같이 Pod의 manifest 파일의 `spec.image` 값이 `nginx` 인 경우를 가정해보자. `pod-definition.yaml` spec: image: nginx Pod manifest 파일에서의 `image` 는 이미지 또는 저장소(Repository) 명이다. 위의 `image` 값은 실제로는 `library/nginx` 에 해당한다. (첫 번째 part는 사용자 또는 계정 이름이나, 제공되지 않으면 라이브러리라고 인식한다.) Cf. `library` 는 Docker의 공식 이미지가 저장되는 기본 계정의 이름이다. 더 나아가, 이미지를 어디서 pull 해오는지를 구체적으로 지정하지 않았기 때문에 도커의 기본 레지스트리 값인 Docke..
· Kubernetes
Authorization 앞선 내용들이 Authentication(인증)에 대한 내용이었다면, 여기서부터는 Authorization(인가, 권한 부여)에 관한 내용이다. 여러 팀 또는 조직간에 클러스터를 공유할 때 네임스페이스를 통해 논리적으로 분할함으로써 사용자의 액세스를 자신이 속한 네임스페이스에만 가능하도록 제한할 수 있다. Authorization Mechanisms Kube API 서버에 Authorization mode 옵션을 따로 명시하지 않으면 AlwaysAllow가 기본값이다. `/etc/kubernetes/manifests/kube-apiserver.yaml` 파일의 `spec.containers[*].command[*].authorization-mode` 필드값으로 다수의 메커니즘을 ..
· Kubernetes
KubeConfig kubernetes api를 통해 요청을 보낼 때 인증 관련 정보를 함께 제출해야한다. 아래와 같이 단계적으로 커멘드의 길이를 줄일 수 있다. server명이 playground-url이라는 전제하에 아래와 같이 요청 가능 curl \\ -- cert=admin.crt -- key=admin.key -- cacert=ca.cert kubectl을 통한 요청 kubectl get pods \\ -- server playground-url:6443 -- client-cert admin.crt -- client-key admin.crt -- certificate-authority ca.cert 인증 관련 정보를 모두 config 라는 파일에 저장한 후 이를 kubectl 명령시 마다 kub..
· Kubernetes
개요 Secure host kube-apiserver는 Kubernetes의 중심에 있으며, kubectl을 통해 접근할 수도 있고 직접 apiserver에 접근할 수도 있다. (apiserver에 대한 액세스를 제어하는 것이 1차 방어선이라고 할 수 있겠다.) Who can access? 이는 인증 메커니즘에 따라 달라진다. 유형은 아래와 같다. file - Username and passwords file - Username and tokens Certificates (인증서) 외부 인증 공급자 (ex. LDAP) Service account (컴퓨터가 생성) What can they do? 인증 메커니즘으로 정의된다. RBAC (역할 기반 액세스 컨트롤) ABAC Node Authorization ..
· Kubernetes
OS Upgrade 해당 내용은 OS Upgrade 뿐만 아니라 Kubelet Version Upgrade 등의 상황에서도 필요한 내용이다. 노드가 비활성화되었다가 활성화되면 즉시 Kubelet이 실행되고 노드에 배치된 파드는 다시 실행된다. 하지만 노드가 5분(`pod-eviction-timeout default value`) 이상 비활성화되면 파드는 다른 노드에 재배치되게 된다. Cf. set Pod eviction timeout(노드에서 파드를 삭제하기 위한 대기 시간) kube-controller-manager --pod-eviction-timeout=5m0s Drain 노드에 존재하는 모든 파드를 제거하여 노드를 비운다. 해당 노드는 `SchedulingDisable` 상태가 되어 새로운 파드의..
· Kubernetes
Rolling Updates and Rollbacks Rollout Command rollout 상태 확인 kubectl rollout status deployment/[deployment-name] rollout 이력 조회 kubectl rollout history deployment/[deployment-name] Deployment Strategy Recreate Strategy 이미 존재하는 인스턴스가 5개라면 5개의 구버전 인스턴스를 모두 중단 및 제거하고 새버전 인스턴스를 5개 생성하는 방식으로, 구버전 인스턴스가 모두 제거되고 새버전 인스턴스가 모두 생성되는 사이에 서비스 중단이 발생한다. Rolling Strategy(default) 구버전 인스턴스를 하나씩 중단하면서 새버전 인스턴스를 하..
· Kubernetes
Scheduler 쿠버네티스는 확장이 용이해서 별도의 스케쥴러를 만들어 배포함으로써 이를 기본 스케쥴러로 사용할 수도 있고, 추가적인 스케쥴러로 사용할 수도 있다. 스케쥴러들은 중복되는 이름을 가질 수 없다. (기본 스케쥴러의 이름은 default-scheduler) apiVersion: kubescheduler.config.k8s.io/v1 kind: KubeSchedulerConfiguration profiles: - schedulerName: [scheduler-name] Multiple Scheduler(Deploy Additional Scheduler) 각 스케줄러는 별도의 구성(config) 파일을 사용하고, 고유한 스케쥴러 이름을 가짐 kube-scheduler 바이너리 파일을 다운받아 여러..
devYH
'Kubernetes' 카테고리의 글 목록