Kubernetes-Cluster쿠버네티스 클러스터는 두 종류의 서버로 구성된다.클러스터를 관리하는 마스터, 실제 컨테이러를 실행시키는 노드 마스터etcd, kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy, docker 등의 컴포넌트가 실행된다.etcd고가용성을 제공하는 키-값 저장소.필요한 모든 데이터를 저장하는 데이터베이스 역할.etcd에 있는 데이터를 백업하여 안정적으로 운영한다.서버 하나당 프로세스 1개만 사용 가능.kube-apiserverAPI를 사용할 수 있도록 하는 컴포넌트.쿠버네티스는 마이크로서비스 아키텍처이므로 서로 분리된 컴포넌트 여러 개로 구성되어 있다. 쿠버네티스에서 보내는 모든 요청은 ku..
DevOps/Kubernetes
Volume에 대한 자세한 설명은 이전 포스팅 참고VolumeVolue은 Pod의 구성요소로 Pod Spec에서 정의된다.파드가 시작되면 볼륨이 생성되고, 파드가 삭제되면 볼륨이 삭제된다.볼륨은 파드의 모든 컨테이너에서 사용 가능하고 접근하려는 컨테이너에서 각각 마운트 되어야 한다. EmptyDir아무 데이터도 없는 빈 디렉토리를 제공해준다.파드의 컨테이너 간에 Volume을 공유하기 위해 사용하며 컨테이너 간 파일을 공유할 때 유용하다.파드가 실행되는 도중 컨테이너가 함께 사용할 수 있도록 임시 저장 공간을 생성한다. spec: container: - volumeMounts: - name: [마운트할 볼륨 이름] mountPath: [경로] volumes: - name: [볼..
Volume파드의 컴포넌트이다.파드 내에 정의되며 사용하고자하는 스토리지를 가리키는 포인터, 인터페이스와 같은 역할을 한다.파드에 종속적이기 때문에 파드가 종료되면 볼륨들 또한 모두 종료된다.여러 컨테이너가 하나의 볼륨을 마운트하고 있다면 마운트된 위치에 데이터를 저장함으로 쉽게 데이터를 공유할 수 있다. Volume의 한계데이터의 지속 보존 문제이다.이를 해결하기 위해서는? => 볼륨이 외부 저장소를 가리킨다.외부에 저장소가 있기 때문에 파드가 종료되더라도 데이터는 유지된다. 즉, 지속 보존 문제를 해결할 수 있다. But그러나, 이런 방식은 쿠버네티스 인프라를 애플리케이션 개발자에게 공개해야 한다는 문제가 있다. 쿠버네티스 인프라의 규모가 크다면 파드를 생성할 때 어떤 외부 스토리지가 있는지를 하나..
노드쿠버네티스는 컨테이너를 파드내에 배치하고 노드에서 실행함으로 워크로드를 구동한다.노드의 컴포넌트에는 kubelet, 컨테이너 런타임, kube-proxy가 있다. 관리API 서버에 노드를 추가하는 두가지 방법노드의 kubelet으로 컨트롤 플레인에 자체 등록사용자가 노드 오브젝트를 수동으로 추가{ "kind": "Node", "apiVersion": "v1", "metadata": { "name": "10.240.79.157", "labels": { "name": "my-first-k8s-node" } }}쿠버네티스는 내부적으로 노드 오브젝트를 생성한다.kubelet이 노드의 metadata.name 필드와 일치하는지 API 서버에 등록 되어 있는지 확인한다.노드가 정..
쿠버네티스 내부에서 사용하는 네트워크가 외부와 격리되어 있기 때문에 쿠버네티스 내부에서 실행한 컨테이너를 외부에서 접근하려면 Service를 사용해야 한다.즉, Pod를 외부에서 접속할 수 있도록 만드려면 service란 개념에 대해서 알아야 한다.Service외부에서 쿠버네티스 클러스터에 접속하는 방법을 서비스라고 한다.여러 개의 파드에 고유한 도메인 이름을 부여.여러 개의 파드 접근 시 요청을 로드밸런싱클라우드 플랫폼의 로드 밸런서, 클러스터 노드의 파드등을 통해 파드 외부에 노출종류Cluster Ip: 내부에서만 파드들을 접근할 때 사용.NodePort: 파드에 접근할 수 있는 포트를 클러스터의 모든 노드에 동일하게 개방.LoadBalancer: aws, gcp와 같은 클라우드 플랫폼 환경에서만 가..
Deployment란???ReplicaSet의 선언적 업데이트를 제공하는 워크로드.Deployment Controller는 현재 상태에서 의도하는 상태로 비율을 조정하며 변경한다.Deployment가 ReplicaSet을 만들고, ReplicaSet이 Pod를 만든다.즉 Deployment를 선언하면 ReplicaSet부터 파드까지 만든다. 그렇기 때문에 ReplicaSet을 직접 생성하는 것보다는 일반적으로 Deployment를 많이 사용한다. apiVersion: apps/v1kind: Deploymentmetadata: name: test-deployment labels: tier: orange app: nginxspec: selector: matchLabels: ap..
ReplicaSet이란클러스터 안에서 움직이는 파드를 관리한다.클러스터의 파드의 실행을 항상 안정적으로 유지하는 것을 목표로 명시된 파드의 개수에 대한 가용성을 보증하는데 사용한다.labelSelector 조건에 따라 파드를 검색하여 매니페스트 파일의 replicas의 수와 일치하는지 확인한다.만약 가동중인 파드의 수가 부족한 경우 새로운 파드를 추가하고, 파드 수가 많을 때는 여분의 파드를 정지시킨다. Ex) ReplicaSet의 yamlapiVersion: apps/v1kind: ReplicaSetmetadata: name: one-rs labels: app: one-rs tier: frontendspec: replicas: 3 selector: matchLabels: ..
Pod란??Pod는 쿠버네티스가 만들 수 있는 가장 작은 오브젝트이며, 기본이 되는 배포 단위 이다.한 개 이상의 컨테이너 그룹이다. Pod의 필요성컨테이너는 단일 프로세스를 실행하는 것을 목적으로 설계되었다.이런 단일 컨테이너를 직접 관리하는 것이 아닌 파드라는 한 개의 단위로 통합하면 효율적으로 관리할 수 있다. Pod의 특징한 개 또는 여러 개의 container를 가질 수 있다.동일한 Pod 내의 container들은 volume을 공유할 수 있다.동일한 Pod 내의 conainter 들은 network를 공유하여 localhost 통신이 가능하다. Pod의 생성 방법Kubernetes의 Object 생성에는 Kubectl cli를 이용하는 방법과 yaml 파일을 이용하는 방법이 있다.kubec..