본문 바로가기
Backend MLOps/On-premise setting

[k8s] 라즈베리파이 클러스터링 -4

by SteadyForDeep 2023. 8. 30.
반응형

이전까지의 모든 글에서 발생한 오류의 근본적인 원인을 찾은 것 같다.

 

우선 아래의 사진을 보자.

 

 

내가 구매한 라즈베리파이의 램은 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

 

[k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 1

최근 흥미로운 주제가 생겨서 이 시리즈를 적어 본다. 싱글 노드 쿠버네티스를 구성하는 방법은 여러가지가 있다. 쿠버네티스 연습이 필요한 경우 혹은 회사에서 쿠버네티스 환경을 구축해야하

davi06000.tistory.com

2023.08.23 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 2

 

[k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 2

지난번 글에서 kubeadm을 설치하고 containerd, docker 같은 런타임을 이용해서 클러스터를 구성하는 과정을 진행해 보았다. 2023.08.17 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버

davi06000.tistory.com

 

2023.08.24 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 3

 

[k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 3

이 글은 아래의 글들에 의존성을 가진다. 2023.08.17 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 1 2023.08.23 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이

davi06000.tistory.com

 

2023.08.24 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 4

 

[k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 4

이 글은 아래의 글들에 의존성을 가진다. 2023.08.17 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 1 [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축

davi06000.tistory.com

 

여기서 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 사용량을 이렇게 따로 찍을 수 있다.

반응형

댓글