django with kubernetes ctl
- The foundational concept of Kubernetes is in the management of pods.
- A pod is one or more containers deployed together as a group within the same physical or virtual host machine colloquially known as a node.
Requirements
Install minikube
- minikube는 로컬에서 쉽게 싱글 노드 클러스터를 띄울 수 있게 도와주는 툴이다.
$ brew install minikube
Install virtualbox, docker
Install kubectl
kubectl
은 쿠버네티스로 어플리케이션을 배포/관리할 때 사용.
Minikube
$ minikube start
😄 minikube v1.8.2 on Darwin 10.15.3
▪ MINIKUBE_ACTIVE_DOCKERD=minikube
✨ Using the hyperkit driver based on existing profile
⌛ Reconfiguring existing host ...
🔄 Starting existing hyperkit VM for "minikube" ...
🐳 Preparing Kubernetes v1.17.3 on Docker 19.03.6 ...
🚀 Launching Kubernetes ...
🌟 Enabling addons: dashboard, default-storageclass, storage-provisioner
🏄 Done! kubectl is now configured to use "minikube"
$ minikube status
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
$ kubectl config current-context
minikube
$ minikube ip
192.168.64.2
$ minikube ssh
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)
$
- docker daemon을 minikube에서 돌리기: running local docker in kubernetes
- 이 명령어를 실행하지 않으면 local docker 이미지를 인식하지 못하여 에러가 난다.
$ eval $(minikube docker-env)
혹시
minikube start
에서 에러가 나면brew install hyperkit
로 hyperkit을 다시 설치해주자 (이미 설치되어 있다면brew upgrade hyperkit
현재
hyperkit
과 관련된 버그가 있다. https://github.com/kubernetes/minikube/issues/5594 잘 안 되면hyperkit
을 지우고 재설치.
이제 minikube dashborad를 사용할 수 있다.
$ minikube dashboard
Docker
사용할 도커파일을 준비하자. 에시에서는 간단한 dockerfile을 사용
FROM python:3-slim
WORKDIR $PROJECT_ROOTCOPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD python manage.py runserver 0.0.0.0:8000
도커파일이 준비 되었으면 해당 파일을 빌드해준다.
위에서도 언급했지만 local docker env가 아닌 쿠버네티스 pod 내의 환경에 빌드해주어야 한다.
docker images
로 pod 내의 환경이 맞는지 확인한 후 아니라면eval $(minikube docker-env)
로 변경한 후 빌드해주자.
$ docker build -t <IMAGE_NAME>:<TAG> .
Deployment
$ kubectl run <deployment-name> --image=<IMAGE-NAME> --port=8000
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
name 1/1 1 1 6s
# deployments 제거는 다음 명령어로 가능
$ kubectl delete deployments/<deployment-name>
이제 minikube의 ip (192.xxx.xxx.x:8000
)로 접속해서 해당 서버가 작동하는 것을 볼 수 있따.
$ minikube ip
192.xxx.xxx.x
Troubleshooting
# pod name을 구한 다음에
$ kubectl get pods
# 로그를 확인
$ kubectl logs -p <pod name>`
이제 서비스를 띄워보자!
$ kubectl expose deployment <deployment-name> --type=NodePort
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cms NodePort 10.100.87.135 <none> 8000:30233/TCP 14s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d7h
$ minikube service cms
|-----------|------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|------|-------------|---------------------------|
| default | cms | | http://192.168.64.2:30233 |
|-----------|------|-------------|---------------------------|
🎉 Opening service default/cms in default browser...
반환된 url (<minikube_ip>:<nodePort>
)에 접속하면 장고 웹이 나오는 것을 볼 수 있다.
'tools' 카테고리의 다른 글
Great browser for developer - Firefox developer edition (0) | 2018.06.27 |
---|---|
Using vim keys in browser (safari) (0) | 2018.06.08 |
[googleu url shorten 종료] 대신 bitly shorturl 사용하기 (0) | 2018.04.23 |
슬랙(slack) 파일 용량 비우기 (파일 지우기) (0) | 2018.03.27 |
정규표현식 테스트 가능한 좋은 사이트 추천! regex101 (0) | 2018.03.17 |