Raspberry PI 및 kubeadm에서 홈 Kubernetes 클러스터 구축

입문


안녕하십니까? 제 이름은 @hatotaka입니다. 이 글은 Z Lab Advent Calendar 2017 16일째 글입니다.
이번에는 Kubernetes 초보자들에게 Raspberry PI와 Kubeadm을 이용하여 자신의 집을 구축하는 방법을 소개하고 싶습니다. 저도 11월부터 본격적으로 업무적으로 Kubernetes를 사용하기 시작했습니다. 공부로 저는 자신의 집에 Kubernetes를 구축했습니다. 그래서 이 방법을 공유하고 싶습니다.

준비


우선, 필요한 물건을 준비하다
이번에 제가 준비한 물건은 다음과 같습니다. 이것들은 모두 Yahoo입니다!쇼핑이나 아마존에서 살 수 있어요.
  • Raspberry Pi 3 Model B * 3
  • Transcend microSDHC 카드 32GB Class10UHS-I 대응*3
  • Anker PowerPort6(60W6 포트 USB 급속 충전기)
  • LAN 케이블*3
  • 마이크로 USB 케이블*3
  • 이는 본사의 모회사인 야후주식회사가 10월부터 시작한 마이폴라리스의 기술활동비를 보조해 구입한 것이다.이 제도는 기술력을 높이기 위해 월 1만 엔을 보조하는 제도다.ZLab에서는 My Poraris를 필두로 야후의 각종 제도를 활용할 수 있다.
    그리고 나는 이미 집안의 아래의 물건을 사용했다.
  • 스위치 집선기
  • AirMac Express
  • 제 집에서는 유선 LAN을 작업장으로 끌기 어려워서 AirMac Express를 제 집 와이파이 접속점에 연결한 다음 스위치 집선기에 연결합니다. 스위치 집선기에서 라즈베리 PI에 연결합니다.

    Kubernetes 클러스터 구축


    이번에 구축된 Kubernetes 클러스터는 다음과 같습니다.
  • Raspberry pi
  • 모델: Raspberry Pi3 Model B
  • OS: Raspbian stretch lite (2017-11-29)
  • Kubernetes
  • kubeadm: v1.8.4
  • Pod Network: Flannel
  • 또한 이번 방법은 macOS High Sierra에서 진행되었습니다. Windows, Linux, macOS의 다른 버전은 다를 수 있습니다.

    운영 체제 설치


    우선, Raspberry PI에 OS를 설치합니다. 이번 OS는 Raspbian을 사용합니다. OS의 설치는 마이크로 SD카드에 이미지를 쓰는 것입니다.이 작업들은 macOS에서 진행된다.
    다음 URL에서 Raspbian stretch lite 다운로드
  • https://www.raspberrypi.org/downloads/raspbian/
  • 다운로드한 zip 파일의 압축을 풀고 마이크로SD 카드에 쓰기
    디스크 경로는 환경에 따라 다릅니다.
    // zipファイルを解凍する
    $ cd ~/Download
    $ unzip 2017-09-07-raspbian-stretch-lite.zip
    Archive:  2017-09-07-raspbian-stretch-lite.zip
      inflating: 2017-09-07-raspbian-stretch-lite.img 
    
    // SD card のパスを確認
    $ diskutil list
    
    // SD card をアンマウントする
    $ sudo diskutil umount /dev/disk2s1
    
    // dd コマンドでイメージを書き込む
    $ sudo dd bs=1M if=/path/to/image/2017-09-07-raspbian-stretch-lite.img of=/dev/rdisk2
    
    자세한 내용은 https://www.raspberrypi.org/documentation/installation/installing-images/README.md 을 참조하십시오.
    운영 체제 이미지를 SD 카드에 쓴 후 몇 가지 설정을 합니다. 이 작업은 macOS에서도 진행됩니다.

    ssh 사용


    ssh를 사용하도록 설정합니다.boot 디렉터리 아래에 ssh라는 파일을 만듭니다.
    $ cd /Volumes/boot
    $ touch ssh
    
    이 작업을 수행하면 Raspbian이 시작된 후 sshd를 시작하고 원격에서 계속 설정할 수 있습니다. 자세한 내용은 https://www.raspberrypi.org/blog/a-security-update-for-raspbian-pixel/ 을 참조하십시오.

    cgroups 사용


    다음은 cgroups의 cpuset과memory를 사용하기 위해 다음 설정을 진행하십시오
    $ cd /Volumes/boot
    $ vi cmdline.txt
    
    cgroup_enable=cpuset cgroup_enable=memory
    - dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=af816d3b-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
    + dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=af816d3b-02 rootfstype=ext4 cgroup_enable=cpuset cgroup_enable=memory elevator=deadline fsck.repair=yes rootwait
    
    최신kernel 버전에서 설정 방법이 바뀐 것 같다cgroup_memory=1이상의 작업을 수행하는 Raspberry PI의 테이블 수

    부트 및 초기 설정


    위 단계에 따라 제작된 SD 카드를 Raspberry PI에 꽂고 전원을 켭니다.
    시작 후 동일한 네트워크에 이름이 raspberrypi인 인스턴스가 없으면 raspberrypi.local 이름으로 액세스할 수 있습니다.
    $ slogin [email protected]
    //  初期パスワードは raspberry
    
    로그인이 완료되면 호스트 이름을 변경하십시오. 파일을 수정하여 원하는 호스트 이름으로 변경합니다.이번에 나는 /etc/hostname의 이름을 지었다.
    또 필요에 따라 사용자의 추가, 기본 사용자raspi[001-003]의 무효화 등도 실시한다.
    $ sudo vi /etc/hostname
    // ホスト名を変更
    
    // 必要に応じて、ユーザの追加等を行う
    
    $ sudo reboot
    
    reboot 후 pi 이름으로 접근 가능

    Docker 설치


    Docker 설치
    $ slogin <設定したホスト名>.local
    
    // 必要なパッケージのインストール
    $ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
    
    // リポジトリの追加
    $ curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -
    $ echo "deb [arch=armhf] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
         $(lsb_release -cs) stable" | \
        sudo tee /etc/apt/sources.list.d/docker.list
    
    // インストール
    $ sudo apt-get update
    $ sudo apt-get install docker-ce
    
    자세한 내용은 https://docs.docker.com/engine/installation/linux/docker-ce/debian/ 을 참조하십시오.

    kubeadm 설치


    그리고kubeadm,kubelet,kubectl을 설치합니다.
    스왑을 해제합니다.Kubernetes1.8에서 교환이 유효하면 Kubelet이 시작되지 않기 때문입니다
    $ sudo dphys-swapfile swapoff
    $ sudo dphys-swapfile uninstall
    $ sudo update-rc.d dphys-swapfile remove
    
    저장소 추가 및 패키지 설치
    $ slogin <設定したホスト名>.local
    
    // リポジトリの追加
    $ curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg|sudo apt-key add -
    $ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kube.list
    
    // インストール
    $ sudo apt-get update
    $ sudo apt-get install kubelet kubeadm kubectl
    
    자세한 내용은 https://kubernetes.io/docs/setup/independent/install-kubeadm/ 을 참조하십시오.

    호스트 설정


    마스터가 될 실례에서 다음 명령을 실행합니다. <設定したホスト名>.local 의 옵션은 flannel을 사용하는 데 필요한 옵션입니다.
    $ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    
    ....
    
    Your Kubernetes master has initialized successfully!
    
    To start using your cluster, you need to run (as a regular user):
    
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      http://kubernetes.io/docs/admin/addons/
    
    You can now join any number of machines by running the following on each node
    as root:
    
      kubeadm join --token xxxxxx.xxxxxxxx 10.0.1.22:6443 --discovery-token-ca-cert-hash sha256:xxxxxxxxx
    
    성공하면 위의 메시지가 표시됩니다.
    정보에 따라pod 네트워크를 배치합니다. 이번에는 Flannel을 사용합니다.
    $ mkdir -p $HOME/.kube
    $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    kubectl이 올바르게 작동하는지 확인하기
    $ kubectl version
    Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.5", GitCommit:"cce11c6a185279d037023e02ac5249e14daa22bf", GitTreeState:"clean", BuildDate:"2017-12-07T16:16:03Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/arm"}
    Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.5", GitCommit:"cce11c6a185279d037023e02ac5249e14daa22bf", GitTreeState:"clean", BuildDate:"2017-12-07T16:05:18Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/arm"}
    
    다음 명령을 사용하여 flannel 배포
    $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
    
    현재,master 설정이 완료되었습니다.

    노드 설정


    node로 추가할 인스턴스에서 다음 명령을 수행합니다.
    $ kubeadm join --token xxxxxx.xxxxxxxx 10.0.1.22:6443 --discovery-token-ca-cert-hash sha256:xxxxxxxxx
    
    실행--pod-network-cidr=10.244.0.0/16 후 실행kubeadm join은 노드를 추가하고 상태도 준비됩니다.
    $ kubectl get node
    NAME       STATUS    ROLES     AGE       VERSION
    raspi001   Ready     master    27m       v1.8.5
    raspi002   Ready     <none>    1m        v1.8.5
    raspi003   Ready     <none>    1m        v1.8.5
    
    이상 설정 완료

    끝내다


    위 절차를 통해kubeadm를 사용하면 라즈베리 PI에서 간단하게 Kubernetes 군집을 구축할 수 있습니다.여러분도 반드시 집에서 라즈베리 파이로 쿠베르네츠 집단을 구축해야 합니다.
    https://about.yahoo.co.jp/pr/release/2017/10/02a/  
    https://about.yahoo.co.jp/hr/workplace/welfare.html  
    https://about.yahoo.co.jp/hr/workplace/familycare.html  
    https://about.yahoo.co.jp/hr/workplace/vacation.html  
    https://qiita.com/tkusumi/items/0962220a0700cb1f6eb3#노드-swap-를 사용하면 kubelet-가 다시 시작되지 않습니다.  

    좋은 웹페이지 즐겨찾기