微服务架构师封神之路04-在minikube上安装dashboard并使用固定的端口
kubernetes中已经集成了dashboard
- Dashboard是kubernetes addon。
- 什么是kubernetes addon?Addons是利用kubernetes的资源(DaemonSet, Deployment, 等等)实现的,在整个集群层面的上功能(cluster feature)。
- Dashboard,是web-based UI for kubernetes cluster,用来管理集群和运行在集群上面的应用,或者用来分析应用的问题。
- Dashboard已经集成在minikube中,但默认是disabled的
Enable dashboard in minikube
查看minikube中所有addons
当你刚刚安装完minikube的时候查看所有的addons,
$ minikube addons list
|-----------------------------|----------|--------------|
| ADDON NAME | PROFILE | STATUS |
|-----------------------------|----------|--------------|
| ambassador | minikube | disabled |
| dashboard | minikube | disabled |
| default-storageclass | minikube | enabled ✅ |
| efk | minikube | disabled |
| freshpod | minikube | disabled |
| gvisor | minikube | disabled |
| helm-tiller | minikube | disabled |
| ingress | minikube | disabled |
| ingress-dns | minikube | disabled |
| istio | minikube | disabled |
| istio-provisioner | minikube | disabled |
| logviewer | minikube | disabled |
| metallb | minikube | disabled |
| metrics-server | minikube | disabled |
| nvidia-driver-installer | minikube | disabled |
| nvidia-gpu-device-plugin | minikube | disabled |
| olm | minikube | disabled |
| registry | minikube | disabled |
| registry-aliases | minikube | disabled |
| registry-creds | minikube | disabled |
| storage-provisioner | minikube | enabled ✅ |
| storage-provisioner-gluster | minikube | disabled |
|-----------------------------|----------|--------------|
Enable an addon
Enable dashboard
$ minikube addons enable dashboard
可以再运行一下,
$ minikube addons list
检查一下结果。
为Dashboard分配一个固定的端口
在kubernetes文档上一般做法是运行命令,
$ minikube dashboard
minikube会把dashboard映射到一个本地端口上。每次这样做有点麻烦。下面我们为dashboard的pods创建一个service,我们以后可以通过这个service来访问dashboard,每次就可以使用minikube的ip address和这个service的端口来访问dashboard。
Dashboard pod信息
先查看dashboard的pod信息,
$ kubectl describe pod kubernetes-dashboard-696dbcc666-v76hd --namespace kubernetes-dashboard
Name: kubernetes-dashboard-696dbcc666-v76hd
Namespace: kubernetes-dashboard
Priority: 0
Node: minikube/192.168.64.4
Start Time: Sun, 14 Jun 2020 21:54:25 +0800
Labels: k8s-app=kubernetes-dashboard
pod-template-hash=696dbcc666
Annotations: <none>
Status: Running
IP: 172.17.0.5
IPs:
IP: 172.17.0.5
Controlled By: ReplicaSet/kubernetes-dashboard-696dbcc666
Containers:
kubernetes-dashboard:
Container ID: docker://9284ee7c0893821185cc669c42e5175a5e2517ceb7e17857394ac30d267ce635
Image: kubernetesui/dashboard:v2.0.0
Image ID: docker-pullable://kubernetesui/dashboard@sha256:06868692fb9a7f2ede1a06de1b7b32afabc40ec739c1181d83b5ed3eb147ec6e
Port: 9090/TCP
Host Port: 0/TCP
Args:
--namespace=kubernetes-dashboard
--enable-skip-login
--disable-settings-authorizer
State: Running
Started: Sun, 14 Jun 2020 21:54:26 +0800
Ready: True
Restart Count: 0
Liveness: http-get http://:9090/ delay=30s timeout=30s period=10s #success=1 #failure=3
Environment: <none>
Mounts:
/tmp from tmp-volume (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kubernetes-dashboard-token-pmfq9 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
tmp-volume:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
kubernetes-dashboard-token-pmfq9:
Type: Secret (a volume populated by a Secret)
SecretName: kubernetes-dashboard-token-pmfq9
Optional: false
QoS Class: BestEffort
Node-Selectors: beta.kubernetes.io/os=linux
Tolerations: node-role.kubernetes.io/master:NoSchedule
node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned kubernetes-dashboard/kubernetes-dashboard-696dbcc666-v76hd to minikube
Normal Pulled 12m kubelet, minikube Container image "kubernetesui/dashboard:v2.0.0" already present on machine
Normal Created 12m kubelet, minikube Created container kubernetes-dashboard
Normal Started 12m kubelet, minikube Started container kubernetes-dashboard
这其中有两个信息非常重要,在创建service的时候我要使用到,
- Labels: k8s-app=kubernetes-dashboard
- Port: 9090/TCP
将service信息保存在yaml文件中
把要创建的service所有的信息放进一个yaml文件中,kubernetes-dashboard-nodeport-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: kubernetes-dashboard-nodeport-svc
namespace: kubernetes-dashboard
labels:
addonmanager.kubernetes.io/mode: Reconcile
k8s-app: kubernetes-dashboard
kubernetes.io/minikube-addons: dashboard
spec:
selector:
k8s-app: kubernetes-dashboard
type: NodePort
ports:
- protocol: TCP
port: 9090
targetPort: 9090
nodePort: 30000
注意以下三点,
- selector
- targetPort
- type。因为我们需要固定端口,必须 type: NodePort。
- name,不能和原本自带的service重名,每次minikube启动都会重新加载这个service,它又会变成原本的设置。
使用yaml文件创建service
$ kubectl apply -f kubernetes-dashboard-nodeport-svc.yaml
service/kubernetes-dashboard-nodeport-svc configured
dashboad原本自带的service是ClusterIP类型,只能从kubernetes内部访问。新的service kubernetes-dashboard-nodeport-svc,是
通过service访问dashboard
$ minikube service kubernetes-dashboard-b5wang --namespace=kubernetes-dashboard
|----------------------|-----------------------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|----------------------|-----------------------------|-------------|---------------------------|
| kubernetes-dashboard | kubernetes-dashboard-b5wang | 9090 | http://192.168.64.6:30000 |
|----------------------|-----------------------------|-------------|---------------------------|