Summary
Obsidian 정적 페이지 생성기인 Quartz를 K3s 환경에서 설정하는 과정을 기록했습니다.
Cert Manager 설치
Nginx Proxy Manager는 자체로 SSL 인증 툴을 포함하기 때문에 쉽게 SSL 인증서를 발급할 수 있지만 k3s는 Cert Manager라는 프로젝트를 설치해서 SSL 인증서 출력기를 설치해야 합니다.
yaml
Service
파드의 네트워크 관련 설정입니다.
apiVersion: v1
kind: Service
metadata:
name: quartz-blog-svc
namespace: apps
spec:
type: ClusterIP # 클러스터 내부에서만 접근 가능한 서비스
selector:
app: quartz-blog
ports:
- port: 80
targetPort: 80Ingress
클러스터 외부에서 내부 서비스로 들어오는 HTTP/HTTPS 트래픽 라우팅 규칙을 처리합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: quartz-blog-ingress
namespace: apps
spec:
ingressClassName: traefik # SSL 자동화를 위해 Traefik IngressClass 지정
rules:
- host: obsidian.junbeom.work # 사용할 도메인
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: quartz-blog-svc
port:
number: 80Deployment
파드의 앱 실행 설정을 관리합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: quartz-blog
namespace: apps
labels:
app: quartz-blog
spec:
replicas: 1
selector:
matchLabels:
app: quartz-blog
template:
metadata:
labels:
app: quartz-blog
spec:
containers:
- name: quartz-blog
image: nginx:alpine
ports:
- containerPort: 80
volumeMounts:
- name: blog-content
mountPath: /usr/share/nginx/html
readOnly: true
- name: nginx-conf
mountPath: /etc/nginx/conf.d/default.conf
readOnly: true
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 15
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
volumes:
- name: blog-content
hostPath: # 호스트의 볼륨을 컨테이너에 마운트
path: /home/junbeom/quartz-blog
type: DirectoryOrCreate
- name: nginx-conf
hostPath: # 호스트의 볼륨을 컨테이너에 마운트
path: /home/junbeom/quartz-blog/default.conf
type: FileTip
모든 객체는
quartz-blog.yaml에 포함됩니다.
Installation
kubectl apply -f quartz-blog.yamlSuccess
