udemy의 'Kubernetes for the Absolute Beginners'강의를 듣고 정리했다.
pod는 쿠버네티스에서 생성할 수 있는 가장 작은 단위의 object이다.
쿠버네티스 공식 문서( https://kubernetes.io/docs/concepts/ )에 나온 바에 의하면, 다양한 컨테이너들은 도커 허브와 같은 도커 레포지토리(Docker Repository)에 있는 이미지들 받아서 쓸 수 있다. 이때 이미지를 내려받은 컨테이너는 node에서 바로 사용되는 것이 아닌, pod에 감싸져 있고(encapsulated), pod를 통해 접근, 관리, 실행될 수 있다. pod는 한개의 node안에 여러개 있을 수 있고, scale up, down을 통해 load balancing 을 가능하게 한다.
한 개의 컨테이너에 도움을 주는 컨테이너가(live along side with the container)있을 수 있다. 예를 들어 데이터를 관리하는 task에 필요한 애플리케이션의 도움을 주는 프로그램은, 사용자의 데이터에 접근하고, input을 넣는 등의 helping 기능이 필요하다. 이럴 때 같은 pod안에 다양한 container을 넣어 함께 동작하도록 만들 수 있다.
실행방법은 다음과 같다. 실행 화면 캡쳐가 안됐다ㅠ
kubectl run nginx --image=nginx 란,
nginx의 이미지를 nginx라는 이름으로 정하여 실행한다는 의미이다. 이를 통해 pod를 생성할 수 있다.
kubectl get pods 를 통해 존재하는 pod의 상태들을 보여준다.
쿠버네티스의 관리는 Yaml파일을 통해 이루어진다. 그래서 먼저 Yaml파일에 대해 학습할 필요가 있다.
Yaml 파일은 기본적으로 key와 value로 이루어져있다. 이때 위계를 기준으로 list형식이나 다양한 계층으로 구분하며 데이터를 넣을 수 있다.
실습이 중요하다.
backend set pods에 접근할 수 있는 frontend pods를 만들어야 하는 상황을 가정하자.
Instruction: Use the information provided in the below table to create a backend service definition file. Refer to the provided deployment-definition file for information regarding the PODs.
Service Name: image-processing
labels: app=> myapp
type: ClusterIP
Port on the service: 80
Port exposed by image processing container: 8080
deployment-definition에서는 pod의 구성에 대해 적는다. apiVersion을 통해 버전을 관리하고, 해당 pod가 Deployment라는 것을 표시하기 위해 kind를 입력해야 한다. 이때 첫글자가 대문자로 입력되지 않으면 오류가 난다.
그 외의 부가 정보는 metadata와 spec에 넣어야 하는데, 계위를 잘 맞춰야 오류 없이 진행될 수 있다. name, labels 등이 metadata에 들어가고, spec에서는 type, ports, selector가 들어가야 한다.
selector의 tier를 통해 같은 pod들을 함께 찾고 관리할 수 있다.
이렇게 구성된 pod들은 kubectl을 통해 접근, 관리할 수 있다.
kubectl get deployments를 실행하면 deployment 가능한 파일이 보이고,
kubectl expose deployment [name] --type=[NodePort] --port=[8080] 의 형식처럼 port번호등을 설정하면 deploy가 된다.
해당 파일이 잘 올라갔는지 보기 위해 minikube를 활용한다면,
minikube service hello-minikube --url을 입력하여 ip주소를 얻을 수 있고, 이를 통해 잘 만들어진 것을 확인할 수 있다.