개발자의 기록장 블로그

만나서 반가워 !
이거 좋아해?

EC2 Cluster 쿠버네티스 구성
·
DevOps/Kubernetes
EC2 Cluster K8S 구성AWS Admin 권한을 얻을 수 없는 상황에서 EKS에 대한 충분한 iam role을 부여받을 수 없는 상황 아래, 프로젝트를 진행함에 있어서 Managed K8S 를 사용할 수 없었고 이에 Centos 3대의 EC2로 K8S Cluster를 구성하였다.문제점 - 서비스 노출기존에 사용하던 코드가 EKS 환경에 맞추어져있어서 Ingress와 Ingress controller를 사용해 클러스터의 단일 진입점을 로드밸런서를 통해 만들었다. 기존에는 자동으로 ELB 프로비저닝이 이루어졌고 외부 서비스 노출이 어렵지 않았다. 하지만 단순 온프레미스 EC2를 사용해 클러스터를 구성하다보니 Ingress에 외부 IP가 Attatch가 되지 않았고 NodePort로 꺼내도 접속이 되..
[ECR] ImagePullSecrets Error
·
DevOps/Kubernetes
ImagePullSecretsECR에서 Image를 Pull해서 실행하기 위해선 AWS CLI 인증이 필요하다.K8S 환경에서는 이를 secret으로 관리해 deployment 및 service를 생성하는 yml에서 사용해 과정을 간략화할 수 있다.SECRET 작업1. AWS Login$ aws configure AWS Access Key ID [None]: # ACCESS KEYAWS Secret Access Key [None]: # SECRET KEYDefault region name [None]: Default output format [None]:2. ECR Loginaws ecr get-login-password --region ap-northeast-2 \--profile default | d..
쿠버네티스 볼륨
·
DevOps/Kubernetes
쿠버네티스 볼륨POD는 Stateless 상태로 관리되어야 한다.POD는 언제든 Down 될 수 있는 자원이기 때문에 POD 외부에 볼륨을 마운트 해놓아야 한다.Volume은 Storage의 추상화 개념으로 컨테이너는 POD에 바인딩 되는 볼륨을 마운트하고, 마치 로컬 스토리지에 있는 것처럼 스토리지에 접근한다.Volume의 종류emptyDirPOD가 Node에 할당될 때 생성되고, POD가 삭제될 때 같이 삭제되는 임시 볼륨이다.동일한 POD에서 실행되는 컨테이너 간에 파일을 공유할 때 사용한다. 사용할 미디어도 지정할 수 있는데 기본값은 Disk고, 빠른 연산을 위해 Memory를 미디어로 사용할 수도 있다.volumes:- name: html emptyDir: {} --- volumes:- n..
쿠버네티스 Ingress
·
DevOps/Kubernetes
쿠버네티스 IngressK8S의 Ingress Resource는 외부에서 클러스터 내부로 들어오는 Ingress 트래픽을 어떻게 처리할지 정의한다. GateWay 역할과 유사하다. Ingress 를 사용하지 않을 때 외부 트래픽에 클러스터를 노출시킬 방법은 NodePort, LB등이 있지만 이런 것들은 일반적으로 Layer4 (TCP, UDP) 에서의 요청을 처리하며 한계가 존재한다. Ingress는 Layer7의 요청을 처리할 수 있다.외부로부터 들어오는 요청에 대한 로드 밸런싱, TLS/SSL 인증서 처리, 특정 HTTP 경로의 라우팅등을 Ingress를 통해 자세하게 정의할 수있다. Ingress를 통해 위와 같은 요구사항을 정의하고, 이를 Ingress Controlle라고 부르는 특별한 웹서버에..
쿠버네티스 Service
·
DevOps/Kubernetes
쿠버네티스 ServiceK8S 클러스터 환경에서 동일한 서비스를 제공하는 POD 그룹에 단일 진입점을 만들기 위해 생성하는 리소스이다. 각 서비스에는 서비스가 존재하는 동안 절대로 변경되지 않는 IP주소:PORT 가 존재한다.클라이언트는 POD에 직접 연결하는 것이 아니라 서비스의 IP:PORT 로 연결을 시도하면 POD로 라우팅된다. 이로써 POD는 서비스에 종속되며, 클러스터 주변을 자유롭게 움직일 수 있다.POD들은 label selector 에 의해 관리되며 Round Robin 혹은 백분율의 Load Balancing 을 서비스가 수행한다.Cluster IP가장 기본 타입으로 클러스터 내부의 노드에서 접근 가능하다.Ingress를 통해 외부에서 내부로 들어오는 GateWay를 만들 것이기 때문에..
쿠버네티스 네트워크
·
DevOps/Kubernetes
쿠버네티스 네트워크Docker HostK8S NodeK8S Environment 다중 Node 환경에서, 만일 docker0 의 IP 가 동일하다면, ( Bridge network IP가 동일하다면 ) POD의 IP가 중복되는 상황이 발생한다. 이러한 상황을 막기 위해서는 K8S 클러스터 환경에서는 docker0가 아닌 cbr0 ( custom bridge ) 를 사용하며 IP를 다르게 해 POD의 IP 중복을 방지한다.
쿠버네티스 POD 배포
·
DevOps/Kubernetes
쿠버네티스 POD 배포쿠버네티스는 POD의 배포를 단일 단위로 하지 않고 Kubernetes Controller 라는 것으로 배치처리한다.Replication ControllerPOD의 개수를 보장한다.어떤 이유로든 POD가 Kill되면 재배포를 진행한다.하지만 Template (yml파일) 의 수정이 이미 배포된 POD들의 update를 보장하지 않는다.삭제kubectl delete rc --cascade=falseReplica SetReplication Controller의 새로운 버전이며 더욱 풍부한 label selector 를 제공한다.옵션In : 라벨의 값이 지정된 값 중 하나와 일치해야 한다.NotIn : 라벨의 값이 지정된 값과 일치해서는 안된다.Exists : pod에는 지정된 키가 있..
쿠버네티스 POD 관리
·
DevOps/Kubernetes
쿠버네티스 POD 관리POD란?K8S에서 배포의 단위가 되며, App Container들로 구성됨. POD란 컨테이너와 마찬가지로 독립된 프로세스 환경을 구성하는데 그렇기 때문에 POD 내부의 컨테이너들은 프로세스 자원을 공유할 수 있다.PAUSE 컨테이너POD를 생성할 때 PAUSE 컨테이너가 우선적으로 생성된다.PAUSE 컨테이너가 생성될 때 이 컨테이너에 네임스페이스가 할당되고, 이후 생성되는 APP Container가 이 네임스페이스를 공유하면서 POD 내부의 프로세스 자원을 공유할 수 있게 된다. 같은 네임스페이스를 공유하기 때문에 localhost로 통신이 가능하다.또한 PAUSE 컨테이너의 네임스페이스를 공유하기 때문에 PAUSE 컨테이너는 APP Container의 PID를 알고있다. 따라..