지난 포스트에서 nginx 에 vue 빌드 파일을 넣고 docker-compose를 하는 방법을 소개했다.
오늘 포스트 에서는 nginx와 certbot을 쿠버네티스 상에서 배포하고 관리할 수 있도록 하는
방법을 소개하려한다.
나중에는
configmap 적용시 namespace가 같은지 확인해야한다.
적용할려는 파일의 정보의 문법 또한 확인(당연한걸..)
오류 발생시 describe와 logs 확인이 무조건이다.
kubectl create configmap nginx-app-config --from-file data/nginx/conf.d/app.conf -o yaml
(파일로 만들어놓기 nginx폴더에 넣어두기 apply로 사용하기)
app.conf 파일명과 내용을 configmap으로 만들어주는 명령어
밑은 적용방법
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.nginx.webserver: deployment
name: nginx-server # deployment의 이름
spec:
replicas: 1 # 개체수
selector:
matchLabels:
app.nginx.webserver: node # pod의 label을 선택해서 가져오기
template:
metadata:
labels:
app.nginx.webserver: node # pod의 label을 지정
spec:
containers:
- image: nginx:latest
name: nginx-server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- mountPath: /etc/nginx/conf.d
name: nginx-confi
volumes: # 참고할 volume 지정
- name: nginx-confi # volume 의 이름 지정
configMap:
name: nginx-app-config
서비스 연결-외부와 연결
apiVersion: v1
kind: Service
metadata:
name: app-nginx-webserver
namespace: cube
spec:
selector:
app: test-nginx
ports:
- port: 80 # 서비스 포트
targetPort: 80 # 타켓, 즉 pod의 포트
name: http
- port: 433
targetPort: 433
name: https
type: LoadBalancer
nginx-app-config.yaml 파일
apiVersion: v1
data:
app.conf: |
server {
listen 80;
server_name localhost;
server_tokens off;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api {
proxy_pass http://proxy.com:38071;
}
}
kind: ConfigMap
metadata:
creationTimestamp: "2023-01-10T05:27:23Z"
name: nginx-app-config
namespace: cube
resourceVersion: "31940263"
uid: 91450a3b-4ffb-4b0d-a652-cc692867b1b1
쿠버네티스에 볼륨을 설정하고 싶을때 아래의 파일들을 참고 하길 바란다.
#vue-pv-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: vue-dist-pv
namespace: cube
labels:
app: pv-vue-dist
spec:
storageClassName: vue-dist
capacity:
storage: 1Gi
accessModes:
- ReadOnlyMany
nfs:
server: 192.168.15.132
path: "/root/go/src/github.com/wlrmworms/vue/dist"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: vue-dist-pvc
namespace: cube
labels:
app: pvc-vue-dist
spec:
storageClassName: vue-dist
resources:
requests:
storage: 100M
accessModes:
- ReadOnlyMany
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
# app.nginx.webserver: deployment
app: test-nginx # label 지정
name: nginx-server # deployment의 이름
namespace: cube
spec:
replicas: 1 # 개체수
selector:
matchLabels:
app: test-nginx
template:
metadata:
labels:
app: test-nginx
spec:
containers:
- image: nginx:latest
name: nginx-server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: http
- containerPort: 443
name: https
volumeMounts:
- mountPath: /etc/nginx/conf.d
name: nginx-confi
- mountPath: /usr/share/nginx/html
name: vue-dist-nfs
volumes: # 참고할 volume 지정
- name: nginx-confi # volume 의 이름 지정
configMap:
name: nginx-app-config
- name: vue-dist-nfs
persistentVolumeClaim:
claimName: vue-dist-pvc
nfs 볼륨 생성 pv,pvc생성 후 디플로이먼트생성
systemctl start nfs-server
systemctl enable nfs-server
kubectl apply -f vue-pv.yaml
kubectl get pv pvc 둘다 bound 됬는지 확인하기
echo '/root/go/src/github.com/wlrmworms/vue/dist 192.168.15.0/24(rw,sync,no_root_squash)' >> /etc/exports // nfs경로 넣기
kubectl apply -f pod_yaml/webserver.yaml 실행
pv,pvc 강제 삭제 명령어
kubectl patch pv vue-dist-pvc -p '{"metadata": {"finalizers": null}}’
kubectl delete pv vue-dist-pv --grace-period=0 --force
certbot 같은 도메인으로 시간내 인증서를 여러번 받으면 126h 동안 인증서를 받지 못한다.
nginx 든 다른 이미지들을 받을때 이미지 다운로드 횟수가 200회 이다 보니 하버를 설치하여 이미지를 저장해두고 사용하는게 좋아보인다!
디플로이먼트 속 certbot 파드 하나 nginx의 파드가 만들어지고
certbot 의 파드가 볼륨 하나 | 하나의 서비스 공유 볼륨에 저장 시켜서 nginx 사용하게 만들기