flask server - yeardream-de-project-team4/k8s_project GitHub Wiki

구조

nginx(Local Nginx) >> ingress-controller >> ingress >> service >> deployment(nginx, flask)

선행 사항

docker hub 가입, docker 설치,

ingress-controller 설치(nginx‐ingress‐controller & metalLB 참조),

flask directory(git의 flask directory 참조:https://github.com/yeardream-de-project-team4/k8s_project)

파일 작성 순서

flask Dockerfile 작성, nginx Dockerfile 작성 >>

docker image build를 통한 flask image, nginx image 생성 >> docker hub [Repositories]에 push >>

flask-daploy.yaml 작성 > flask-service.yaml 작성 > flask-ingress.yaml 작성

# docker 설치 확인
docker --version

# directory 생성(git의 flask directory 참조)
mkdir flask
cd flask
mkdir flaskapp
mkdir nginxtest
cd flaskapp
mkdir myapp
cd myapp

# myapp에 main.py 작성(git의 flask/flaskapp/myapp directory 참조)
vim main.py

# flask/flaskapp directory로 이동
cd flask/flaskapp

# flaskapp에 Dockerfile 작성(git의 flask/flaskapp directory 참조)
vim Dockerfile

# flaskapp directory에 Dockerfile, myapp 확인
ls

# Docker Image build & push(pwd: /flask/flaskapp)
docker login 
docker build . -t [dokcer hub id]/[image name]:[tag name]
docker push [dokcer hub id]/[image name]:[tag name]

# flask/nginxtest directory로 이동
cd ..
cd flask/nginxtest

# flaskapp에 Dockerfile, default.conf 작성(git의 flask/nginxtest directory 참조)
vim Dockerfile
vim default.conf

# nginxtest directory에 Dockerfile, default.conf 확인
ls

# Docker Image build & push(pwd: /flask/nginxtest)
docker login 
docker build . -t [dokcer hub id]/[image name]:[tag name]
docker push [dokcer hub id]/[image name]:[tag name]
# flask namespace 생성
kubectl create namespace flask

# Kubernetes에 flaskapp 실행을 위한 yaml 작성(git의 flask/k8s directory 참조)
vim flask-deploy.yaml
vim flask-service.yaml
vim flask-ingress.yaml

# deployment 실행
kubectl apply -f flask-deploy.yaml -n flask

# deployment run 확인
kubectl get all -n flask

# service 실행
kubectl apply -f flask-service.yaml -n flask

# service 실행 확인
kubectl get all -n flask

# ingress 실행
kubectl apply -f flask-ingress.yaml -n flask

# ingress 확인
kubectl get ingress -n flask
# [EXTERNAL-IP 주소] 확인
kubectl get all -n nginx-ingress

Local Nginx 설정 변경

# active 상태 확인
sudo systemctl status nginx

# defalut 파일 확인
sudo -i
cd /etc/nginx/sites-enabled

# 51번째 라인 try files $uri $uri/ =404 주석처리
#location / {} 가로 안에(51번째 라인 주석 아래) proxy_pass http://[EXTERNAL-IP주소:80]; 입력 후 저장  
sudo vim default

# test 확인  
nginx -t

# 아래 두 개가 SUCCESS 뜨면 OK
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful

# 재시작 및 상태 확인
systemctl restart nginx
systemctl status nginx

# 종료
exit

AWS 인스턴스 퍼블릭IP 주소 확인

퍼블릭IP주소/flasktest01 입력을 통해 'Hellow, world' 확인