분류 전체보기
(TIL) kubectl apply의 내부 동작
kubectl applykubectl apply를 통해 객체를 관리하는 방식은 declarative 방식에 해당한다.이 명령어는 3가지 정보를 비교하는데 local configuration, live object, last-applied configuration 이 이에 해당한다.local configuration우리가 작성한 yaml 파일에 해당한다.live object클러스터에 존재하는 실제 객체 상태를 의미한다.last-applied configuration가장 마지막으로 kubectl apply를 실행했을 때의 상태를 의미한다.해당 데이터는 kubectl.kubernetes.io/last-applied-configuration 이라는 필드로 저장된다. imperative와의 혼용?imperativ..
(TIL) Kubernetes의 imperative, declarative
Imperative vs Declarative길을 찾는 예시를 통해 Imperative와 Declarative의 차이를 확인해보면 다음과 같다.100m 앞으로 가서 오른쪽으로 꺾은 후 200m 직진하세요 와 같이 설명하는 것을 imperative,홈플러스로 가세요와 같이 설명하는 것을 Declarative 방식이라고 한다.즉 imperative은 무엇을 어떻게 할지를 지시하며 declarative는 무엇을 원하는지만 명시하는 방식이다.인프라에서의 Imperative vs Declarative인프라 관리에서도 동일한 개념이 적용된다.웹 서버 VM을 생성하라NGINX를 설치하라설정 파일을 수정하라 (포트 8080으로)Git에서 코드를 다운로드해라NGINX를 실행해라NGINX 웹서버가 포트 8080에사 동작한..
(TIL) Kubernetes namespace
Intro지금까지 다뤘던 Pod, Deployment, Service 등은 모두 특정한 Namespace에 속해 동작한다.NameSpace를 별도로 지정하지 않으면 기본 네임스페이스인 default에서 동작하게된다. Kubernetes의 기본 Namespacedefault가장 기본적으로 사용되는 네임스페이스이다.kube-systemKubernetes의 내부 컴포넌트들이 위치하는 곳으로 DNS, 네트워킹등이 이에 해당한다.kube-public모든 사용자에게 공개적으로 공유 가능한 리소스들이다. 왜 Namespace를 사용하는가?Namespace를 사용함으로써 dev-prod 환경을 하나의 클러스터에서 분리해서 사용할 수 있으며, 리소스 사용량 제한을 걸거나 RBAC를 Namespace 단위로 설정할 수 있..
(TIL) Kubernetes Service
Kubernetes Service란Kubernetes에서 Pod는 독립적인 네트워크를 사용하기 때문에 외부에서 직접 Pod로 접근하는 것은 어렵다.또한 Pod는 동적으로 생성되고 종료되므로 IP주소가 자주 변경된다는 점이 있는데, 이러한 상황에서 내/외부 통신을 용이하게 하기 위한 용도로 등장한 개념이 Service이다.Service의 역할Kubernetes Service는 특정 Pod의 집합을 하나의 네트워크 엔드포인트로 묶어주는 역할을 한다.즉 고정된 IP 주소를 제공하여 Pod이 벼경되더라도 안정적인 네트워크 접근이 가능하도록 만든다.Service의 종류Kubernetes에는 3가지의 주요한 Service 타입이 존재한다.yaml 파일 정의의 selector 필드는 어떤 application과 서비..
(TIL) Kubernetes Deployment
Kubernetes Deployment란프로뎍선 환경, 즉 실제로 서비스를 이용자들에게 제공하는 환경에서 서버를 운영하는 경우 다양한 상황을 고려해야만한다.단일 인스턴스가 아닌 여러 개의 웹 서버 인스턴스를 사용하면서 장애 상황에 대처할 수 있어야하며 롤백과 업데이트에 대한 내용또한 고려되어야한다.이러한 요구사항을 충족하기 위한 개념이 Deployment이며 Deployment는 ReplicaSet을 감싸는 상위 개념에 해당한다. Deployment의 주요 기능Rolling Updates한 번에 모든 Pod를 업데이트하지 않고 순차적으로 새로운 버전으로 업데이트한다. 이를 통해 어플리케이션이 중단되지 않고 업데이트될 수 있다.Rollback업데이트 후 문제가 발생하면 이번 버전으로 되돌릴 수 있다.Pa..
(TIL) Replicaset
Replication ControllerPod를 하나만 실행할 경우, Pod이 종료되면 어플리케이션도 중단된다. 이를 방지하기위해 여러개의 Pod을 실행하여 High Availability를 보장하는 것은 매우 중요한 이슈이다.Replication Controller는 특정 개수의 Pod이 항상 실행되도록 보장하는 컨트롤러이다. Pod이 종료되면 자동으로 새로운 Pod을 생성하여 지정된 개수를 유지한다.Replication Controller는 아래와 같은 주요 기능을 가진다.지정된 개수의 Pod을 유지Pod이 종료되면 자동으로 새로운 Pod을 생성여러개의 Pod를 배포하여 부하 분산 기능Pod를 여러 노드에 배포하여 확장 가능Replica SetReplication Controller의 개선 버전으로 ..
(TIL) Kubernetes의 Pod
Pod란Pod는 Kubernetes에서 배포 가능한 가장 작은 단위이다.Pod는 하나 이상의 컨테이너를 포함하며, 일반적으로는 Pod 하나당 하나의 컨테이너가 존재한다.Pod의 기본 구조Pod는 다음과 같은 요소들로 구성되어있다.ContainerVolumesNetworkingPod를 사용하는 이유왜 굳이 컨테이너를 단독으로 실행하지 않고 Pod로 한번 감싼 후 동작하는 방식으로 되어있는지 의아할 수 있다.각 방식이 가지는 차이점은 다음과 같다.Docker StandalonePod개별 컨테이너를 직접 실행Pod를 통해 컨테이너를 실행컨테이너 간 네트워크 설정 필요Pod 내부 컨테이너는 자동으로 연결컨테이너의 상태를 직접 관리해야함Kubernetes가 Pod의 상태를 자동으로 관리즉, Pod를 사용하면 Ku..
(TIL) Kube-Proxy
Kubernetes의 Pod 네트워크Kubernetes에서 모든 Pod는 클러스터 내부의 가상 네트워크에 연결된다.이 네트워크는 모든 Node 간에 공유되며, 이를 통해 Pod이 서로 통신할 수 있다.간단히 말해서 Kubernetes는 자체적으로 하나의 가상 네트워크를 구성하여 Pod간의 통신을 지원한다.Pod의 주소 문제Kubernetes 내부에 두 개의 어플리케이션이 실행되고 있다고 가정해보자Node1: Web application이 실행 Node2: DB가 실행Web application은 DB의 Pod IP 주소를 사용해서 DB에 접근하고 데이터에 대한 읽기와 쓰기 작업을 진행할 것이다.다만 여기서 문제는 Pod의 IP 주소는 동적으로 변경될 수 있다는 점이다. Pod이 삭제되거나 재시작되면 새..