MON Operation Overview
K8s 기반의 Nginx Front-End System Overview
K8s Deployment Current Status
# kubectl get pods -o wide |grep monitor-nginx
monitor-nginx-7cdb67c44f-c7x47 1/1 Running 0 5d23h 10.244.3.252 tb3 <none> <none>
monitor-nginx-7cdb67c44f-fb8tk 1/1 Running 0 5d23h 10.244.6.142 tb2 <none> <none>
Nginx Deployment yaml
역할 : Nginx POD를 배포하는 Deployment를 작성한다.
# cat mon_nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: monitor-nginx
spec:
replicas: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: servertype
operator: NotIn
values:
- master
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nginx
topologyKey: "kubernetes.io/hostname"
volumes:
- name: mon-home-volume
persistentVolumeClaim:
claimName: mon-home-volume-pvc
dnsPolicy: "None"
dnsConfig:
nameservers:
- 8.8.8.8
- 61.100.0.136
- 61.100.0.152
containers:
- image: harbor.hongsnet.net/monitor/monitoring-nginx:20220801_32
imagePullPolicy: IfNotPresent
name: monitor-nginx
volumeMounts:
- mountPath: /home
name: mon-home-volume
imagePullSecrets:
- name: harbor-login
Nginx HPA Scale yaml
역할 : AutoScaling 정책을 작성한다.
# cat mon_scale_nginx.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: monitor-nginx
minReplicas: 2
maxReplicas: 3
targetCPUUtilizationPercentage: 80
Nginx Service yaml
역할 : Nginx Service를 작성한다. 여기서는 NodePort 방식을 통해 배포한다.
# cat mon_service_nginx.yaml
apiVersion: v1
kind: Service
metadata:
name: monitor-nginx
spec:
externalTrafficPolicy: Local
type: NodePort
selector:
app: nginx
ports:
- name: nginx
port: 80
protocol: TCP
targetPort: 80
nodePort: 32000
실행
배포 및 관리는 여러 가지 방법이 있지만, 여기서는 kubectl 을 사용하여 실행한다.
- 시작 스크립트
# cat start-mon_nginx.sh
#!/bin/bash
kubectl create -f mon_nginx.yaml
kubectl create -f mon_scale_nginx.yaml
kubectl create -f mon_service_nginx.yaml
실행결과는 다음과 같다.
# ./start-mon_nginx.sh
deployment.apps/monitor-nginx created
horizontalpodautoscaler.autoscaling/nginx-hpa created
service/monitor-nginx created
- 중지 스크립트
# cat stop-mon_nginx.sh
#!/bin/bash
kubectl delete -f mon_service_nginx.yaml
kubectl delete -f mon_scale_nginx.yaml
kubectl delete -f mon_nginx.yaml
#kubectl delete hpa monitor-nginx
실행결과는 다음과 같다.
# ./stop-mon_nginx.sh
service "monitor-nginx" deleted
horizontalpodautoscaler.autoscaling "nginx-hpa" deleted
deployment.apps "monitor-nginx" deleted