k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

一、k8s的UI訪問界面-dashboard

在dashboard中,雖然可以做到創建、刪除、修改資源等操作,但通常情況下,我們會把它當做健康k8s集羣的軟件。

作爲Kubernetes的Web用戶界面,用戶可以通過Dashboard在Kubernetes集羣中部署容器化的應用,對應用進行問題處理和管理,並對集羣本身進行管理。通過Dashboard,用戶可以查看集羣中應用的運行情況,同時也能夠基於Dashboard創建或修改部署、任務、服務等Kubernetes的資源。通過部署嚮導,用戶能夠對部署進行擴縮容,進行滾動更新、重啓Pod和部署新應用。當然,通過Dashboard也能夠查看Kubernetes資源的狀態。

1、Dashboard提供的功能

在默認情況下,Dashboard顯示默認(default)命名空間下的對象,也可以通過命名空間選擇器選擇其他的命名空間。在Dashboard用戶界面中能夠顯示集羣大部分的對象類型。

1)集羣管理

集羣管理視圖用於對節點、命名空間、持久化存儲卷、角色和存儲類進行管理。 節點視圖顯示CPU和內存的使用情況,以及此節點的創建時間和運行狀態。 命名空間視圖會顯示集羣中存在哪些命名空間,以及這些命名空間的運行狀態。角色視圖以列表形式展示集羣中存在哪些角色,這些角色的類型和所在的命名空間。 持久化存儲卷以列表的方式進行展示,可以看到每一個持久化存儲卷的存儲總量、訪問模式、使用狀態等信息;管理員也能夠刪除和編輯持久化存儲卷的YAML文件。

2) 工作負載

工作負載視圖顯示部署、副本集、有狀態副本集等所有的工作負載類型。在此視圖中,各種工作負載會按照各自的類型進行組織。 工作負載的詳細信息視圖能夠顯示應用的詳細信息和狀態信息,以及對象之間的關係。

3) 服務發現和負載均衡

服務發現視圖能夠將集羣內容的服務暴露給集羣外的應用,集羣內外的應用可以通過暴露的服務調用應用,外部的應用使用外部的端點,內部的應用使用內部端點

4) 存儲

存儲視圖顯示被應用用來存儲數據的持久化存儲卷申明資源。

5) 配置

配置視圖顯示集羣中應用運行時所使用配置信息,Kubernetes提供了配置字典(ConfigMaps)和祕密字典(Secrets),通過配置視圖,能夠編輯和管理配置對象,以及查看隱藏的敏感信息。

6) 日誌視圖

Pod列表和詳細信息頁面提供了查看日誌視圖的鏈接,通過日誌視圖不但能夠查看Pod的日誌信息,也能夠查看Pod容器的日誌信息。通過Dashboard能夠根據嚮導創建和部署一個容器化的應用,當然也可以通過手工的方式輸入指定應用信息,或者通過上傳YAML和JSON文件來創建和不受應用。

2、下載所需yaml文件和鏡像

[root@master https]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml
[root@master https]# docker pull kubernetesui/dashboard:v2.0.0-rc5

3、修改 recommended.yaml

[root@master https]#vim recommended.yaml 
---
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort            #添加40
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

執行一下

[root@master https]# kubectl apply -f recommended.yaml

查看一下

[root@master https]# kubectl get svc -n kubernetes-dashboard 

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

3、瀏覽器訪問https://192.168.1.21:32306

PS:如果是使用的舊版本的dashboard, 使用Google瀏覽器登錄,可能是不成功的,需要換成其他的瀏覽器,比如:火狐。

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

4、基於token的方法登錄dashboard

<1>創建一個dashboard的管理用戶

[root@master https]# kubectl create serviceaccount dashboard-admin -n kube-system

<2>綁定用戶爲集羣管理用戶

[root@master https]# kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

<3>獲取Token

[root@master https]# kubectl get secrets -n kube-system | grep dashboard-admin
//先得到Token的名稱

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

[root@master https]# kubectl describe secrets -n kube-system  dashboard-admin-token-62bh9
//查看上述得到的secret資源的詳細信息,會得到token

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

<4>在瀏覽器上使用token登錄。

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

創建一個資源

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

查看是否創建成功

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

5、基於kubeconfig配置文件的方法登錄dashboard

<1>獲取Token

[root@master https]# kubectl get secrets -n kube-system | grep dashboard-admin
//先得到Token的名稱

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

[root@master https]# kubectl describe secrets -n kube-system  dashboard-admin-token-62bh9
//查看上述得到的secret資源的詳細信息,會得到token

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

<2>生成kubeconfig配置文件。

設置一個環境變量代表獲取的token

[root@master https]# DASH_TOKEN=$(kubectl get secrets -n kube-system dashboard-admin-token-62bh9  -o jsonpath={.data.token} | base64 -d)

將k8s集羣的配置信息寫入kubeconfig配置文件中。

[root@master https]# kubectl config set-cluster kubernetes --server=192.168.1.21:6443 --kubeconfig=/root/.dashboard-admin.conf
[root@master https]# kubectl config set-credentials dashboard-admin --token=$DASH_TOKEN --kubeconfig=/root/.dashboard-admin.conf 
[root@master https]# kubectl config set-context dashboard-admin@kubernetes --cluster=kubernetes --user=dashboard-admin --kubeconfig=/root/.dashboard-admin.conf
[root@master https]# kubectl config use-context dashboard-admin@kubernetes --kubeconfig=/root/.dashboard-admin.conf

<3>將生成的/root/.dashboard-admin.conf的配置文件,導出並做保存。

[root@master https]# sz /root/.dashboard-admin.conf 
//導出到自己習慣的位置即可

<4>從瀏覽器選擇kubeconfig的登錄方式,然後導入配置文件即可。

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

二、部署weave-scope監控k8s集羣

Weave Scope 是 Docker 和 Kubernetes 可視化監控工具。Scope 提供了至上而下的集羣基礎設施和應用的完整視圖,用戶可以輕鬆對分佈式的容器化應用進行實時監控和問題診斷。

使用scope

  • Scope 會自動構建應用和集羣的邏輯拓撲。比如點擊頂部 PODS,會顯示所有 Pod 以及 Pod 之間的依賴關係。
  • 點擊 HOSTS,會顯示各個節點之間的關係。

    實時資源監控

  • 可以在 Scope 中查看資源的 CPU 和內存使用情況。
  • 支持的資源有 Host、Pod 和 Container。**

    在線操作

  • Scope 還提供了便捷的在線操作功能,比如選中某個 Host,點擊 >_ 按鈕可以直接在瀏覽器中打開節點的命令行終端
  • 點擊 Deployment 的 + 可以執行 Scale Up 操作
  • 可以查看 Pod 的日誌
  • 可以 attach、restart、stop 容器,以及直接在 Scope 中排查問題

    強大的搜索功能

  • Scope 支持關鍵字搜索和定位資源。
  • 還可以進行條件搜索,比如查找和定位 MEMORY > 100M 的 Pod。

1、在github上查找scope的yaml文件

(1)github上搜索scope

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

(2)進入k8s的部署scope的說明

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

(3)選擇k8s的部署

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

(4)複製上面的鏈接,並下載yaml文件

[root@master https]# wget https://cloud.weave.works/k8s/scope.yaml

2、修改下載的yaml文件並運行

[root@master ~]# vim scope.yaml  #編輯yaml文件
#跳轉至213行,修改其service的端口類型
    spec:
      type: NodePort         #修改類型爲NodePort
      ports:
        - name: app
          port: 80
          protocol: TCP
          targetPort: 4040

(1)執行一下

[root@master https]# kubectl apply -f scope.yaml 

(2)查看容器的運行情況,確定處於正常運行

[root@master https]# kubectl get  pod -o wide -n weave

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

  • DaemonSet weave-scope-agent,集羣每個節點上都會運行的 scope agent 程序,負責收集數據。
  • Deployment weave-scope-app,scope 應用,從 agent 獲取數據,通過 Web UI 展示並與用戶交互。
  • Service weave-scope-app,默認是 ClusterIP 類型,我們已經在上面的命令中添加了參數k8s-service-type=NodePort修改爲 NodePort。
[root@master https]# kubectl get svc -n weave 

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

#DaemonSet資源對象:weave-scope-agent(代理):負責收集節點的信息;
#deployment資源對象:weave-scope-app(應用):從agent獲取數據,通過web UI展示並與用戶交互;
#DaemonSet資源對象的特性和deployment相比,就是DaemonSet資源對象會在每個節點上都運行且只能運行一個pod。
#由於每個節點都需要監控,所以用到了DaemonSet這種資源對象

3、瀏覽器訪問一下http://192.168.1.21:31841/

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

在scope的web界面中,可以查看很多的東西,pod、node節點等詳細信息,包括打開容器的終端,查看其日誌信息等等

總結

weave scope可以以其簡潔的可視化爲我們更生動形象的展現出service/controller/pod等資源對象的管理及簡單的web ui操作,方便故障排除及時定位
weave scope作爲web ui目前缺少登錄驗證,可以利用其他方式裏面web服務器的驗證做安全管控。

三、部署Prometheus服務

PS:在這裏部署的prometheus,並不是Prometheus官網提供的,而是使用的coreos提供的prometheus項目。
k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

在部署之前,先來了解一下Prometheus各個組件的作用吧!

  • MetricsServer: 是k8s集羣資源使用情況的聚合器,收集數據給k8s集羣內使用,如kubectl,hpa,scheduler等。
  • Prometheus Operator : 是一個系統檢測和警報工具箱,用來存儲監控數據。
  • Prometheus node-exporter :收集k8s集羣資源的數據,指定告警規則。
  • Prometheus :收集apiserver,scheduler,controller-manager,kubelet組件的數據,通過http協議傳輸。
  • Grafana: 可視化數據統計和監控平臺。

特徵

Prometheus 相比於其他傳統監控工具主要有以下幾個特點:

  • 具有由 metric 名稱和鍵/值對標識的時間序列數據的多維數據模型
  • 有一個靈活的查詢語言
  • 不依賴分佈式存儲,只和本地磁盤有關
  • 通過 HTTP 的服務拉取時間序列數據
  • 也支持推送的方式來添加時間序列數據
  • 還支持通過服務發現或靜態配置發現目標
  • 多種圖形和儀表板支持

1、在github上搜索coreos/prometheus

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

複製鏈接

2、克隆github上的promethes項目

[root@master promethes]# yum -y install git
//下載git命令
[root@master promethes]# git clone  https://github.com/coreos/kube-prometheus.git
//克隆github上的項目

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

3、修改grafapa-service.yaml文件, 更改爲nodePort的暴露方式,暴露端口爲31001.。

[root@master promethes]# cd kube-prometheus/manifests/
//進入kube-prometheus的manifests目錄
[root@master manifests]# vim grafana-service.yaml    #修改grafana的yaml文件

apiVersion: v1
kind: Service
metadata:
  labels:
    app: grafana
  name: grafana
  namespace: monitoring
spec:
  type: NodePort       #改爲NodePort類型
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 31001    #映射到宿主機31001端口
  selector:
    app: grafana

3.修改prometheus-service.yaml文件, 更改爲nodePort的暴露方式,暴露端口爲31002.

[root@master manifests]# vim prometheus-service.yaml    #修改prometheus的yaml文件

apiVersion: v1
kind: Service
metadata:
  labels:
    prometheus: k8s
  name: prometheus-k8s
  namespace: monitoring
spec:
  type: NodePort      #改爲NodePort類型
  ports:
  - name: web
    port: 9090
    targetPort: web
    nodePort: 31002    #映射到宿主機31002端口
  selector:
    app: prometheus
    prometheus: k8s
  sessionAffinity: ClientIP

4、修改alertmanager-service.yaml文件, 更改爲nodePort的暴露方式,暴露端口爲31003

[root@master manifests]# vim alertmanager-service.yaml    #修改alertmanager的yaml文件

apiVersion: v1
kind: Service
metadata:
  labels:
    alertmanager: main
  name: alertmanager-main
  namespace: monitoring
spec:
  type: NodePort             #改爲NodePort類型
  ports:
  - name: web
    port: 9093
    targetPort: web
    nodePort: 31003         #映射到宿主機31003端口
  selector:
    alertmanager: main
    app: alertmanager
  sessionAffinity: ClientIP

5、將setup目錄中所有的yaml文件,全部運行。是運行以上yaml文件的基礎環境配置。

[root@master manifests]# cd setup/
//進入setup/目錄
[root@master manifests]# kubectl apply -f setup/
//運行setup目錄中所有的yaml文件

6、將主目錄(kube-prometheus)中所有的yaml文件,全部運行。

當執行以下yaml文件時,每個節點會在互聯網上下載很多鏡像,爲了防止下載鏡像的時間過長,可以先將我提供的鏡像下載到本地,然後導入至各個節點,然後在執行下面的yaml文件,將會省些時間。(如果下載我提供的鏡像,建議寫個導入鏡像的腳本進行導入操作,避免手動導入,造成錯誤)

[root@master manifests]# cd ..
//返回上一級目錄(kube-prometheus)
[root@master kube-prometheus]# kubectl apply -f manifests/
//運行kube-prometheus目錄中所有的yaml文件

查看一下

[root@master ~]# kubectl get pod -n monitoring

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

7、瀏覽器訪問一下http://192.168.1.21:31001

客戶端訪問羣集中任意節點的IP+30100端口,即可看到以下界面(默認用戶名和密碼都是admin)

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

根據提示更改密碼:

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

(1)添加模板

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

依次點擊“import”進行導入下面三個模板:

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

(2)進行以下點擊,即可查看羣集內的監控狀態

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

以下可看到監控狀態

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

k8s羣集的三種的Web-UI界面部署(dashboard、scope、Prometheus)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章