✔️ k8s 설치하기 이 글에서는 1대의 ubuntu VM에 컨트롤 플레인, 노드를 구성한다. https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ kubeadm은 k8s를 설치하기 위한 도구일 뿐 k8s가 아님에 주의하자 시작하기 전에 호환되는 리눅스 머신. 쿠버네티스 프로젝트는 데비안 기반 배포판, 레드햇 기반 배포판, 그리고 패키지 매니저를 사용하지 않는 경우에 대한 일반적인 가이드를 제공한다. 2 GB 이상의 램을 장착한 머신. (이 보다 작으면 사용자의 앱을 위한 공간이 거의 남지 않음) 2 이상의 CPU. 클러스터의 모든 머신에 걸친 전체 네트워크 연결. (공용 또는 사설 네트워크면 괜찮..
✔️ 쿠버네티스(Kubernetes) Kubernetes K8s를 어디서나 실행 쿠버네티스는 오픈소스로서 온-프레미스, 하이브리드, 또는 퍼블릭 클라우드 인프라스트럭처를 활용하는 데 자유를 제공하며, 워크로드를 사용자에게 관건이 되는 곳으로 kubernetes.io k8s는 Google이 개발했다. 2010년대에는 VM을 사용하는 회사가 대다수였다. 구글은 2009년부터 컨테이너라는 개념을 사용하고 있었고 구글의 내부 서비스는 컨테이너 위에서 작동하도록 되어있었다. 내부에 Borg 시스템을 만들었고 이것을 오픈 소스화 한 것이 k8s이다. Borg는 C++ 이지만 k8s는 Go로 만들어졌다. Borg 시스템을 단순히 오픈 소스화 한 것이 아니라 Go로 다시 만들었다. ✔️ what is k8s ? 서비스..
쿠버네티스에서 새로운 Pod을 만들기 위한 과정 (시퀀스 다이어그램) 1. Master Node의 kube-apiserver에 Pod 생성을 요청 2. kube-apiserver는 etcd에 새로운 상태를 저장 3. kube-apiserver가 etcd의 상태 변경을 확인하여, kube-controller-manager에게 새로운 Pod 생성을 요청 4. kube-controller-manager는 새로운 Pod를 생성(no assign)을 kube-apiserver에 전달하고, 이를 전달받은 kube-apiserver는 etcd에 저장 5. kube-scheduler는 kube-apiserver에 의해 Pod(no assign)가 확인되면, 조건에 맞는 Worker Node를 찾고 해당 Pod를 할당하..
PV, PVC lifeCycle 그림으로 설명 Static Provisioning 1. 인프라 관리자(admin)가 사용할 수 있는 Storage에 해당하는 PV를 생성 예제에서는 HostPath, NFS와 public cloud GCP, AWS, Azure의 Storage를 사용할 수 있는 상태 2개의 PV 생성 [ Local Storage와 Public Cloud Storage의 Access mode에 대한 설명 ] ReadWriteOnce(RWO) : 해당 PV는 하나의 Pod에만 마운트 되고 하나의 Pod에서만 읽고 쓰기가 가능. ReadOnlyMany (ROM): 여러 개의 Pod에 마운트가 가능하며, 여러 개의 Pod에서 동시에 읽기가 가능. 쓰기는 불가능. ReadWriteMany (RWM)..
✔️ Network 볼륨 (Persistent Storage) Pod 내부에서 특정 데이터를 보유해야 하는 stateful한(ex. DB) app의 경우 stateless한(Pod, deployment) 데이터를 영속적으로 저장하기 위한 방법이 필요하다. Pod에서 실행 중인 어플리케이션이 디스크에 데이터를 유지해야하고 Pod가 다른 노드로 Rescheduling된 경우에도 동일한 데이터를 사용해야 한다면 Local Volume(emptyDir, hostPath volume)을 사용할 수 없다. 어떤 클러스터 노드에서도 접근할 수 있어야 하므로 NAS 유형의 스토리지에 저장이 되어야한다. 온프렘 환경에서도 구축할 수 있는 NFS, iSCSI, GlusterFS, Ceph 뿐 아니라 EBS, gcePers..
✔️ Volume이란 ? 쿠버네티스 Pod 내에서 돌아가는 컨테이너는 고유한 파일시스템을 갖는다. 파일시스템은 컨테이너 이미지에서 제공되기 때문이다. 따라서 컨테이너가 재시작하게되면 이전 컨테이너에서 쓰여진 파일시스템은 새롭게 재시작된 컨테이너가 볼 수 없다. 만약 컨테이너가 종료되더라도 파일시스템이 유지되도록 하고싶다면 어떻게 해야 할까 ? 이 때 사용하는 오브젝트가 Volume이다. Volume은 파드의 일부분으로 정의되며 파드와 동일한 라이프사이클을 갖는 디스크 스토리지이다. 파드가 여러개의 컨테이너를 가지는 경우 모든 컨테이너가 볼륨을 공유할 수도 있다. ✔️ Volume의 종류 내부 Network (외부) Temp Local emptyDir hostPath GlusterFS gitRepo NFS..