명령형: 도커에서 주로 사용했던 방식. docker run 처럼 특정 명령을 처리하는 주체와 통신해 작업 수행 후 결괏값을 돌려받는 방식
kubectl create / run -> kubernetes api 서버 -> 리소스 생성, 포드 생성
선언형: 최종적으로 도달해야하는 방식을 선언하고 현재 상태와 일치하도록 만드는 방법. kubectl apply -f yaml 야믈파일이 최종적으로 도달해야하는 상태이고 쿠버네티스가 일치하도록 만든다.
kubectl apply -f -> kubernetes api 서버 -> etcd(상태 저장소) -> 쿠버네티스 컨트롤러 -> 알맞은 동작 수행
최종적으로 되어야 하는 상태바람직한 상태만 알려주고 어떤 동작을 취해야할지는 컨트롤러가 내부적으로 결정.
커스텀 리소스?
포드, 디플로이먼트, 서비스와 같은 리소스를 만드는 것.
프론트 디플로이먼트 + 백엔드 디플로이먼트 + 데이터베이스 디플로이먼트 를 하나로 묶어서 새로운 리소스로 만들 수도 있다. 지금까지 사용한 리소스 제어방법을 새로운 리소스에도 그대로 적용 가능
커스텀 리소스에 대한 바람직한 상태로 변화시킬 수 있는 컨트롤러 구현하고, 실행
커스텀 리소스의 상세 정보를 정의하는 CRD(custom resource definition) 리소스 생성
crd에 정의된 데이터에 맞춰 커스텀 리소스 생성
1번에서 실행한 컨트롤러는 커스텀 리소스의 생성 감지하고 바람직한 상태가 되도록 적절한 작업 실행
커스텀 리소스에 대한 정의(복수형 이름, 단수형 이름, yaml파일에서 kind에 사용될 단어, 줄임말 등등)
crd를 통해 쿠버네티스에 등록하면 리소스로 사용할 수 있다
하지만 컨트롤러를 통해 특정 동작을 수행하도록 정의해야 리소스가 의미를 갖는다. 근데 컨트롤러를 개발하는 것은 어렵다..? operator SDK나 KubeBuilder같은 프레임워크로 만들 수 있다...?
컨트롤러 개념과 동작방식
바람직한 상태
만 알려주고 어떤 동작을 취해야할지는 컨트롤러가 내부적으로 결정.커스텀 리소스?
포드, 디플로이먼트, 서비스와 같은 리소스를 만드는 것. 프론트 디플로이먼트 + 백엔드 디플로이먼트 + 데이터베이스 디플로이먼트 를 하나로 묶어서 새로운 리소스로 만들 수도 있다. 지금까지 사용한 리소스 제어방법을 새로운 리소스에도 그대로 적용 가능
커스텀 리소스에 대한 정의(복수형 이름, 단수형 이름, yaml파일에서 kind에 사용될 단어, 줄임말 등등) crd를 통해 쿠버네티스에 등록하면 리소스로 사용할 수 있다 하지만 컨트롤러를 통해 특정 동작을 수행하도록 정의해야 리소스가 의미를 갖는다. 근데 컨트롤러를 개발하는 것은 어렵다..? operator SDK나 KubeBuilder같은 프레임워크로 만들 수 있다...?