树莓派组建 k8s 集群(centos版)

但使书种多,会有岁稔时。这篇文章主要讲述树莓派组建 k8s 集群(centos版)相关的知识,希望能为你提供帮助。
一般来讲,一个典型的 k8s 集群通常都由成千上百的服务器构成。对于个人、教育机构和中小企业而言,构建和维护一个具有相当规模的 k8s 集群需要很高的成本,成本、空间和能耗开销都是很棘手的问题。这些问题就会导致很多本来应该基于 k8s 集群的具体工作都很难持续开展。而树莓派是一种低成本、低功耗的基于 ARM 的微型电脑主板,如果能够用一定数量的树莓派组建 k8s 集群且能够做到基本可用,那必然会显著降低 k8s 集群的使用成本。
退一步来说,当树莓派 k8s 集群成功组建后,这样的一套环境也是一个非常实用的学习和实验工具,能够显著降低 k8s 的学习门槛。
树莓派的基本知识
树莓派是一款基于 ARM 的微型电脑主板,旨为学生编程教育而设计,其系统基于 Linux,由注册于英国的慈善组织“Raspberry Pi 基金会”开发,Eben?Upton 为项目带头人。树莓派尺寸仅有信用卡大小,体积和火柴盒相差无几,别看其外表“娇小”,功能却很强大,上网、看视频、听音乐等功能都能支持,可谓是“麻雀虽小,五脏俱全”。而且除了官方系统外,还可以安装其他第三方系统,便携易折腾,因此自问世以来,就深受众多计算机发烧友和创客追捧。
树莓派家族下面图表记录了树莓派家族型号机器参数:

树莓派组建 k8s 集群(centos版)

文章图片

树莓派集群可以看出,从树莓派 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 台树莓派组成的超大集群,看起来是不是很酷。
树莓派组建 k8s 集群(centos版)

文章图片

上图引自:甲骨文用 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参考
  • 树莓派4B安装Centos7.9
  • 树莓派4B的centos7.9配置优化 安装docker参考
  • 树莓派4B安装docker 安装kubernetes参考
  • 树莓派4B安装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.101advertiseAddress: 10.168.1.101
      bindPort: 6443
      nodeRegistration:
      criSocket: /var/run/dockershim.sock
      name: pi4-master01
      taints:
    • effect: NoSchedule
      key: node-role.kubernetes.io/masterapiServer:
      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
      修改版本号【树莓派组建 k8s 集群(centos版)】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

配置 kubectlmkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
验证是否成功kubectl get node
NAMESTATUSROLESAGEVERSION
pi4-master01NotReadymaster7m11sv1.18.20
注意这里返回的 node 是 NotReady 状态,因为没有装网络插件kubectl get cs
NAMESTATUSMESSAGEERROR
controller-managerUnhealthyGet http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused
schedulerUnhealthyGet http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused
etcd-0Healthy" 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那行注释 ```bash # 重启kubelet systemctl restart kubelet kubectl get cs NAMESTATUSMESSAGEERROR schedulerHealthyok controller-managerHealthyok etcd-0Healthy"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 NAMESTATUSROLESAGEVERSION pi4-master01Readymaster59mv1.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 NAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIME pi4-master01Readymaster60mv1.18.2010.168.1.101< none> CentOS Linux 7 (AltArch)5.4.72-v8.1.el7docker://19.3.8 pi4-node01Ready< none> 7m20sv1.18.2010.168.1.102< none> CentOS Linux 7 (AltArch)5.4.72-v8.1.el7docker://19.3.8 pi4-node02Ready< none> 6m19sv1.18.2010.168.1.103< none> CentOS Linux 7 (AltArch)5.4.72-v8.1.el7docker://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 wideNAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIME pi4-master01Readymaster3h57m v1.18.2010.168.1.101< none> CentOS Linux 7 (AltArch)5.4.72-v8.1.el7docker://19.3.8 pi4-node01Readynode3h4mv1.18.2010.168.1.102< none> CentOS Linux 7 (AltArch)5.4.72-v8.1.el7docker://19.3.8 pi4-node02Readynode3h3mv1.18.2010.168.1.103< none> CentOS Linux 7 (AltArch)5.4.72-v8.1.el7docker://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.BuildInfoVersion:"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

dnsPolicydnsPolicy: ClusterFirstWithHostNet
?
使用hostNetwork,即使用宿主机上的端口80 443hostNetwork: true
?
使用DaemonSet,将ingress部署在指定节点上kind: DaemonSet
?
节点选择,将需要部署的节点打上ingress=true的labelnodeSelector:
kubernetes.io/os: linux
ingress: " true"
修改type,改为ClusterIP。如果在云环境,有loadbanace可以使用loadbanacetype: ClusterIP
- 安装ingress-nginx ```bash # 选择节点打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-tlsIf 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 NAMEREADYSTATUSRESTARTSAGE pod/ingress-nginx-controller-6w8bx1/1Running034m pod/ingress-nginx-controller-g9m6k1/1Running034m pod/ingress-nginx-controller-lrspp1/1Running034m

NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
service/ingress-nginx-controllerClusterIP10.109.127.239< none> 80/TCP,443/TCP34m
service/ingress-nginx-controller-admissionClusterIP10.110.214.58< none> 443/TCP34m
service/kubernetesClusterIP10.96.0.1< none> 443/TCP39h
NAMEDESIREDCURRENTREADYUP-TO-DATEAVAILABLENODE SELECTORAGE
daemonset.apps/ingress-nginx-controller33333ingress=true,kubernetes.io/os=linux34m
用浏览器访问 http://10.168.1.101/ 界面如下: ![](https://s4.51cto.com/images/blog/202204/17075203_625b56a3883621048.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) ### 安装 kubernetes-dashboard #### 下载kubernetes-dashboard ```bash 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-n4cwc1/1Running03m43s service/kubernetes-dashboardClusterIP10.103.120.221< none> 443/TCP3m43s deployment.apps/kubernetes-dashboard1/1113m43s replicaset.apps/kubernetes-dashboard-69574fd85c1113m43skubectl get ingress -n kube-system NAMECLASSHOSTSADDRESSPORTSAGE kubernetes-dashboard< none> kdb.pi4k8s.com10.109.127.239804m55s

访问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, 显示风险提示页面如下
树莓派组建 k8s 集群(centos版)

文章图片

点“高级”按钮,页面展示风险原因,并提供了可以接受风险并继续的链接
树莓派组建 k8s 集群(centos版)

文章图片

点击“”接受风险并继续”,进入登录页面如下
树莓派组建 k8s 集群(centos版)

文章图片

查看token并使用token登陆
# 查看内容含有token的secret kubectl get secret -n kube-system | grep kubernetes-dashboard-token kubernetes-dashboard-token-9llx4kubernetes.io/service-account-token325m # 查看对应的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-4e7ffba6d5e0Type:kubernetes.io/service-account-tokenData =https://www.songbingjia.com/android/=== ca.crt:1025 bytes namespace:11 bytes token:eyJhbGciOiJSUzI1NiIsImtpZCI6ImRmbm8wVHhOT21ib0hUZkIzLWhPSGVER0x6Q1ppVHVTWGMxeFgxdWJHTHMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1jOG5sZyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjQzMmQ2NzEwLTNmMjUtNGJmYi1hMGI3LTFiNmE0OGMwYTVlZCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.Cu7eXyk1TqA4RS0Zxs2dWgn7vJwThZRpKSAmpQExUGkMbndKVh4fgr5r2YzVTD5vfKukGTFM2g-tM_HL_8pxgxhA-jXXaNhHa4n1Vi-yje0RUZuvBbXY1E8PZAfzXAf3IoLvHgi5rMxT-NZsoIgSikAh7fBZ9WhdKgMWESyyd3jIj92XqhRRfphn6z2j5uvBSCnTnNG3mUdcWABKR6G2U7Ulz__l6KLnmTeIpZfKEmPbyYqp_8yEmkfYLa7E2KKElU5_NuWriijHbvSvQ9HnF5k2fDvfBf-CqIA1YBs1_9iQH-ONDSw9K88YvE9gUpi4YO2uG9X-9g6OpIdQFLhzog

树莓派组建 k8s 集群(centos版)

文章图片

使用Token方式登录,填入token,点登录按钮后进入dashboard如下
树莓派组建 k8s 集群(centos版)

文章图片

可以看到这里显示“这里没有可以显示的”,是因为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查看如下
树莓派组建 k8s 集群(centos版)

文章图片

安装 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 NAMEREADYSTATUSRESTARTSAGE local-path-provisioner-5b577f66ff-q2chs1/1Running024m [root@k8s-master01 deploy]# kubectl get storageclass NAMEPROVISIONERRECLAIMPOLICYVOLUMEBINDINGMODEALLOWVOLUMEEXPANSIONAGE local-pathrancher.io/local-pathDeleteWaitForFirstConsumerfalse24m

配置 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 NAMEPROVISIONERRECLAIMPOLICYVOLUMEBINDINGMODEALLOWVOLUMEEXPANSIONAGE local-path (default)rancher.io/local-pathDeleteWaitForFirstConsumerfalse27m25m

验证local-path安装是否OK
kubectl apply -f examples/pod.yaml,examples/pvc.yaml pod/volume-test created persistentvolumeclaim/local-path-pvc createdkubectl get pvc,pv NAMESTATUSVOLUMECAPACITYACCESS MODESSTORAGECLASSAGE persistentvolumeclaim/local-path-pvcBoundpvc-74935037-f8c7-4f1a-ab2d-f7670f8ff5402GiRWOlocal-path58sNAMECAPACITYACCESS MODESRECLAIM POLICYSTATUSCLAIMSTORAGECLASSREASONAGE persistentvolume/pvc-74935037-f8c7-4f1a-ab2d-f7670f8ff5402GiRWODeleteBounddefault/local-path-pvclocal-path37s

总结
本指南首先介绍了树莓派的基本知识,然后详细讲解了如何用3个树莓派4B组建k8s集群。这套集群是一套完整的k8s环境,能够满足大多数使用场景,比如直接执行docker、k8s和helm等各种命令,或者安装mysql、redis、zookeeper和kafka等各类中间件甚至直接部署我们的学习项目或者工作项目。

    推荐阅读