系列链接

Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo

Kubernetes系列之二:将Slave节点加入集群

Kubernetes系列之三:部署你的第一个应用程序到k8s集群

Kubernetes系列之四:使用yaml文件创建deployment来部署一个应用程序到k8s集群

Kubernetes系列之五:使用yaml文件创建service向外暴露服务

Kubernetes系列之六:安装k8s通用的Web UI(Dashboard)

Kubernetes系列之N:使用K8s遇到的问题

安装k8s通用的Web UI(Dashboard)

这篇文章我们打算安装k8s官方的UI界面,这个界面能显示所有的工作负载(workload),包括运行的Nodes,Services,Pods,Jobs,Relica sets等k8s资源。

首先你需要连接VPN,不然的话,运行接下来的 kubectl create命令后,你会发现新建的pod会报ImagePullBackOff的错误。

kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

这里是我踩过的坑,如下:

root@kube-master:/home/cong# kubectl describe pods/kubernetes-dashboard-6948bdb78-w9452 --namespace=kube-system
Name:               kubernetes-dashboard-6948bdb78-w9452
Namespace:          kube-system
Priority:           0
PriorityClassName:  <none>
Node:               kube-master/192.168.29.138
Start Time:         Mon, 20 Aug 2018 05:25:50 -0700
Labels:             k8s-app=kubernetes-dashboard
                    pod-template-hash=250468634
Annotations:        cni.projectcalico.org/podIP=10.244.0.30/32
Status:             Pending
IP:                 10.244.0.30
Controlled By:      ReplicaSet/kubernetes-dashboard-6948bdb78
Containers:
  kubernetes-dashboard:
    Container ID:  
    Image:         k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
    Image ID:      
    Port:          8443/TCP
    Host Port:     0/TCP
    Args:
      --auto-generate-certificates
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Liveness:       http-get https://:8443/ delay=30s timeout=30s period=10s #success=1 #failure=3
    Environment:    <none>
    Mounts:
      /certs from kubernetes-dashboard-certs (rw)
      /tmp from tmp-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kubernetes-dashboard-token-5t4vr (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  kubernetes-dashboard-certs:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  kubernetes-dashboard-certs
    Optional:    false
  tmp-volume:
    Type:    EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:  
  kubernetes-dashboard-token-5t4vr:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  kubernetes-dashboard-token-5t4vr
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
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
  ----     ------   ----                 ----                  -------
  Warning  Failed   37m (x94 over 20h)   kubelet, kube-master  Error: ErrImagePull
  Normal   BackOff  2m (x2100 over 20h)  kubelet, kube-master  Back-off pulling image "k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3"   # 这里可以看出来镜像拉取不下来

 在发现这个问题前,我怀疑是不是我执行kubectl create命令有问题,所以之后,把创建的service给删掉了,然后我又发现这条创建命令不仅仅只创建一个service那么简单,这样一下子就乱掉了。然后机智我的发现K8s中所有的配置都是通过API对象的spec去设置的,也就是用户通过配置系统的理想状态来改变系统,这是k8s重要设计理念之一,即所有的操作都是声明式(Declarative)的而不是命令式(Imperative)的。

所以,接下执行了apply 命令

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

然后运行命令

kubectl proxy

访问 http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ ,然后你会看到这样的一个界面(来源其他网站,因为我配过token 后看不到此界面了)

Kubernetes Dashboard Authentication

 创建一个cluster-admin角色的service account , 和一个clusterrolebinding, 以便访问所有的k8s资源

kubectl create serviceaccount cluster-admin-dashboard-sa

kubectl create clusterrolebinding cluster-admin-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-dashboard-sa

Copy产生的Token,并使用此Token登录到dashboard中

root@kube-master:/home/cong# kubectl get secret | grep cluster-admin-dashboard-sa
cluster-admin-dashboard-sa-token-6thzn   kubernetes.io/service-account-token   3         2m

root@kube-master:/home/cong# kubectl describe secrets/cluster-admin-dashboard-sa-token-6thzn
Name:         cluster-admin-dashboard-sa-token-6thzn
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=cluster-admin-dashboard-sa
              kubernetes.io/service-account.uid=4948b3f7-a524-11e8-8b23-000c29dbad4f

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImNsdXN0ZXItYWRtaW4tZGFzaGJvYXJkLXNhLXRva2VuLTZ0aHpuIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImNsdXN0ZXItYWRtaW4tZGFzaGJvYXJkLXNhIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNDk0OGIzZjctYTUyNC0xMWU4LThiMjMtMDAwYzI5ZGJhZDRmIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6Y2x1c3Rlci1hZG1pbi1kYXNoYm9hcmQtc2EifQ.OTweFHvblKXdX4AOwYydfvZojsdPKDXHFfXvy9YPjdX47x0aSNFEq93l-MnLmt2o55QpKM-ipXxyXojbMvrZYNoaID3JVJWBumg_U9ORq3sSZbI0x_0rNQAWDbsJNwfj73sWs47hSaLINJD7cT3BaFEqvi8F46kb2Cm7RdEyz_-4mKQk4Urhg9Xq7zWZ8UEQihp2XRREaMc15m4H2r8XhTGN_Xv_KFmh_sZy27XktzYxFEh03lIS-pZYzd98o2RLT2oJjup6mtVqzDGJ-jZKuF4g4tEpvLgEFXuPp2mwKDfgGAbewUBb-AjXkimoCltE_WrL_wz-KqqfzzpvjhVjKw

root@kube-master:/home/cong# kubectl proxy
Starting to serve on 127.0.0.1:8001

 好了,终于看到界面了。。。

延伸阅读:

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

https://docs.giantswarm.io/guides/install-kubernetes-dashboard/#

https://github.com/kubernetes/dashboard

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐