樹莓派組建 k8s 集羣(centos版)

一般來講,一個典型的 k8s 集羣通常都由成千上百的服務器構成。對於個人、教育機構和中小企業而言,構建和維護一個具有相當規模的 k8s 集羣需要很高的成本,成本、空間和能耗開銷都是很棘手的問題。這些問題就會導致很多本來應該基於 k8s 集羣的具體工作都很難持續開展。而樹莓派是一種低成本、低功耗的基於 ARM 的微型電腦主板,如果能夠用一定數量的樹莓派組建 k8s 集羣且能夠做到基本可用,那必然會顯著降低 k8s 集羣的使用成本。

退一步來說,當樹莓派 k8s 集羣成功組建後,這樣的一套環境也是一個非常實用的學習和實驗工具,能夠顯著降低 k8s 的學習門檻。

樹莓派的基本知識

樹莓派是一款基於 ARM 的微型電腦主板,旨爲學生編程教育而設計,其系統基於 Linux,由註冊於英國的慈善組織“Raspberry Pi 基金會”開發,Eben•Upton 爲項目帶頭人。樹莓派尺寸僅有信用卡大小,體積和火柴盒相差無幾,別看其外表“嬌小”,功能卻很強大,上網、看視頻、聽音樂等功能都能支持,可謂是“麻雀雖小,五臟俱全”。而且除了官方系統外,還可以安裝其他第三方系統,便攜易折騰,因此自問世以來,就深受衆多計算機發燒友和創客追捧。

樹莓派家族

下面圖表記錄了樹莓派家族型號機器參數:

樹莓派集羣

可以看出,從樹莓派 3 代開始,樹莓派的 cpu 和內存有了很大提升,尤其是 2019 年 6 月,樹莓派社區推出了新產品 Pi4B,它首次搭載了 4GB 的內存 (1G / 2G / 4G 可選,2020 年 6 月又推出 8G 版本),並且引入 USB 3.0 接口,同時支持雙屏 4K 輸出和 H.265 硬件解碼;處理器搭載了博通 1.5GHz 的四核 ARM Cortex-A72 處理器,這次硬件的巨大升級對於樹莓派的性能提升可謂是質的飛躍,也激發了我用樹莓派跑服務端應用的熱情,並着手開始實施。 其實在樹莓派 3 代推出後,就有人開始用樹莓派組建集羣,比如下面這個由 1060 臺樹莓派組成的超大集羣,看起來是不是很酷。
上圖引自:甲骨文用 1060 臺樹莓派打造了一臺“超算”

2020年6月,筆者在gitchat上發了一篇文章樹莓派 k8s 集羣入坑指南,該文詳細介紹了在樹莓派4B上如何從安裝操作系統64位ubuntu開始,安裝docker、kubernetes、helm直至組建k8s集羣、並安裝nginx-ingress、kubernetes-dashboard和local-path全過程;後續又陸續基於該集羣實踐了prometheus、mysql主從複製、redis集羣、consul集羣、kafka集羣、spring cloud微服務項目的安裝並分享成文。

時隔一年後,筆者對該集羣進行升級,docker、kubernetes和helm分別由對應的18.09.9、1.15.0和2.15升級至19.03.8、1.18.20和3.5.0,這個版本組合已經和筆者工作環境下x86集羣中使用到的docker、kubernetes和helm主版本基本一致,另外更有意思的是,2020年下半年linux社區發佈了適配樹莓派4B的64位centos7.9,從而爲筆者的這次升級再添一項重要內容,即將樹莓派的操作系統切換爲centos後,再行組建k8s集羣。

樹莓派 4 安裝 k8s 集羣

安裝準備 • 硬件:Raspberry Pi 4B-4g 3 臺 • sd 卡:閃迪 128GB SD 3 張 本指南中以 3 個樹莓派 4 組建 k8s 集羣,用一個做 master,另外兩個做 node,docker 版本爲19.03.8,k8s 版本爲1.18.20,使用 kubeadm 進行安裝。 具體安裝規劃如下:

hostname ip 型號 os kernel cpu memory disk role
pi4-master01 10.168.1.101 raspberry4b CentOS Linux release 7.9.2009 (AltArch) 5.4.72-v8.1.el7 4c 4g 128 master
pi4-node01 10.168.1.102 raspberry4b CentOS Linux release 7.9.2009 (AltArch) 5.4.72-v8.1.el7 4c 4g 128 node
pi4-node02 10.168.1.103 raspberry4b CentOS Linux release 7.9.2009 (AltArch) 5.4.72-v8.1.el7 4c 4g 128 node

安裝centos7.9

參考

安裝docker

參考

安裝kubernetes

參考

設置 hostname:

# pi4-master01
hostnamectl set-hostname pi4-master01
# pi4-node01
hostnamectl set-hostname pi4-node01
# pi4-node02
hostnamectl set-hostname pi4-node02

組建k8s步驟

初始化master節點(只在k8s-mater01主機上執行)
  • 創建初始化配置文件,可以使用如下命令生成初始化配置文件
kubeadm config print init-defaults > kubeadm-config.yaml
vi kubeadm-config.yaml
  • 編輯配置文件kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  # pi4-master01的ip:10.168.1.101
  advertiseAddress: 10.168.1.101
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: pi4-master01
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
# 修改版本號
kubernetesVersion: v1.18.20
networking:
  dnsDomain: cluster.local
  # 配置成 Calico 的默認網段
  podSubnet: "10.244.0.0/16"
  serviceSubnet: 10.96.0.0/12
scheduler: {}
---
# 開啓 IPVS 模式
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
  SupportIPVSProxyMode: true
mode: ipvs
  • kubeadm 初始化
# kubeadm 初始化
kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log

# 配置 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# 驗證是否成功
kubectl get node
NAME           STATUS     ROLES    AGE     VERSION
pi4-master01   NotReady   master   7m11s   v1.18.20
# 注意這裏返回的 node 是 NotReady 狀態,因爲沒有裝網絡插件
kubectl get cs
NAME                 STATUS      MESSAGE                                                                                     ERROR
controller-manager   Unhealthy   Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused   
scheduler            Unhealthy   Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused   
etcd-0               Healthy     {"health":"true"}
# 注意這裏返回的 controller-manager和scheduler 是 Unhealthy 狀態,下面是解決方案
  • 解決controller-manager和scheduler 是 Unhealthy 狀態
    開啓scheduler, control-manager的10251,10252端口
    修改以下配置文件:
    /etc/kubernetes/manifests/kube-scheduler.yaml,把port=0那行註釋
    /etc/kubernetes/manifests/kube-controller-manager.yaml,把port=0那行註釋
# 重啓kubelet
systemctl restart kubelet
kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   
# 注意這裏返回的 controller-manager和scheduler 已經是 healthy 狀態了
  • 安裝calico網絡組件
# 下載
wget https://docs.projectcalico.org/manifests/calico.yaml
# 替換 calico 部署文件的 IP 爲 kubeadm 中的 networking.podSubnet 參數 10.244.0.0
sed -i 's/192.168.0.0/10.244.0.0/g' calico.yaml
# 安裝
kubectl apply -f calico.yaml
kubectl get node
NAME           STATUS   ROLES    AGE   VERSION
pi4-master01   Ready    master   59m   v1.18.20
# 注意這裏返回的 node 已經是 Ready 狀態了
增加 node 節點

登錄 pi-node01 執行加入 k8s 集羣命令如下:

root@pi4-node01:~# kubeadm join 10.168.1.101:6443 --token o7dosg.zq4df9h80b6ygryp \
>     --discovery-token-ca-cert-hash sha256:82c4334bc880f3c6972cee93844d6307d989df10d90bd4d63c93212702604523

登錄 pi-node02 執行加入 k8s 集羣命令如下:

root@pi4-node02:~# kubeadm join 10.168.1.101:6443 --token o7dosg.zq4df9h80b6ygryp \
>     --discovery-token-ca-cert-hash sha256:82c4334bc880f3c6972cee93844d6307d989df10d90bd4d63c93212702604523

登錄 pi4-master01 查看 kubernetes 狀態:

root@pi4-master01:~/k8s# kubectl get nodes -o wide
NAME           STATUS   ROLES   AGE    VERSION    INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                   KERNEL-VERSION    CONTAINER-RUNTIME
pi4-master01   Ready    master  60m    v1.18.20   10.168.1.101   <none>        CentOS Linux 7 (AltArch)   5.4.72-v8.1.el7   docker://19.3.8
pi4-node01     Ready    <none>  7m20s  v1.18.20   10.168.1.102   <none>        CentOS Linux 7 (AltArch)   5.4.72-v8.1.el7   docker://19.3.8
pi4-node02     Ready    <none>  6m19s  v1.18.20   10.168.1.103   <none>        CentOS Linux 7 (AltArch)   5.4.72-v8.1.el7   docker://19.3.8

可以看到 pi4-node01 和 pi4-node02 已經作爲正常的 node 節點加入了集羣。

node 節點 ROLES 爲 none 處理

如果 ROLES 列爲 none,則通過打標籤來進行修復。 如果 master 節點的 ROLES 爲 none,則可爲 master 的節點打上標籤 node-role.kubernetes.io/master=;如果 node 節點的 ROLES 爲 none,則可爲 node 節點打上標籤 node-role.kubernetes.io/node=。

root@pi4-master01:~/k8s# kubectl label node pi4-node01 node-role.kubernetes.io/node=
node/pi4-node01 labeled
root@pi4-master01:~/k8s# kubectl label node pi4-node02 node-role.kubernetes.io/node=
node/pi4-node02 labeled
root@pi4-master01:~/k8s# kubectl get nodes -o wide

NAME           STATUS   ROLES   AGE   VERSION    INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                   KERNEL-VERSION    CONTAINER-RUNTIME
pi4-master01   Ready    master  3h57m v1.18.20   10.168.1.101   <none>        CentOS Linux 7 (AltArch)   5.4.72-v8.1.el7   docker://19.3.8
pi4-node01     Ready    node    3h4m  v1.18.20   10.168.1.102   <none>        CentOS Linux 7 (AltArch)   5.4.72-v8.1.el7   docker://19.3.8
pi4-node02     Ready    node    3h3m  v1.18.20   10.168.1.103   <none>        CentOS Linux 7 (AltArch)   5.4.72-v8.1.el7   docker://19.3.8
讓 Master 也進行 Pod 調度

默認情況下,pod 節點不會分配到 master 節點,可以通過如下命令讓 master 節點也可以進行 pod 調度:

root@pi4-master01:~# kubectl taint node pi4-master01 node-role.kubernetes.io/master-
node/pi4-master01 untainte
取消 k8s 對外開放默認端口限制

k8s 默認對外開放的端口範圍爲 30000~32767,可以通過修改 kube-apiserver.yaml 文件重新調整端口範圍,在 /etc/kubernetes/manifests/kube-apiserver.yaml 文件中,找到 --service-cluster-ip-range 這一行,在下面增加如下內容, - --service-node-port-range=10-65535

然後重啓 kubelet 即可。

systemctl daemon-reload && systemctl restart kubelet

安裝 helm3(只在k8s-mater01主機上執行)

# 打印版本號
helm version
version.BuildInfo{Version:"v3.5.0", GitCommit:"32c22239423b3b4ba6706d450bd044baffdcf9e6", GitTreeState:"clean", GoVersion:"go1.15.6"}

安裝 nginx-ingress

  • 下載ingress-nginx
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories
helm pull ingress-nginx/ingress-nginx  --version=3.39.0
tar -zxf ingress-nginx-3.39.0.tgz && cd ingress-nginx
  • 修改values.yaml
# 修改controller鏡像地址
repository: wangshun1024/ingress-nginx-controller
# 註釋掉 digest
# digest: sha256:35fe394c82164efa8f47f3ed0be981b3f23da77175bbb8268a9ae438851c8324

# dnsPolicy
dnsPolicy: ClusterFirstWithHostNet
​
# 使用hostNetwork,即使用宿主機上的端口80 443
hostNetwork: true
​
# 使用DaemonSet,將ingress部署在指定節點上
kind: DaemonSet
​
# 節點選擇,將需要部署的節點打上ingress=true的label
  nodeSelector:
    kubernetes.io/os: linux
    ingress: "true"

# 修改type,改爲ClusterIP。如果在雲環境,有loadbanace可以使用loadbanace
type: ClusterIP
  • 安裝ingress-nginx
# 選擇節點打label
kubectl label node pi4-master01 pi4-node01 pi4-node02 ingress=true
​
# 安裝ingress
# helm install ingress-nginx ./
NAME: ingress-nginx
LAST DEPLOYED: Sat Nov 20 13:09:11 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
Get the application URL by running these commands:
  export POD_NAME=$(kubectl --namespace default get pods -o jsonpath="{.items[0].metadata.name}" -l "app=ingress-nginx,component=controller,release=ingress-nginx")
  kubectl --namespace default port-forward $POD_NAME 8080:80
  echo "Visit http://127.0.0.1:8080 to access your application."

An example Ingress that makes use of the controller:

  apiVersion: networking.k8s.io/v1beta1
  kind: Ingress
  metadata:
    annotations:
      kubernetes.io/ingress.class: nginx
    name: example
    namespace: foo
  spec:
    rules:
      - host: www.example.com
        http:
          paths:
            - backend:
                serviceName: exampleService
                servicePort: 80
              path: /
    # This section is only required if TLS is to be enabled for the Ingress
    tls:
        - hosts:
            - www.example.com
          secretName: example-tls

If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:

  apiVersion: v1
  kind: Secret
  metadata:
    name: example-tls
    namespace: foo
  data:
    tls.crt: <base64 encoded cert>
    tls.key: <base64 encoded key>
  type: kubernetes.io/tls
  • 確認nginx- ingress 安裝是否 OK。
kubectl get all
NAME                                 READY   STATUS    RESTARTS   AGE
pod/ingress-nginx-controller-6w8bx   1/1     Running   0          34m
pod/ingress-nginx-controller-g9m6k   1/1     Running   0          34m
pod/ingress-nginx-controller-lrspp   1/1     Running   0          34m

NAME                                         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/ingress-nginx-controller             ClusterIP   10.109.127.239   <none>        80/TCP,443/TCP   34m
service/ingress-nginx-controller-admission   ClusterIP   10.110.214.58    <none>        443/TCP          34m
service/kubernetes                           ClusterIP   10.96.0.1        <none>        443/TCP          39h

NAME                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                         AGE
daemonset.apps/ingress-nginx-controller   3         3         3       3            3           ingress=true,kubernetes.io/os=linux   34m

用瀏覽器訪問 http://10.168.1.101/ 界面如下:

安裝 kubernetes-dashboard

下載kubernetes-dashboard

helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
"kubernetes-dashboard" has been added to your repositories
helm pull kubernetes-dashboard/kubernetes-dashboard --version=4.0.0
tar -zxf kubernetes-dashboard-4.0.0.tgz && cd kubernetes-dashboard

修改values.yaml

ingress: 
  # 啓用ingress
  enabled: true

  # 使用指定域名訪問
  hosts:
    - kdb.pi4k8s.com

安裝kubernetes-dashboard

# 安裝kubernetes-dashboard
helm install kubernetes-dashboard ./ -n kube-system
NAME: kubernetes-dashboard
LAST DEPLOYED: Sat Nov 20 15:20:18 2021
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
*********************************************************************************
*** PLEASE BE PATIENT: kubernetes-dashboard may take a few minutes to install ***
*********************************************************************************
From outside the cluster, the server URL(s) are:
     https://kdb.pi4k8s.com

確認kubernetes-dashboard 安裝是否 OK

kubectl get all -n kube-system |grep kubernetes-dashboard
pod/kubernetes-dashboard-69574fd85c-n4cwc      1/1     Running   0          3m43s
service/kubernetes-dashboard   ClusterIP   10.103.120.221   <none>        443/TCP                  3m43s
deployment.apps/kubernetes-dashboard      1/1     1            1           3m43s
replicaset.apps/kubernetes-dashboard-69574fd85c      1         1         1       3m43s

kubectl get ingress -n kube-system
NAME                   CLASS    HOSTS            ADDRESS          PORTS   AGE
kubernetes-dashboard   <none>   kdb.pi4k8s.com   10.109.127.239   80      4m55s

訪問kubernetes-dashboard

  • ip域名映射處理
    在訪問kubernetes-dashboard之前,我們需要在使用客戶端訪問電腦建立ip和相關域名的映射關係如下: 10.168.1.101 kdb.pi4k8s.com
    提示:win10或win7電腦中維護ip和相關域名的文件位置在 C:\Windows\System32\drivers\etc\hosts。

  • 安全風險處理
    因爲默認安裝的kubernetes-dashboard只能通過https訪問,且默認的服務器證書是自簽證書,用瀏覽器首次訪問會報安全風險,我們可以選擇忽略,直接訪問即可。

用域名訪問https://kdb.pi4k8s.com, 顯示風險提示頁面如下
點“高級”按鈕,頁面展示風險原因,並提供了可以接受風險並繼續的鏈接

點擊“”接受風險並繼續”,進入登錄頁面如下
查看token並使用token登陸

# 查看內容含有token的secret
kubectl get secret -n kube-system | grep kubernetes-dashboard-token
kubernetes-dashboard-token-9llx4                 kubernetes.io/service-account-token   3      25m
# 查看對應的token
kubectl describe secret -n kube-system kubernetes-dashboard-token-9llx4
Name:         kubernetes-dashboard-token-9llx4
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: kubernetes-dashboard
              kubernetes.io/service-account.uid: eb2a13d1-e3cb-47c3-9376-4e7ffba6d5e0

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6ImRmbm8wVHhOT21ib0hUZkIzLWhPSGVER0x6Q1ppVHVTWGMxeFgxdWJHTHMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1jOG5sZyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjQzMmQ2NzEwLTNmMjUtNGJmYi1hMGI3LTFiNmE0OGMwYTVlZCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.Cu7eXyk1TqA4RS0Zxs2dWgn7vJwThZRpKSAmpQExUGkMbndKVh4fgr5r2YzVTD5vfKukGTFM2g-tM_HL_8pxgxhA-jXXaNhHa4n1Vi-yje0RUZuvBbXY1E8PZAfzXAf3IoLvHgi5rMxT-NZsoIgSikAh7fBZ9WhdKgMWESyyd3jIj92XqhRRfphn6z2j5uvBSCnTnNG3mUdcWABKR6G2U7Ulz__l6KLnmTeIpZfKEmPbyYqp_8yEmkfYLa7E2KKElU5_NuWriijHbvSvQ9HnF5k2fDvfBf-CqIA1YBs1_9iQH-ONDSw9K88YvE9gUpi4YO2uG9X-9g6OpIdQFLhzog


使用Token方式登錄,填入token,點登錄按鈕後進入dashboard如下
可以看到這裏顯示“這裏沒有可以顯示的”,是因爲dashboard默認的serviceaccount並沒有權限,所以我們需要給予它授權。

創建dashboard-admin.yaml,內容如下

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kube-system

給dashboard的serviceaccont授權

kubectl apply -f dashboard-admin.yaml
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard configured

然後刷新dashboard,這時候可以通過dashboard查看如下

安裝 local-path

下載local-path-provisioner

wget https://github.com/rancher/local-path-provisioner/archive/v0.0.19.tar.gz
tar -zxf v0.0.19.tar.gz && cd local-path-provisioner-0.0.19

安裝local-path-provisioner

kubectl apply -f deploy/local-path-storage.yaml
kubectl get po -n local-path-storage
NAME                                      READY   STATUS    RESTARTS   AGE
local-path-provisioner-5b577f66ff-q2chs   1/1     Running   0          24m
[root@k8s-master01 deploy]# kubectl get storageclass
NAME         PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-path   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  24m

配置 local-path 爲默認存儲

kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/local-path patched
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.beta.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/local-path patched
[root@k8s-master01 deploy]# kubectl get storageclass
NAME                   PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-path (default)   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  27m               25m

驗證local-path安裝是否OK

kubectl apply -f examples/pod.yaml,examples/pvc.yaml
pod/volume-test created
persistentvolumeclaim/local-path-pvc created

kubectl get pvc,pv
NAME                                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/local-path-pvc   Bound    pvc-74935037-f8c7-4f1a-ab2d-f7670f8ff540   2Gi        RWO            local-path     58s

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS   REASON   AGE
persistentvolume/pvc-74935037-f8c7-4f1a-ab2d-f7670f8ff540   2Gi        RWO            Delete           Bound    default/local-path-pvc   local-path              37s

總結

本指南首先介紹了樹莓派的基本知識,然後詳細講解了如何用3個樹莓派4B組建k8s集羣。這套集羣是一套完整的k8s環境,能夠滿足大多數使用場景,比如直接執行docker、k8s和helm等各種命令,或者安裝mysql、redis、zookeeper和kafka等各類中間件甚至直接部署我們的學習項目或者工作項目。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章