이 글은 아래 시리즈의 의존성을 가진다.
2023.03.01 - [Backend MLOps/On-premise setting] - [k8s] 쿠버네티스 찍먹 - 1
2023.08.17 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 1
2023.08.27 - [Backend MLOps/On-premise setting] - [k8s] 라즈베리파이 클러스터링 -1
2023.09.02 - [Backend MLOps/On-premise setting] - [k8s] NFS 기반 PersistentVolume 직접 구축하기 - 1
3. nfs pv를 클러스터에 구현하기
클러스터 마스터 노드로 가 준다.
이제 아래와 같이 pv 를 클러스터에 생성해 준다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: kube-data
spec:
capacity:
storage:
10Gi
accessModes:
- ReadWriteOnce
storageClassName:
nfs-pv
nfs:
server:
192.168.0.10
path:
"/home/manager/nfs/shared"
alias를 등록하지 않아서 저렇게 선언해 주었다.
생성된 것을 확인할 수 있다.
이제 프로메테우스라던지 그라파나의 저장사항을 이쪽으로 옮길 수 있다.
그러면 어떤 이유로 파드가 내려가거나 노드가 꺼지는 경우에도
설정해둔 환경을 안전하게 지킬 수 있고
모아둔 데이터가 날아가지 않도록 할 수 있다.
3. 파드들의 pvc 변경
아래와 같이 프로메테우스 상태 파일들을 바꿔준다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus-deployment
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: prometheus-server
template:
metadata:
labels:
app: prometheus-server
spec:
containers:
- name: prometheus
image: prom/prometheus:latest
securityContext:
runAsUser: 1000 # UID
runAsGroup: 1000 # GID
ports:
- containerPort: 9090
args:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
volumeMounts:
- name: prometheus-data
mountPath: /prometheus
- name: prometheus-configmap
mountPath: /etc/prometheus
volumes:
- name: prometheus-data
persistentVolumeClaim:
claimName: prometheus-nfs-pvc
- name: prometheus-configmap
configMap:
name: prometheus-configmap
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: prometheus-nfs-pvc
namespace: monitoring
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: prometheus-nfs-pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: monitoring-data
spec:
capacity:
storage:
1Gi
accessModes:
- ReadWriteOnce
storageClassName:
prometheus-nfs-pv
nfs:
server:
192.168.0.10
path:
"/home/manager/nfs/shared/prometheus/"
이렇게 해 주고 중요한 점은 nfs 서버에 "/home/manager/nfs/shared/prometheus/" 가 없다면 만들어 줘야 한다는 것이다.
위의 선언들로는 해당 경로를 만들 수 없다.
이런식으로 경로문제가 발생하면 경로를 직접 만들어주고
파드를 지워서 다시 시작하면 된다.
프로메테우스의 정보가 nfs 노드에 잘 저장되고 있다.
이런걸 보면 참 경이로운 툴이라는 생각이 든다.
그라파나도 수정해 주자.
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: grafana
template:
metadata:
name: grafana
labels:
app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:latest
ports:
- name: grafana
containerPort: 3000
resources:
limits:
memory: "1Gi"
cpu: "1000m"
requests:
memory: 500M
cpu: "500m"
volumeMounts:
- mountPath: /var/lib/grafana
name: grafana-storage
- mountPath: /etc/grafana/provisioning/datasources
name: grafana-datasources
readOnly: false
volumes:
- name: grafana-storage
persistantVolumeClaim:
claimName: grafana-pvc
- name: grafana-datasources
configMap:
defaultMode: 420
name: grafana-datasources
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: grafana-pvc
namespace: monitoring
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: grafana-nfs-pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: monitoring-data
spec:
capacity:
storage:
1Gi
accessModes:
- ReadWriteOnce
storageClassName:
grafana-nfs-pv
nfs:
server:
192.168.0.10
path:
"/home/manager/nfs/shared/grafana"
처음에 이렇게 해주면 그라파나의 권한 오류가 발생한다.
GF_PATHS_DATA='/var/lib/grafana' is not writable.
You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migrate-to-v51-or-later
mkdir: can't create directory '/var/lib/grafana/plugins': Permission denied
그 이유는 그라파나 유저가 nfs서버의 쓰기권한 밖에 있기 때문이다.
따라서 nfs 서버로 가서 grafana가 쓰기동작을 할 디렉토리에 권한을 준다.
그라파나의 유저는 기본적으로 472 group id, 472 user id 를 가지므로 아래처럼 설정을 해준다.
sudo chown -R 472:472 /path/to/nfs/share/grafana
이렇게 설정이나 데이터를 저장해야
만들어둔 데시보드가 날아가지 않고 그대로 유지된다.
그리고 그라파나의 유저를 만들어도 그대로 유지된다.
100 * (1 - sum by(instance) (rate(node_cpu_seconds_total{mode="idle"}[$__rate_interval])) / 4)
위와 같은 쿼리를 수행하는 그라파나 데시보드를 만들어 보자.
전반적으로 마스터 노드의 cpu 점유율이 높게 나오고 파드가 뜬 노드의 cpu 사용량이 높아졌다가 감소한 것을 볼 수 있다.
이제 이 설정을 유지하는지 그라파나 파드를 지워보자.
이렇게 파드를 지우고 새로 띄워도
그라파나의 상태가 유지되는 것을 볼 수 있다.
'Backend MLOps > On-premise setting' 카테고리의 다른 글
[MPI] 파이썬으로 멀티노드 분산컴퓨팅 처리 (0) | 2023.09.12 |
---|---|
[MPI] 멀티노드로 병렬연산, 분산컴퓨팅 처리하기 (0) | 2023.09.03 |
[k8s] NFS 기반 PersistentVolume 직접 구축하기 - 1 (0) | 2023.09.02 |
[k8s] 라즈베리파이 클러스터링 -4 (0) | 2023.08.30 |
[k8s] 라즈베리파이 클러스터링 -3 (0) | 2023.08.29 |
댓글