kubernetes容器集羣管理(6)- Dashboard&&Metrics Server部署

目錄

一、部署dashboard

1、部署

2、執行,查看pod情況

3、創建dashboard管理員

4、給管理員授權

5、獲取token頁面登陸

二、部署Metrics Server

1、部署heapster

2、配置metrics service

3、添加metrics-server證書


一、部署dashboard

1.10.1版本  不支持1.15以上k8s,ui頁面出現404跳轉
2.0.0-rc5   部署後無法發現pod,嘗試本地鏡像無作用,後發現是配置新增runasroot等
2.0.0-beat4版本  暫時正常,兼容性日後確認 

今天發現ui頁面打不開了,重裝了一遍還是不行,最後確認時因爲開個全局代理--#

#github地址
https://github.com/kubernetes/dashboard/releases

1、部署

[root@manage01 dashboard]# cd /opt/kubernetes/dashboard
[root@manage01 dashboard]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
[root@manage01 dashboard]# mv recommended.yaml  k8s-dashboard.yaml
[root@manage01 dashboard]# vim ..../dashboard/kubernetes-dashboard.yaml
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      noePort: 30000
  selector:
    k8s-app: kubernetes-dashboard

2、執行,查看pod情況

[root@manage01 dashboard]# kubectl apply -f k8s-dashboard.yaml
[root@manage01 dashboard]# kubectl get pod --all-namespaces
kubernetes-dashboard   dashboard-metrics-scraper-566cddb686-zlfrk   1/1     Running       0          2m38s
kubernetes-dashboard   kubernetes-dashboard-7b5bf5d559-bbsdj        1/1     Running       0          2m44s
[root@manage01 dashboard]# kubectl get all --all-namespaces

3、創建dashboard管理員

[root@manage01 dashboard]# cat dashboard-admin.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: dashboard-admin
  namespace: kubernetes-dashboard
[root@manage01 dashboard]# kubectl create -f dashboard-admin.yaml
[root@manage01 dashboard]# kubectl describe sa dashboard-admin -n kubernetes-dashboard

4、給管理員授權

[root@manage01 dashboard]# cat dashboard-admin-bind-cluster-role.yaml 
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin-bind-cluster-role
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: dashboard-admin
  namespace: kubernetes-dashboard
[root@manage01 dashboard]# kubectl create -f dashboard-admin-bind-cluster-role.yaml 
kubectl describe  clusterrolebinding dashboard-admin

5、獲取token頁面登陸

[root@manage01 dashboard]# kubectl describe secret -n kubernetes-dashboard $(kubectl get secrets -n kubernetes-dashboard | awk '/dashboard-admin/{print $1}' )

#此時firefox瀏覽器訪問正常,至於Google瀏覽器證書過期問題懶得搞了
https://<NodeIP>:30000

二、部署Metrics Server

目前訪問頁面左側菜單欄Overview-pods列表
上面Dashboard的CPU Usage (cores)和Memory Usage (bytes)列是空的,這是因爲Kubernetes的早期版本依靠Heapster來實現完整的性能數據採集和監控功能,Kubernetes從1.8版本開始,性能數據開始以Metrics API的方式提供標準化接口,並且從1.10版本開始將Heapster替換爲Metrics Server。說白了,想要頁面完善還需要部署metrics server服務。

1、部署heapster

heapster
此模塊,在1.8版本以後由metricserver替代,如果想部署試試可參考

wget https://github.com/kubernetes/heapster/archive/v1.5.4.tar.gz
tar -zxf v1.5.4.tar.gz
cd heapster-1.5.4/
kubectl create -f deploy/kube-config/rbac/heapster-rbac.yaml ##授權
kubectl create -f deploy/kube-config/standalone/heapster-controller.yaml

2、配置metrics service

因爲默認metrics service的鏡像地址需要科學上網才能拉取,所以在創建之前,我們在node1和node2節點先準備好鏡像,或者直接使用國內源也行。##docker pull bluersw/metrics-server-amd64:v0.3.6##
克隆Metrics Server GitHub倉庫:
[root@manage01 dashboard]# yum install git -y
[root@manage01 dashboard]# git clone https://github.com/kubernetes-sigs/metrics-server.git
[root@manage01 dashboard]# vim metrics-server/deploy/kubernetes/metrics-server-deployment.yaml 

[root@manage01 kubernetes]# cat metrics-server-deployment.yaml 
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
##########換成國內鏡像可下載,或者node節點提前pull##########
        image: htcfive/metrics-server-amd64:v0.3.6
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
        ports:
        - name: main-port
          containerPort: 4443
          protocol: TCP
        securityContext:
          readOnlyRootFilesystem: true
##########修改爲false,註釋掉runasuser,否則啓動pod報錯##########
          runAsNonRoot: false
#          runAsUser: 1000
##########鏡像下載方式如下,command參數添加##########
        imagePullPolicy: IfNotPresent
        command:
          - /metrics-server
          - --metric-resolution=30s 
          - --kubelet-insecure-tls 
          - --kubelet-preferred-address-types=InternalIP
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp
      nodeSelector:
        beta.kubernetes.io/os: linux
        kubernetes.io/arch: "amd64"

3、添加metrics-server證書

此時部署完metrics-server後,執行kubectl top node,出現報錯:

Error from server (Forbidden): nodes.metrics.k8s.io is forbidden: 
User "system:anonymous" cannot list nodes.metrics.k8s.io at the cluster scope.
報錯原因: apiserver權限的問題
解決方法: 在master節點創建metrics-server證書,並在kube-apiserver配置

3.1、metrics-server生成證書

生成證書:
cat > metrics-server-csr.json <<EOF
{
  "CN": "aggregator",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "4Paradigm"
    }
  ]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes metrics-server-csr.json | cfssljson -bare metrics-server

3.2、kube-apiserver增加配置

        [root@manage01 ssl]# cat  /opt/kubernetes/cfg/kube-apiserver
        --requestheader-allowed-names=aggregator \
        --requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \
        --requestheader-extra-headers-prefix=X-Remote-Extra- \
        --requestheader-group-headers=X-Remote-Group \
        --requestheader-username-headers=X-Remote-User \
        --proxy-client-cert-file=/opt/kubernetes/ssl/metrics-server.pem \
        --proxy-client-key-file=/opt/kubernetes/ssl/metrics-server-key.pem \
        --enable-aggregator-routing=true \
--advertise-address:apiserver 對外通告的 IP(kubernetes 服務後端節點 IP); 
--default--toleration-seconds:設置節點異常相關的閾值; 
--max--requests-inflight:請求相關的最大閾值; 
--etcd-:訪問 etcd 的證書和 etcd 服務器地址; 
--experimental-encryption-provider-config:指定用於加密 etcd 中 secret 的配置; 
--bind-address: https 監聽的 IP,不能爲 127.0.0.1,否則外界不能訪問它的安全端口 6443; 
--secret-port:https 監聽端口; 
--insecure-port=0:關閉監聽 http 非安全端口(8080); 
--tls--file:指定 apiserver 使用的證書、私鑰和 CA 文件; 
--audit-:配置審計策略和審計日誌文件相關的參數; 
--client-ca-file:驗證 client (kue-controller-manager、kube-scheduler、kubelet、kube-proxy 等)請求所帶的證書; 
--enable-bootstrap-token-auth:啓用 kubelet bootstrap 的 token 認證; 
--requestheader-:kube-apiserver 的 aggregator layer 相關的配置參數,proxy-client & HPA 需要使用; 
--requestheader-client-ca-file:用於簽名 --proxy-client-cert-file 和 --proxy-client-key-file 指定的證書;在啓用了 metric aggregator 時使用; 
--requestheader-allowed-names:不能爲空,值爲逗號分割的 --proxy-client-cert-file 證書的 CN 名稱,這裏設置爲 "aggregator"; 
--service-account-key-file:簽名 ServiceAccount Token 的公鑰文件,kube-controller-manager 的 --service-account-private-key-file 指定私鑰文件,兩者配對使用; 
--runtime-config=api/all=true: 啓用所有版本的 APIs,如 autoscaling/v2alpha1; 
--authorization-mode=Node,RBAC、--anonymous-auth=false: 開啓 Node 和 RBAC 授權模式,拒絕未授權的請求; 
--enable-admission-plugins:啓用一些默認關閉的 plugins; 
--allow-privileged:運行執行 privileged 權限的容器; 
--apiserver-count=3:指定 apiserver 實例的數量; 
--event-ttl:指定 events 的保存時間; 
--kubelet-:如果指定,則使用 https 訪問 kubelet APIs;需要爲證書對應的用戶(上面 kubernetes.pem 證書的用戶爲 kubernetes) 用戶定義 RBAC 規則,否則訪問 kubelet API 時提示未授權; 
--proxy-client-*:apiserver 訪問 metrics-server 使用的證書; 
--service-cluster-ip-range: 指定 Service Cluster IP 地址段; 
--service-node-port-range: 指定 NodePort 的端口範圍; 
kube-apiserver 的 --requestheader-allowed-names 參數需要與metric證書CN字段一致,否則後續訪問 metrics 時會提示權限不足。 
如果 kube-apiserver 機器沒有運行 kube-proxy,則還需要添加 --enable-aggregator-routing=true 參數

3.3、kube-controller-manager配置

kube-controller-manager增加如下參數
--horizontal-pod-autoscaler-use-rest-clients=true

3.4、安裝部署驗證

稍等片刻,然後執行kubectl top nodes便可以看到每個節點的CPU和內存使用率了:

kubectl create -f metrics-server/deploy/kubernetes/

[root@manage01 ssl]# kubectl top nodes
NAME              CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
192.168.192.129   77m          3%     531Mi           30%       
192.168.192.130   56m          2%     287Mi           16%  

 

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