이전까지의 모든 글에서 발생한 오류의 근본적인 원인을 찾은 것 같다.
우선 아래의 사진을 보자.
내가 구매한 라즈베리파이의 램은 2GB였는데
kubeadm에서 안내하고 있는 기본 사양이 램 2GB이다.
부팅 및 시스템 커널에서 일부 램 메모리를 먹는 것을 감안할 때
나는 2GB의 램보다 낮은 메모리를 사용하고 있었다.
그래서 k8s가 아닌 경량화된 쿠버네티스로 설치 방법을 바꿔보려고 한다.
가장 유명한 소프트웨어인 k3s를 설치해 보자.
k3s는 518MB 정도의 리소스를 요구한다고 한다.
이거까지 안되면.. 진짜 때려치
우선은 깔려있는 k8s를 모조리 지워준다.
# 쿠버네티스 리셋
sudo kubeadm reset
# cni 관련 설정 제거
sudo rm -rf /etc/cni/net.d
sudo rm -rf /var/lib/cni/
# ip테이블 리셋
sudo ipvsadm --clear
# 모든 리소스 삭제
sudo docker system prune -a --volumes
# 쿠버네티스 관련 파일들 삭제
sudo rm -rf /etc/kubernetes/
sudo rm -rf /var/lib/etcd/
sudo rm -rf /var/lib/kubelet/
아래의 명령어로 마스터노드에 k3s를 깔아준다.
curl -sfL https://get.k3s.io | sh -
모든것이 바이너리화 되어있어서 간단히 설치가 가능하다.
아래의 명령어로 노드 확인
sudo k3s kubectl get nodes
그냥 kubectl을 쓰는게 아니라 k3s가 앞에 붙는 것을 볼 수 있다.
나중에 alias를 지정해주든지 하면 된다.
아래의 명령어로 마스터 노드의 토큰을 확인한다.
sudo cat /var/lib/rancher/k3s/server/node-token
워커노드는 아래의 명령어를 실행하여 설치와 동시에 join한다.
curl -sfL https://get.k3s.io | K3S_URL=https://<YOUR_SERVER_IP>:6443 K3S_TOKEN=<YOUR_TOKEN> sh -
역시 메모리 문제였다....
완전 정상적으로 잘 작동한다.
이전 글을 참고해서 배포를 진행한다.
2023.08.17 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 1
2023.08.23 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 2
2023.08.24 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 3
2023.08.24 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 4
여기서 pvc는 일단 모두 지워줬다.
감동적으로 잘 동작한다.
다음 단계로는 nfs를 이용한 pv를 설정해 봐야겠다.
아무튼 프로메테우스의 컨피그맵을 아래와 같이 수정하고
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-configmap
namespace: monitoring
data:
prometheus.yml: |
global:
scrape_interval: 5s
evaluation_interval: 5s
scrape_configs:
- job_name: 'node-exporter1'
static_configs:
- targets:
- "192.168.0.11:9100"
- "192.168.0.12:9100"
- "192.168.0.13:9100"
- "192.168.0.14:9100"
여기서 중요한 것은 저 네개의 노드에 똑같이 서비스를 걸어주는 것인데
이때 식별자가 쓰인다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: example-daemonset
namespace: monitoring
spec:
selector:
matchLabels:
app: node-exporter
template:
metadata:
labels:
app: node-exporter
spec:
containers:
- name: node-exporter
image: prom/node-exporter:latest
ports:
- name: exporter-port
containerPort: 9100
hostNetwork: true
hostPID: true
데몬셋 메타데이터의 labels에 `app: node-exporter` 로 지정하고
apiVersion: v1
kind: Service
metadata:
name: node-exporter
namespace: monitoring
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '9100'
spec:
selector:
app: node-exporter
ports:
- name: exporter-port
protocol: TCP
port: 9100
targetPort: 9100
type: NodePort
서비스의 셀렉터에도 똑같이 적어주면
이렇게 모든 파드가 한번에 등록된 것을 볼 수 있다.
그라파나에서도
이렇게 확인이 가능하고
각 인스턴스별 cpu 사용량을 이렇게 따로 찍을 수 있다.
'Backend MLOps > On-premise setting' 카테고리의 다른 글
[k8s] NFS 기반 PersistentVolume 직접 구축하기 - 2 (0) | 2023.09.02 |
---|---|
[k8s] NFS 기반 PersistentVolume 직접 구축하기 - 1 (0) | 2023.09.02 |
[k8s] 라즈베리파이 클러스터링 -3 (0) | 2023.08.29 |
[k8s] 라즈베리파이 클러스터링 -2 (0) | 2023.08.28 |
[k8s] 라즈베리파이 클러스터링 -1 (2) | 2023.08.27 |
댓글