Authentication K8S로 접근하는 방법 X509 Client Certs Cluster에는 접근할 때 필요한 정보(CA crt, Client crt, Client key)가 들어있는 kubeconfig라는 파일이 존재 외부에서 Client Key와 Client crt를 가지고 https로 API Server에 접근이 가능 kubectl은 kubeconfig를 복사하기 때문에 accept-hosts 로 proxy를 개방하면 외부에서 proxy port로 http 접근이 가능 kubectl 외부의 kubectl에서 각 cluster의 kubeconfig 파일을 갖고 있다면 원하는 cluster에 접근이 가능 $ kubectl config user-context context-A kubeconfig ..
kubernetes
HPA (Horizontal Pod AutoScaler) HPA를 Controller에 연결하면 HPA가 해당 Controller의 Pod 자원 사용량을 체크 임계치 이상 자원을 사용하면 Controller의 replicas를 늘려 Pod을 scale out 시킴 적절한 조건 기동이 빠르게 되는 App에 적용해야 함 Stateless App에 적용해야 함 동작 원리 Node마다 존재하는 Resource Estimator인 cAdvisor가 Container 리소스 사용량을 체크하고 kubelet은 cAdvisor로부터 리소스 정보를 수집 metrics server(Pod)를 설치하면 각 Node의 kubelet으로부터 리소스 사용량을 종합하여 수집 metrics server는 control plane의 ..
사용 예시 Service LoadBalancing Pod마다 Service를 연결한 후 path에 따라 트래픽을 연결시켜 줌 Canary Upgrade 업그레이드 할 Pod에 별도의 Service를 연결시킨 후 설정한 비율의 트래픽을 업그레이드 할 Pod으로 연결시킬 수 있음 Ingress Controller Ingress Controller라고 부르는 Ingress를 구현할 별도의 플러그인을 설치해야 함 대표적인 예시로 Nginx, Kong과 같은 플러그인이 존재 플러인을 설치하면 namespace가 생성되고 그 위에 Ingress 구현체 역할을 하는 Pod이 생성됨 (Deployment가 생성되어 관리 및 생성) 구현체 Pod의 Ingress rule에 따라 Service 및 Pod에 트래픽을 전달시..
Stateless Application VS Stateful Application Stateless Application Stateful Application 역할 단순 복제 각자 역할을 가짐 재생성 같은 서비스의 역할을 하는 앱을 생성 앱 이름 달라도 상관 없음 Down된 앱과 같은 앱을 생성 앱 이름 같아야 함 Volume 하나의 Volume을 공유하여 사용 가능 앱 각자의 Volume을 사용해야 함 네트워크 앱들이 트래픽을 균등하게 나누어 가짐 각 앱의 특징에 맞게 트래픽을 가짐 예시 Apache, Nginx MariaDB, Redis, MongoDB Controller ReplicaSet StatefulSet Service Service Headless Service StatefulSet Cont..
DaemonSet ReplicaSet은 node의 자원 상황에 따라 scheduler가 판단하여 Pod을 배치함 selector 과 template 을 지정해 template으로 각 node에 Pod을 생성하고 selector로 Pod의 label과 연결 특정한 Node에만 배포하고 싶을 때 nodeSelector 로 배포할 node의 라벨을 지정해 선택 배포 가능 hostPort 로 포트를 지정하여 각 Node의 포트가 배포된 Pod과 직접 연결되어 Service의 NodePort와 같이 사용할 수 있음 template 업데이트가 가능하며, 기본 업데이트 방식으로 RollingUpdate를 사용 DaemonSet은 node의 자원 상황에 관계없이 모든 Node에 Pod을 배포해야할 때 사용 사용 예시 ..
Template Pod를 재생성할 때, 어떤 Pod를 재생성할 지에 대한 template Template을 update한 후 pod를 재생성하면 업데이트 된 버전으로 재생성함 기존에 연결된 Pod들은 자동으로 변경되지 않음 Template에 Pod의 이름을 명시해도 replicas가 2 이상이면 ReplicaSet이름-랜덤값 의 이름으로 Pod가 생성됨 apiVersion: v1 kind: ReplicationController metadata: name: replication-1 spec: replicas: 1 selector: type: web **template:** metadata: name: pod-1 labels: type: web spec: containers: - name: containe..
요약 하나의 Cluster 내 pod들을 Namespace로 묶어서 관리 특정 Namespace의 자원 독점 방지를 위해 Resource Quota를 두어 총 사용 가능한 자원을 제한 Limit Range를 두어 Namespace에 들어올 pod의 크기를 제한 Namespace 뿐 아니라 Cluster 단위에도 Limit Range 및 Resource Quota 설정 가능 Namespace 하나의 Namespace에서 같은 종류의 Object일 때 동일한 pod 이름 사용 불가 타 Namespace와 분리되어 관리됨 → 대부분의 자원들은 자신의 Namespace 내에서만 사용 가능 ex) 서로 다른 Namespace에 있는 pod와 service 사이에는 서로 연결 불가 PV, Node와 같이 모든 Na..
환경(dev, pord)에 따라 변하는 설정과 관련된 값들을 관리하는 Object 서비스 내에서 환경과 관련된 값들을 관리했을 때 단점 환경에 대한 값들이 서비스 내부에서 관리되면 바뀔때마다 이미지 전체를 관리해줘야 함 환경 값에 따라 다른 이미지가 만들어지기 때문에 많은 이미지를 저장, 관리해야 함 클러스터 내 다른 서비스에서 해당 값들에 대한 접근 불가 파일 저장 및 주입 방법 1. Env (Literal) 상수로 값을 저장 secret의 값은 Base64 인코딩하여 저장 → pod에 주입 될 때 자동 디코딩 secret이 메모리에 저장됨 1Mbyte까지 가능 → 너무 많이 생성하면 자원에 문제 일으킴 File 방식보다 보안성 좋음 apiVersion: v1 kind: ConfigMap metadat..
emptyDir pod내의 container끼리 데이터를 공유하기 위한 volume pod내에 생성되기 때문에 pod 삭제시 함께 삭제됨 → 일시적으로 사용하는 데이터만 저장 apiVersion: v1 kind: Pod metadata: name: pod-volume-1 spec: containers: - name: con-1 image: something volumeMounts: - name: empty-dir # empty-dir로 mount mountPath: /mount1 - name: con-2 image: something volumeMounts: - name: empty-dir # empty-dir로 mount mountPath: /mount2 volumes: - name: empty-dir..