kubernetes에서는 container를 container로만 올리지않고, pod안에 감싸서 배포한다.
-------------------Node------------------
| ----------------Pod-------------- |
| | | |
| | --------Container--------- | |
| | | | | |
| | --------------------------- | |
| |
| ----------------Pod-------------- |
| | | |
| | --------Container--------- | |
| | | | | |
| | --------------------------- | |
---------------------------------------------
pod가 바로 kuberntes cluster를 이루는 가장 중요한 요소가 되는 것이다.
사용자가 많아지면 pod를 늘리고, 사용자가 적어지면 pod를 줄이기만 하면 되는 것이다. 이렇게 스케일링이 가능한 것이다.
기본적으로 pod는 1개의 pod에 1개의 container 규칙이 적용되어있지만, 아닌 경우도 있다. 이를 multi-container pod
라고 하는데, 이 경우 main이 되는 application인 main container가 있고, 이를 도와주는 helper container
가 있다.
-------------------Node------------------
| ----------------Pod--------------- |
| | | |
| | --Container-- --Container-- | |
| | | main | | helper | | |
| | ------------- ------------- | |
| ---------------------------------- |
-----------------------------------------
위의 그림은 같은 pod안에 두 개의 container가 있다는 것을 나타내는 것이다. 이들은 같은 pod이기 때문에 같은 network를 사용하고 있어서 localhost를 통해 접근이 가능하다. 또한, 같은 storage 공간을 사용하고 있어, data들도 쉽게 공유가 가능하다.
이들은 같은 pod에 있기 때문에 pod의 생명주기에 따라 같이 생성되고, 같이 죽는다는 특성이 있다.
kubectl run nginx --image nginx
nginx
pod를 만들되, image로 nginx
를 쓰겠다는 것이다. nginx
image는 dockerhub나 private registry에서 다운받게 된다.
kubectl get pods
kubernetes는 pod, replicaset, service 등과 같은 object 생성을 위해서 yaml파일을 input으로 받는다.
모든 kubernetes object yaml파일은 다음의 4가지 section을 반드시 갖는다.
apiVersion:
kind:
metadata:
spec:
apiVersion
: 우리가 만드려는 kubernetes object의 version을 적어주면 된다.kind
: kuberntes object를 적어주면 된다. 가령 pod인지 service인지를 써주면 된다.metadata
: object의 이름, label들을 타겟으로 쓸 수 있다.spec
: spec안은 kuberntes object의 특성들을 적어주면 된다. 이는 object가 무엇이냐에 따라 다르지만, 대부분 container를 포함한다. apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
다음과 같이 생겼으며, 생성은 다음과 같다.
kubectl create -f pod-definitions.yaml
다음의 명령어로 pod가 생성되면 아래의 명령어를 통해서 생성된 pod의 정보를 확인할 수 있다.
kubectl describe pod myapp-pod