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%  

 

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