关于在树莓派上安装Kubernetes仪表板的故事

这是截至2019年9月22日的情况。

前一次我在Raspberry Pi上构建了Kubernetes,但正因为这样,我想要一个Dashboard,所以我只是写了一个简单的文章。虽然需要进行一些微小的修正,但总算成功安装了。

建造步骤

环境

保留最终顺利解决的环境信息。

要素バージョン等ハードRaspberry Pi 3 Model BOSRaspbian 10 (buster)kubeletv1.15.3flannelv0.11.0-armmetallbv0.8.1kubernetes-dashboardv2.0.0-beta4

版本很重要。在这个社会上,关于kubernetes-dashboard的信息都是关于v1.x.x的,当我最初安装kubernetes-dashboard v.1.10.1时,它不能正常工作,给我带来了不必要的麻烦。

但是如果我仔细看下面这个地方,就会发现v1.10.1在kubernetes v1.13上无法运行,所以v1.15更不用说了。

https://github.com/kubernetes/dashboard/releases

该网络是在一个非常普通的家庭无线局域网(LAN)环境下建立的,并具有以下特点。

無線LANルータBuffaloの安いやつ(WCR-1166DS)デフォルトGW192.168.11.1Raspberry Pi アクセス用192.168.11.10 ~ 12MetalLB用192.168.11.200 ~ 240

顺便说一句,如果您要在Raspberry Pi上组建kubernetes集群,大多数人会选择使用有线局域网(LAN)进行组网,但无线局域网(WLAN)的话不需要繁杂的布线,更加整洁和方便。(性能可能会有所不同)

前提条件 (Qian ti tiao jian)

作为前提条件,需要确保已经按照以下步骤部署了Kubernetes。
https://qiita.com/yyojiro/items/0cd7ec7e2a39610be53f

修改yaml文件

首先获取dashboard的yaml。

root@k8s01:~# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml

稍微修改这个yaml文件的内容。
具体来说,修改以下3个地方。

在Service中添加Type:LoadBalancer。

or

新增Type:LoadBalancer的Service。

在世界上,使用NodePort来暴露服务是很常见的,但是我不喜欢使用它和代理的方式,因为URL会变得非常长。如果安装MetalLB并将其配置为LoadBalancer,将获得简单且美观的URL。
因此,在第32~45行左右的服务部分需要进行修改。

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  type: LoadBalancer   ## これを追加

更改图片的选项

由于树莓派的原因,需要将图像部分更改为arm。
需要在第191行附近修正 image: kubernetesui/dashboard:v2.0.0-beta4。

 image: kubernetesui/dashboard:v2.0.0-beta4
 ↓
 image: kubernetesui/dashboard-arm:v2.0.0-beta4

在这个阶段部署时,会出现以下错误。

The ClusterRoleBinding "kubernetes-dashboard" is invalid: roleRef: Invalid value: rbac.RoleRef{APIGroup:"rbac.authorization.k8s.io", Kind:"ClusterRole", Name:"kubernetes-dashboard"}: cannot change roleRef

修改ClusterRoleBinding。

kubernetes-dashboardというClusterRoleがないのでClusterRoleBindingに失敗した模様。kubernetes-dashboardというClusterRoleを作るべきだが、めんどくせーからClusterRoleをkubernetes-dashboardからcluster-adminに変更。
155~167行目あたりを修正。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin  ### kubernetes-dashboardからcluster-adminに変更
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard

部署

正常地执行kubectl apply命令。

root@k8s01:~# kubectl apply -f recommended.yaml 

うまくデプロイできれば下記のような結果が得られるはず。
※metrics-serverも見えているが、metrics-serverインストールはこちら https://qiita.com/yyojiro/items/febfaeadabd2fe8eed08

root@k8s01:~# kubectl get svc,pod --all-namespaces
NAMESPACE              NAME                                TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                  AGE
default                service/kubernetes                  ClusterIP      10.96.0.1       <none>           443/TCP                  24h
kube-system            service/kube-dns                    ClusterIP      10.96.0.10      <none>           53/UDP,53/TCP,9153/TCP   24h
kube-system            service/metrics-server              ClusterIP      10.108.95.178   <none>           443/TCP                  16h
kubernetes-dashboard   service/dashboard-metrics-scraper   ClusterIP      10.105.98.44    <none>           8000/TCP                 4h35m
kubernetes-dashboard   service/kubernetes-dashboard        LoadBalancer   10.98.187.37    192.168.11.200   443:32301/TCP            4h35m

NAMESPACE              NAME                                             READY   STATUS    RESTARTS   AGE
kube-system            pod/coredns-5644d7b6d9-4kl6n                     1/1     Running   0          117m
kube-system            pod/coredns-5644d7b6d9-lgnmg                     1/1     Running   0          132m
kube-system            pod/etcd-k8s01                                   1/1     Running   7          24h
kube-system            pod/kube-apiserver-k8s01                         1/1     Running   7          24h
kube-system            pod/kube-controller-manager-k8s01                1/1     Running   11         24h
kube-system            pod/kube-flannel-ds-arm-66xs4                    1/1     Running   5          131m
kube-system            pod/kube-flannel-ds-arm-mfjgp                    1/1     Running   4          131m
kube-system            pod/kube-proxy-55s9c                             1/1     Running   7          24h
kube-system            pod/kube-proxy-c9r6d                             1/1     Running   3          23h
kube-system            pod/kube-scheduler-k8s01                         1/1     Running   9          24h
kube-system            pod/metrics-server-754b5ccfc9-bdcxw              1/1     Running   0          119m
kubernetes-dashboard   pod/dashboard-metrics-scraper-566cddb686-8s2pl   1/1     Running   0          118m
kubernetes-dashboard   pod/kubernetes-dashboard-6ffd45c47d-fwnfv        1/1     Running   0          117m
metallb-system         pod/controller-6bcfdfd677-bqqwf                  1/1     Running   0          118m
metallb-system         pod/speaker-b2vwp                                1/1     Running   2          19h
metallb-system         pod/speaker-zrbzc                                1/1     Running   4          20h
root@k8s01:~# 

ServiceのところでLoadBalancerのEXTERNAL-IPが192.168.11.200 になっているので、こいつにhttpsでアクセスすればダッシュボードに接続できる。

创建服务账号

ダッシュボードログイン用サービスアカウントを作る。
まずは下記の内容のyamlファイルを作る。

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

使用kubectl进行创建。

root@k8s01:~# kubectl create -f service-account.yaml 

登录

使用以下代码片段即可获取之前创建的admin-user的令牌。

root@k8s01:~# kubectl -n kube-system get secret $(kubectl get serviceaccount -n kube-system admin-user -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode

ブラウザからダッシュボード画面にアクセスすると下記のようなログイン画面がでるのでトークントークンを入力して「サインイン」する。

login.png

如果一切顺利的话,将会出现像下面这样的界面。

k82-dashboard.png

剩余问题

如果不更新dashboard的SSL证书,使用Chrome会被阻止。
SSL证书的更新步骤以后再说。

参考了下面这篇文章后,我成功更新了证书。非常感激。

文章链接:https://qiita.com/esaka/items/19dbd4a0014dcbd1c130

广告
将在 10 秒后关闭
bannerAds