关于在树莓派上安装Kubernetes仪表板的故事
这是截至2019年9月22日的情况。
前一次我在Raspberry Pi上构建了Kubernetes,但正因为这样,我想要一个Dashboard,所以我只是写了一个简单的文章。虽然需要进行一些微小的修正,但总算成功安装了。
建造步骤
环境
保留最终顺利解决的环境信息。
版本很重要。在这个社会上,关于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
ブラウザからダッシュボード画面にアクセスすると下記のようなログイン画面がでるのでトークントークンを入力して「サインイン」する。
如果一切顺利的话,将会出现像下面这样的界面。
剩余问题
如果不更新dashboard的SSL证书,使用Chrome会被阻止。
SSL证书的更新步骤以后再说。
参考了下面这篇文章后,我成功更新了证书。非常感激。
文章链接:https://qiita.com/esaka/items/19dbd4a0014dcbd1c130