Raspberry Pi 및 ClusterHat의 K3

ClusterHat 및 ClusterCTRL을 사용하여 Raspberry Pi 클러스터에 k3s를 배포하는 방법을 알아봅니다.



하드웨어


  • 1 x 8GB Raspberry Pi 4
  • 4 x Raspberry Pi Zero 2W
  • 1 x ClusterHat v2.5
  • 5배SD Card

  • 맞춤형 OS 이미지



    ClusterHat을 사용하고 있으므로 custom OS images을 사용하는 것이 좋습니다. 이 안내서에서는 각각 64비트 버전을 사용하고 컨트롤러에는 CNAT Lite 버전을 사용합니다. 각 이미지에 대해 SSH를 활성화합니다. 사용자 이름은 pi일 필요는 없지만 이 가이드의 경우 각 노드에서 사용자 이름이 동일해야 합니다. 각 SD 카드를 구울 때 각각의 장치에 하나씩 넣어 정리하십시오. P1 노드는 이더넷 컨트롤러와 같은 쪽에 있는 슬롯입니다. 노드는 순서대로 전원 및 HDMI 커넥터와 같은 쪽에 있는 P4로 증가합니다. Raspberry Pi Imager을 사용하여 SD 카드를 만드는 자세한 단계는 를 참조하십시오.

    첫 부팅



    각각의 SD 카드를 각각의 노드에 삽입하면 제어 노드를 켤 수 있습니다. ClusterHat은 추가 노드에 전원과 네트워킹을 제공합니다. 각 노드의 전원을 독립적으로 제어할 수 있습니다. 이전 단계에서 활성화한 항목에 따라 WIFI 또는 이더넷을 통해 SSH를 통해 장치에 연결할 수 있습니다.

    제어 노드에 연결하고 P1의 전원을 켭니다.

    pi@control-node:~ $ clusterctrl on p1
    
    


    You will see the green LED light up and the node will begin booting up.



    다른 노드의 전원을 켭니다.

    pi@control-node:~ $ clusterctrl on p2 && clusterctrl on P3 && clusterctrl on p4
    
    


    OS 이미지 업데이트



    업스트림 리포지토리에서 각 이미지를 업데이트하여 OS 이미지가 릴리스된 이후 변경된 내용을 가져옵니다.

    제어 노드로 시작하십시오.

    pi@control-node:~ $ sudo apt update && sudo apt dist-upgrade -y
    
    


    선택적으로 제어 노드의/etc/hosts에 다음 줄을 추가합니다.

    172.19.181.1    p1
    172.19.181.2    p2
    172.19.181.3    p3
    172.19.181.4    p4
    
    


    You can also use the IP address directly.



    ssh를 통해 각 추가 노드를 업데이트합니다.

    pi@control-node:~ $ ssh p1 'sudo apt update && sudo apt dist-upgrade -y'
    pi@control-node:~ $ ssh p2 'sudo apt update && sudo apt dist-upgrade -y'
    pi@control-node:~ $ ssh p3 'sudo apt update && sudo apt dist-upgrade -y'
    pi@control-node:~ $ ssh p4 'sudo apt update && sudo apt dist-upgrade -y'
    
    


    이 글을 쓰는 시점에서 각 노드의 기본 OS에 대한 추가 변경이 필요합니다. cgroups의 기본값이 최근에 변경되었으므로 컨테이너를 실행하려면 이 변경이 필요합니다.

    각 노드의 /boot/cmdline.txt에 다음 구성을 추가한 다음 재부팅합니다.

    cgroup_memory=1 cgroup_enable=memory
    
    


    k3s 준비



    k3s에 대한 설명서는 믿을 수 없습니다. 이 가이드에서는 k3sup라는 또 다른 도구를 사용하여 k3s 클러스터를 배포합니다.

    먼저 k3sup을 설치합니다.

    pi@control-node:~ $ sudo curl -sLS https://get.k3sup.dev | sh
    
    


    k3sup의 제어 노드를 설치합니다.

    pi@control-node:~ $ k3sup install --ip 172.19.181.254 --user $(whoami)
    
    


    해당 프로세스는 다음과 유사한 출력으로 종료됩니다.

    ...
    Saving file to: /home/pi/kubeconfig
    
    # Test your cluster with:
    export KUBECONFIG=/home/pi/kubeconfig
    kubectl config set-context default
    kubectl get node -o wide
    pi@control-node:~ $
    
    


    컨텍스트를 설정하고 제어 노드가 준비되었는지 확인한 후 다른 노드를 클러스터에 추가합니다.

    pi@control-node:~ $ k3sup join --ip 172.19.181.1 --server-ip 172.19.181.254 --user $(whoami)
    pi@control-node:~ $ k3sup join --ip 172.19.181.2 --server-ip 172.19.181.254 --user $(whoami)
    pi@control-node:~ $ k3sup join --ip 172.19.181.3 --server-ip 172.19.181.254 --user $(whoami)
    pi@control-node:~ $ k3sup join --ip 172.19.181.4 --server-ip 172.19.181.254 --user $(whoami)
    
    


    이제 약 $100의 하드웨어에 배포된 kubernetes 클러스터가 있습니다.

    pi@control-node:~ $ kubectl get node
    NAME STATUS ROLES AGE VERSION
    control-node Ready control-plane,master 25m v1.24.3+k3s1
    p1 Ready <none> 20m v1.24.3+k3s1
    p2 Ready <none> 20m v1.24.3+k3s1
    p3 Ready <none> 22m v1.24.3+k3s1
    p4 Ready <none> 19m v1.24.3+k3s1
    pi@control-node:~ $
    
    


    테스트 배포



    클러스터에 배포:

    spring-boot-native-pi.yaml 파일 생성

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-boot-native-pi
    spec:
      selector:
        matchLabels:
          app: springbootnativepi
      replicas: 4
      template:
        metadata:
          labels:
            app: springbootnativepi
        spec:
          containers:
          - name: springbootnativepi
            image: dashaun/spring-pi-native:focal-arm64
            ports:
            - containerPort: 8080
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: web-service
    spec:
      selector:
        app: springbootnativepi
      ports:
        - protocol: TCP
          port: 8080
    
    


    확인하다:

    pi@control-node:~ $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    spring-boot-native-pi-59f7d7659c-hvlp8 1/1 Running 0 42m
    spring-boot-native-pi-59f7d7659c-dp7nn 1/1 Running 0 42m
    spring-boot-native-pi-59f7d7659c-sf899 1/1 Running 0 42m
    spring-boot-native-pi-59f7d7659c-99vfq 1/1 Running 0 42m
    pi@control-node:~ $
    


    요약



    이 가이드에서는 Raspberry Pi를 사용하여 ClusterHat에서 제공하는 사용자 지정 OS 이미지 위에 k3s를 배포하는 방법을 배웠습니다.

    좋은 웹페이지 즐겨찾기