於樹莓派上執行 kubernetes ( 以 minikube 為例)

在raspberry pi 上簡單建立 kubenertes (k8s)

Seachaos
tree.rocks

--

前言

kubernets ( 有些人稱 k8s )於 樹莓派或是各平台上安裝很容易遇到環境/網路設定各種疑難雜症,所以為了簡化練習 k8s 或是 DevOps 概念驗證,可以使用 minikube 來簡化整個安裝設定流程 ( minikube 的細節說明請看官網 )

以下範例為在 Raspberry Pi 上使用 minikube ( 可以做為 kubernetes 的練習平台)

基本上來說標準桌機的 Ubuntu Linux / Mac 也是相同的安裝方式,只是把 arm 換成 x86

注意: 請先在樹莓派上安裝好以下程式:

  1. docker : minikube 會在這邊建立 kubernetes
  2. kubectl / kubeadm : 用於 kubernetes 操作

1. 下載/安裝 minikube

我們可以從 minikube 的 GitHub release 找到已經編譯好的執行檔https://github.com/kubernetes/minikube/releases

因為是要在樹莓派 (Raspberry pi )上執行,所以就下載 linux-arm 版本

此為 1.12.1 版本且 32 位元 為例,如果你的 Raspberry pi 是 64 也可以抓 64 版本使用 (或是 x86 )

https://github.com/kubernetes/minikube/releases/download/v1.12.1/minikube-linux-arm

可以於樹莓派上執行以下指令直接下載

wget https://github.com/kubernetes/minikube/releases/download/v1.12.1/minikube-linux-arm

然後複製到 Raspberry Pi 的 /usr/local/bin 下使用

sudo chmod +x minikube-linux-arm
sudo mv minikube-linux-arm /usr/local/bin/minikube

驗證一下程式可以執行,輸入

minikube version

應該會看到類似下列結果

正確於樹莓派上顯示 minikube 版本

2. 啟動 minikube

輸入以下指令

sudo minikube start —-driver=none

這邊我們需要特別指定 driver=none, 這樣 minikube 就會用 docker 來當作 driver
( minikube 也支援這各種 VM,但是在樹莓派上最簡單的就是透過 docker,細節請看官網 )

應該會看到成功的啟動,類似以下畫面

使用 docker 作為 minikube 的 driver 在樹莓派上是簡單的做法

這邊說明一下,minikube 常用的三個指令

start  : 啟動,並且建立 kubernetes
stop : 停止,可以用 start 繼續
delete : 移除,當有問題或是需要重置時使用

然後我們就按照 minikube 建議的輸入以下指令來設定 kubectl

sudo mv /root/.kube /root/.minikube $HOME
sudo chown -R $USER $HOME/.kube $HOME/.minikube

沒有錯誤我們可以檢查一下 kubectl 設定,使用指令檢查設定檔

kubectl config get-contexts

就會看到成功 ( 另外可以使用 docker ps 會看到很多 container )

kubectl config 確實為我們的 minikube

3. 測試

接下來我們做一個簡單的 deployment 看看

kubectl create deployment mytest —-image=busybox

如果看到以下錯誤,表示憑證檔案路徑設定有誤

Error in configuration:
* unable to read client-cert /root/.minikube/profiles/minikube/client.crt for minikube due to open /root/.minikube/profiles/minikube/client.crt: permission denied* unable to read client-key /root/.minikube/profiles/minikube/client.key for minikube due to open /root/.minikube/profiles/minikube/client.key: permission denied
* unable to read certificate-authority /root/.minikube/ca.crt for minikube due to open /root/.minikube/ca.crt: permission denied

基本上只要修改一下設定檔,使用 vim 或是文字編輯器

vim ~/.kube/config

將內文原本為 /root/.minikube 全部改成:使用者目錄下 ( 樹莓派預設為 /home/pi/.minikube )

修正後範例如下

apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/pi/.minikube/ca.crt
server: https://localhost:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /home/pi/.minikube/profiles/minikube/client.crt
client-key: /home/pi/.minikube/profiles/minikube/client.key

再試一次

kubectl create deployment mytest —-image=busybox

就會看到 mytest 建立成功

接下來就和正常使用 kubectl 一樣了

--

--