이번 시리즈는 쿠버네티스를 찍먹해보는 시리즈이다. 자세한 설명을 적을 여유가 없기 때문에 아주 간단하게만 작성할 계획이다.
개발자가 컨테이너를 빌드한다.
도커 명령어로 컨테이너 허브로 업로드한다.
쿠버네티스 명령어로 명령어를 Control-Plane에게 보낸다.
마스터의 API 서버가 명령어를 받고, 스케쥴러에게 노드 배치를 질의한다.
스케쥴러에게 적당한 배치를 받으면, API 서버는 해당 노드 kubelet에게 해당 컨테이너 실행 요청을 한다.
kublet은 해당 인스턴스에 실행되어있는 도커 엔진에게 컨테이너 허브에 저장되어있는 이미지를 실행해달라고 요청한다.
도커 엔진은 허브에서 이미지를 내려받아 실행하여 컨테이너를 동작시킨다.
이때 동작된 컨테이너는 "파드" 라고 부른다.
kubelet
kube-proxy
컨테이너 런타임
namespace는 "클러스터 하나를 여러 개의 논리 적인 단위로 나눠서 사용"한다는 의미이다.
$ kubectl create namespace
-blue API-POD.service.~
-orange API-POD.service.~
-green API-POD.service.~
위의 예시로 보았을 때,
blue는 배포, orange는 테스트, green은 개발용 클러스터로 구분하여 컨테이너 pod들을 분리하여 관리할 수 있다.
방법은 총 2가지가 존재한다.
$ kubectl create namespace blue
$ kubectl get namespaces
$ kubectl create namespace green --dry-run -o yaml > green-ns.yaml
$ vim green-ns.yaml
$ kubectl create -f green-ns.yaml
$ kubectl create deploy ui --image=nginx --namespace green
위의 명령어 뜻은
쿠버네티스야~ nginx 컨테이너를 green 공간에 실행해줘~
라는 뜻이다.
$ kubectl config view
위 명령어는 컨텍스트를 살펴보는 것이다.
$ kubectl config set-context blue@kubernetes --cluster=kubernetes --user=kubernetes-admin --namespace=blue
위 명령어는 쿠버네티스 "blue" namespace에 blue@kubernetes라는 사용자를 admin 권한으로 생성하는 것이다.
$ kubectl config use-context blue@kubernetes
위 명령어는 현재 사용자를 "blue@kubernetes"로 교환하는 것이다.
kubectl delete pods mypod -n <namespace 이름>
위 명령어는 해당 namespace의 mypod를 삭제한다.
namespace를 삭제하면 내부의 pod도 모두 삭제된다.
컨테이너를 표현하는 k8s api의 최소 단위이다.
pod는 위와같이 1개의 컨테이너 혹은 1개 이상의 컨테이너를 포함할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: multipod
spec:
containers:
- name: nginx-container
image: nginx:1.14
ports:
- containerPort: 80
- name: centos-container
image: centos:7
command:
- sleep
- "10000"
kubectl create -f pod-multi.yaml
kubectl exec <pod name> -c <container name> -it -- /bin/bash
위와 같이 명령어를 입력하면 해당 pod의 해당 container에 접속한다.