Study/K8s

· Study/K8s
Application 서비스를 운영하면 버그 패치나 기능 추가, 성능 개선 등으로 새 버전으로 업데이트하는 경우가 빈번하게 발생한다. 특히나 MSA 같은 환경에서는 개별 서비스들의 독립적인 배포가 잦기에 수많은 업데이트와 배포를 거치게 되며 좀 더 효율적인 배포 전략을 세워야한다.이러한 업데이트에서는 '사용자 경험의 연속성'이 중요한 요소가 되는데, 업데이트 과정에 있어서 사용자가 백엔드 단에서 업데이트가 벌어지고 있다는 등의 사실을 인지하지 못한 채로 서비스를 끊임없이 이용할 수 있어야하기 때문이다.이러한 요구를 충족시키기 위해 이른바 '무중단' 업데이트가 중요시 되는데, 이번에는 대표적인 Application 무중단 배포 전략 3가지를 간단한 실습과 함께 알아보도록 한다. Rolling Update기..
· Study/K8s
Lease공유 리소스를 lock하고, 연결된 노드들 간의 활동을 조정하기 위한, 특정 pod가 일정 기간 동안 리더임을 선언하는 객체여러개의 pod 중에서 하나의 pod만 주어진 시간 동안 대표가 되어서 활동할 수 있도록 하는 객체이다.lease API는 `coordination.k8s.io` API 그룹에 존재하며, 대표적으로 아래와 같은 feature를 갖는다.holderIdentity : 현재 lease의 대표 idleaseDurationSeconds : lease의 지속시간renewTime : 마지막 lease 갱신 시각 쿠버네티스 클러스터에는 기본적으로 `kube-node-lease`라는 네임스페이스가 기본적으로 존재하는데, 이 네임스페이스에는 클러스터에 연결된 모든 노드들의 상태(`.statu..
· Study/K8s
kubernetes에서 파드는 일반적으로 Deployment나 ReplicaSet과 함께 지속적으로 수행되도록하는 목적을 가지고 있다.하지만, 단순히 일회성을 가지고 수행되는 작업들도 존재한다.예를 들면, 로그 데이터 처리나 데이터 백업같은 데이터 처리 작업이나 외부 API를 통해 데이터 수집이나 동기화 작업과 같은 배치 작업들이 있을 수 있다. 이러한 작업들도 Kubernetes 클러스터 내에서 실행될 수 있다. 바로 이번에 알아볼 Job과 CronJob이 여기에 해당된다. Job일회성 작업을 수행하는 리소스Job은 파드를 통해서 작업을 수행하고, 지정된 작업이 성공적으로 종료될때까지 수행을 반복한다. 아래와 같이 Job은 실행할 내용을 Pod template에 담아서 생성하게 된다.apiVersion..
· Study/K8s
동일한 쿠버네티스 리소스를 개발, 운영, 테스트 등의 여러 환경에 배포하다보면, 각 환경별로 몇몇 설정값을 다르게 해야할 경우가 있다.예를 들어, 환경별로 환경변수의 내용이나 설정 값들이 달라지거나, 사용할 이미지의 버전이 다르거나... 이러한 상황에서 각 리소스들의 Yaml을 전부 따로 만들어서 수정해주게 되면, 일부만 변경된 리소스 파일이 생겨나기에 관리에 비효율적이게 된다.Kustomize를 통해 이러한 상황에서 리소스에서 필요한 부분만을 변경해서 사용할 수 있다. Kustomize쿠버네티스 리소스의 설정을 직접 변경하지 않고, 필드를 재정의해서 새로운 리소스로 생성할 수 있는 CLI 도구Kustomize는 객체지향 프로그래밍에서 사용했던것과 같이 '상속'의 개념을 통해 리소스들의 필드를 재정의해서..
· Study/K8s
일반적으로 kubernetes 클러스터 pod의 Metric을 모니터링하기 위해 Prometheus를 구축을 하게된다.운영되는 서비스와 범위가 확장됨에 따라 Prometheus가 모니터링할 대상의 갯수도 증가하게 되는데, 이에 따라 Prometheus에 가해지는 부하가 증가하게 될 것이다. 이러한 Prometheus의 몇 가지 한계점은 아래와 같이 정리될 수 있다.문제점내용확장성 제한기본적으로 Prometheus는 단일 서버 구성을 전제로 설계되어있어 수평적 확장에 어려움이 존재한다.SPoF(Single Point of Failure) 문제Prometheus를 단일 서버로 운영하게 되는 경우, 해당 노드에 장애가 발생하면 Metric 수집이 불가해 모니터링이 불가능하다.HA(High Availabilit..
· Study/K8s
Kubernetes에는 Secrets라는 리소스가 존재한다. Secrets에는 Application에서 사용하는 Credential과 같은 민감한 정보를 저장하여 관리하도록 한다.하지만 Secrets은 이름과는 다르게 정말 완벽한 비밀은 아니다. 이러한 Secrets는 Kubernetes 클러스터 Control plane에 위치한 etcd에 저장되는데, base64로 인코딩된 값이 평문으로 그대로 저장되기 때문이다. Secrets를 정말 Secret답게 사용하기 위해 보통 크게 3가지 방법을 사용하는 것이 제시된다.RBAC를 활용해 Secrets에 접근할 수 있는 User를 제한하는 방법외부 Secret Management 서비스를 이용해 저장 후, 클러스터로 가져와서 사용하는 방법Secrets가 저장되..
· Study/K8s
EC2 인스턴스내에서 AWS 서비스에 접근하기 위해서는 IAM User의 AccessKey Credential을 가져와서 사용하거나, 인스턴스에 IAM Role을 지정한 뒤 사용하고는 했다.그렇다면 Kubernetes의 클러스터에 존재하는 pod에서는 어떨까? pod 내에서도 마찬가지로 IAM User의 Credential을 넣고 사용하는 방법도 가능하다. 하지만 이러한 방법이 정말 안전하다고 말할 수는 없다.IAM User의 AccessKey Credential은 탈취의 위협이 항상 존재하므로 Application내에 하드코딩하거나 Application 구동 환경의 환경변수 등에 삽입하여 사용하는 것은 권고되지 않는 방식이다. 이런 문제를 위해 EC2 인스턴스에 연결하는 IAM Role이 존재한다. 하..
· Study/K8s
EBS CSI Driverkubernetes 클러스터와 AWS EBS 서비스의 연동을 위한 드라이버로, AWS EBS를 Storage로써 사용하기 위해 설치한다.EKS 클러스터에 PV를 프로비저닝, 마운트 작업을 수행하고, StorageClass를 이용해 EBS 볼륨을 동적으로 생성/삭제(Dynamic Provision)하는 역할을 수행한다. EBS CSI Driver는 다음과 같은 특성을 가진다.생성한 EBS의 PVC AccessMode는 ReadWriteOnce로 구성 EBS는 node(EC2)와 1:1로 매핑되는 구성을 갖기에, 동시에 같은 EBS에 접근 불가동시에 여러 액세스가 필요한 상황에서는 EBS가 아닌 EFS를 사용할 수 있다. EBS가 위치한 가용영역으로 PV의 nodeAffinity를 ..
Omoknooni
'Study/K8s' 카테고리의 글 목록