K8S使用dashboard管理集群
今年3月份在公司的内部k8s培训会上,开发同事表示使用dashboard的可以满足日常开发需求,例如查看pod的日志,执行exec指令,查看pod的运行状态等,但对basic认证的权限控制表示担忧。
之前介绍过在1.5.2版本上部署dashboard服务,在1.9.1版本离线部署中,也介绍过dashboard服务的RBAC配置和使用技巧。因此本文将在前文基础上完善Heapster的整合与利用token对用户权限进行控制。
dashboard的特点主要如下:
1、能够直观的看到rc、deployment、pod、services等k8s组件的运行情况和日志信息。
2、结合heapster和influxdb后,dashboard的监控图表上可以看到pod的cpu和内存消耗情况。
Heapster介绍
1、Heapster是容器集群监控和性能分析工具,支持Kubernetes和CoreOS。
2、K8S集群的HPA功能的实现就依赖于这些metric数据,HPA将Heapster作为Resource Metrics API,向其获取metric。
3、Kubernetes有个cAdvisor监控(在1.9版本里面,cAdvisor已经和kubelet整合在一起)。
在每个kubernetes Node上都会运行cAdvisor,它会收集本机以及容器的监控数据(cpu,memory,filesystem,network,uptime)。Heapster是一个收集者,Heapster可以收集Node节点上的cAdvisor数据,将每个Node上的cAdvisor的数据进行汇总,还可以按照kubernetes的资源类型来集合资源,比如Pod、Namespace,可以分别获取它们的CPU、内存、网络和磁盘的metric。默认的metric数据聚合时间间隔是1分钟。还可以把数据导入到第三方工具(如InfluxDB)。
Influxdb数据库介绍
2、Influxdb数据库的相关知识介绍,可参考文档:https://www.jianshu.com/p/d2935e99006e
2、如果对Heapster收集到的metric数据没有持久化的需求,可以不配置Influxdb数据库
3、本文Influxdb数据库的存储采用emptydir的方式实现,实际使用过程中,可以选择吧Influxdb数据库部署在k8s集群外部,或者使用其他存储方案。
4、如果有需要的话,还可以集成一个grafana做web展示。Grafana配置可参考文档:http://blog.51cto.com/ylw6006/2084403
一、获取相关镜像
需要科学上网方式获取到dashboard相关的镜像文件,仓库可纳入本地仓库统一管理
# cat /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.115.2:1080"
# systemctl daemon-reload
# systemctl restart docker
# docker pull k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
# docker pull k8s.gcr.io/heapster-influxdb-amd64:v1.3.3
# docker pull k8s.gcr.io/heapster-amd64:v1.4.2
二、准备配置文件
1、k8s-dashborad-sa.yaml文件,secrct和serviceaccount配置
# cat k8s-dashborad-sa.yaml
# ------------------- Dashboard Secret ------------------- #
apiVersion: v1
kind: Secret
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboard-certsnamespace: kube-system
type: Opaque
---
# ------------------- Dashboard Service Account ------------------- #
apiVersion: v1
kind: ServiceAccount
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kube-system
2、k8s-dashborad-rbac.yaml文件,配置 Role和Role Binding
# cat k8s-dashborad-rbac.yaml
# ------------------- Dashboard Role & Role Binding ------------------- #
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: kubernetes-dashboard-minimalnamespace: kube-system
rules:# Allow Dashboard to create 'kubernetes-dashboard-key-holder' secret.
- apiGroups: [""]resources: ["secrets"]verbs: ["create"]# Allow Dashboard to create 'kubernetes-dashboard-settings' config map.
- apiGroups: [""]resources: ["configmaps"]verbs: ["create"]# Allow Dashboard to get, update and delete Dashboard exclusive secrets.
- apiGroups: [""]resources: ["secrets"]resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs"]verbs: ["get", "update", "delete"]# Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
- apiGroups: [""]resources: ["configmaps"]resourceNames: ["kubernetes-dashboard-settings"]verbs: ["get", "update"]# Allow Dashboard to get metrics from heapster.
- apiGroups: [""]resources: ["services"]resourceNames: ["heapster"]verbs: ["proxy"]
- apiGroups: [""]resources: ["services/proxy"]resourceNames: ["heapster", "http:heapster:", "https:heapster:"]verbs: ["get"]---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: kubernetes-dashboard-minimalnamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: kubernetes-dashboard-minimal
subjects:
- kind: ServiceAccountname: kubernetes-dashboardnamespace: kube-system
3、k8s-dashborad-deployment.yaml配置文件,定义创建pod的模板和副本数
# cat k8s-dashborad-deployment.yaml
# ------------------- Dashboard Deployment ------------------- #
kind: Deployment
apiVersion: apps/v1beta2
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kube-system
spec:replicas: 1revisionHistoryLimit: 10selector:matchLabels:k8s-app: kubernetes-dashboardtemplate:metadata:labels:k8s-app: kubernetes-dashboardspec:containers:- name: kubernetes-dashboardimage: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3ports:- containerPort: 8443protocol: TCPargs:- --auto-generate-certificates# Uncomment the following line to manually specify Kubernetes API server Host# If not specified, Dashboard will attempt to auto discover the API server and connect# to it. Uncomment only if the default does not work.# - --apiserver-host=http://my-address:portvolumeMounts:- name: kubernetes-dashboard-certsmountPath: /certs# Create on-disk volume to store exec logs- mountPath: /tmpname: tmp-volumelivenessProbe:httpGet:scheme: HTTPSpath: /port: 8443initialDelaySeconds: 30timeoutSeconds: 30volumes:- name: kubernetes-dashboard-certssecret:secretName: kubernetes-dashboard-certs- name: tmp-volumeemptyDir: {}serviceAccountName: kubernetes-dashboard# Comment the following tolerations if Dashboard must not be deployed on mastertolerations:- key: node-role.kubernetes.io/mastereffect: NoSchedule
4、 k8s-dashborad-service.yaml配置文件,定义service
# cat k8s-dashborad-service.yaml
# ------------------- Dashboard Service ------------------- #
kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kube-system
spec:ports:- port: 443targetPort: 8443nodePort: 8490type: NodePortselector:k8s-app: kubernetes-dashboard
三、通过配置文件创建dashboard
# kubectl create -f .
# kubectl get pod,deployment,svc -n kube-system
四、配置使用basic认证方式
默认情况下只支持kubeconfig和令牌认证
# echo 'admin,admin,1' > /etc/kubernetes/basic_auth_file
# grep 'auth' /usr/lib/systemd/system/kube-apiserver.service --authorization-mode=Node,RBAC \--runtime-config=rbac.authorization.k8s.io/v1alpha1 \--enable-bootstrap-token-auth=true \--token-auth-file=/etc/kubernetes/token.csv \--basic-auth-file=/etc/kubernetes/basic_auth_file \# grep ‘basic’ k8s-dashborad-deployment.yaml (配置在args下面)- --authentication-mode=basic# systemctl daemon-reload
# systemctl restart kube-apiserver
# kubectl apply -f k8s-dashborad-deployment.yaml
将admin用户和cluter-admin role进行角色绑定
# curl --insecure https://vm1:6443 -basic -u admin:admin
# kubectl create clusterrolebinding \
login-on-dashboard-with-cluster-admin \
--clusterrole=cluster-admin --user=admin
# curl --insecure https://vm1:6443 -basic -u admin:admin
五、访问测试
六、整合heapster和influxdb
在没有配置heapster和influxdb的情况下,pod的metric信息是无法获取到的,而早前版本K8S的HPA特性依赖的metric数据来源恰巧就是heapster和influxdb。
1、准备yaml配置文件
# cat heapster-sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: heapsternamespace: kube-system
# cat heapster-rbac.yaml
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: heapster
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:heapster
subjects:
- kind: ServiceAccountname: heapsternamespace: kube-system
# cat heapster-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: heapsternamespace: kube-system
spec:replicas: 1template:metadata:labels:task: monitoringk8s-app: heapsterspec:serviceAccountName: heapstercontainers:- name: heapsterimage: k8s.gcr.io/heapster-amd64:v1.4.2imagePullPolicy: IfNotPresentcommand:- /heapster- --source=kubernetes:https://kubernetes.default- --sink=influxdb:http://monitoring-influxdb.kube-system.svc:8086
# cat heapster-service.yaml
apiVersion: v1
kind: Service
metadata:labels:task: monitoringkubernetes.io/cluster-service: 'true'kubernetes.io/name: Heapstername: heapsternamespace: kube-system
spec:ports:- port: 80targetPort: 8082selector:
k8s-app: heapster
# cat influxdb-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: monitoring-influxdbnamespace: kube-system
spec:replicas: 1template:metadata:labels:task: monitoringk8s-app: influxdbspec:containers:- name: influxdbimage: k8s.gcr.io/heapster-influxdb-amd64:v1.3.3volumeMounts:- mountPath: /dataname: influxdb-storagevolumes:- name: influxdb-storageemptyDir: {}
# cat influxdb-service.yaml
apiVersion: v1
kind: Service
metadata:labels:task: monitoringkubernetes.io/cluster-service: 'true'kubernetes.io/name: monitoring-influxdbname: monitoring-influxdbnamespace: kube-system
spec:ports:- port: 8086targetPort: 8086selector:k8s-app: influxdb
获取heapster中的获取支持的metrics
# kubectl run -i --tty curl --namespace=kube-system \
--image=registry.59iedu.com/webwurst/curl-utils /bin/sh
# curl http://heapster/api/v1/model/metrics
# curl http://heapster/api/v1/model/debug/allkeys
# kubectl get node
# kubectl top node
当heapster和influxdb pod都正常运行的时候,在dashboard里面就可以看到CPU和内存的监控数据了。
七、配置用户权限
1、删除apiserver里面basic认证相关的配置后重启apiserver
--basic-auth-file=/etc/kubernetes/basic_auth_file
# systemctl daemon-reload
# systemctl restart kube-apiserver
2、删除clusterrolebinding
# kubectl delete clusterrolebinding login-on-dashboard-with-cluster-admin
3、修改k8s-dashborad-deployment.yaml文件
去掉- --authentication-mode=basic参数
4、创建普通用户,赋予所有namespace下资源的get、watch和list权限。
这里通过clusterrole和culsterrolebinding赋予所有namespace相关资源的get、watch、list权限,实际应用环境建议使用创建role和rolebinding指定特定的namespace相关资源权限,各资源权限的赋予规则遵循最小权限原则。
# cat rbac-yang.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: role-yang
rules:
- apiGroups: [""]resources: ["*"]verbs: ["get","watch","list" ]
- apiGroups: ["storage.k8s.io"]resources: ["*"]verbs: ["get","watch","list" ]
- apiGroups: ["rbac.authorization.k8s.io"]resources: ["*"]verbs: ["get","watch","list" ]
- apiGroups: ["batch"]resources: ["*"]verbs: ["get","watch","list" ]
- apiGroups: ["apps"]resources: ["*"]verbs: ["get","watch","list" ]
- apiGroups: ["extensions"]resources: ["*"]verbs: ["get","watch","list" ]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: role-bind-yang
subjects:
- kind: ServiceAccountname: yangnamespace: kube-system
roleRef:kind: ClusterRolename: role-yangapiGroup: rbac.authorization.k8s.io
# kubectl create sa yang -n kube-system
# kubectl create -f rbac-yang.yaml
# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep yang | awk '{print $1}')
5、测试普通用户的权限
6、创建super用户admin
# kubectl create sa admin -n kube-system
# cat rbac-admin.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: admin
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: adminnamespace: kube-system# kubectl create -f rbac-admin.yaml
# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin | awk '{print $1}')
使用admin用户的token登陆后继承cluster-admin的权限
参考:
https://github.com/kubernetes/dashboard/wiki/Creating-sample-user
https://github.com/kubernetes/dashboard/wiki/Access-control
https://github.com/kubernetes/heapster/blob/master/docs/model.md
K8S使用dashboard管理集群相关推荐
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- Kubeadm 快速搭建 k8s v1.24.1 集群(openEuler 22.03 LTS)
kubeadm 简介 kubeadm 是 Kubernetes(以下简称 k8s)官方提供的用于快速安装部署 k8s 集群的工具,伴随 k8s 每个版本的发布都会同步更新,kubeadm 会对集群配置 ...
- Kubernetes(k8s)入门及集群部署文档
文章目录 一.k8s 快速入门 简介 部署方式的进化 k8s能做什么 架构 整体主从方式 Master 节点架构 Node 节点架构 概念 快速体验 流程叙述 二.k8s 集群安装 前置要求 了解ku ...
- 基于kubeadm快速部署kubernetes K8S V1.17.4集群-无坑完整版
基于kubeadm快速部署kubernetes K8S V1.17.4集群,并部署Dashboard Web页面,实现可视化查看Kubernetes资源 主机配置规划 服务器名称(hostname) ...
- NoSQL(二):创建、管理集群
创建集群 集群环境 拓扑结构 IP规划 工作原理 工作原理 无论有多少台redis服务器,一共都会有0-16383共16384个槽 slot的作用:用来确定存储变量时,变量存储在哪一台redis服务器 ...
- k8s使用port-forward访问集群中的应用程序(只能在执行命令的机器上开放端口)
k8s使用port-forward访问集群中的应用程序 本文描述了如何使用 kubectl port-forward 访问 Kubernetes 集群中的 Redis Server.这种连接方式在实际 ...
- 管理集群中的 crs 管理员
管理集群中的 crs 管理员 oracle Managing CRS Administrators in the Cluster Use the following commands to ma ...
- # kubeadm ——k8S新节点加入集群-notready 问题解决
kubeadm --k8S新节点加入集群 https://www.cnblogs.com/chuangcc/p/10697394.html 加入集群除了需要 token 外,还需要 Master 节点 ...
- K8s-kubectl远程管理集群
在实际工作中,我们有一个需求,需要远程登陆管理集群.其实不用非要登录k8s-master去敲命令,可以使用任意一台内网互通的机器安装kubectl命令,去远程管理集群,非常方便 1.安装kubectl ...
最新文章
- 程序物语(四):苹果是如何落到牛顿头上的?
- VTK:颜色边缘用法实战
- framework dyld: Symbol not found: _OBJC_CLASS_xxx
- 作为IT从业者,你是如何做好个人职业规划?
- C++ 类模板语法初步01
- 3.13 判读是否是对称素数
- mfa助听器设备能否在android,助听器的蓝牙功能到底有什么用,购买的价格,以及购买时要注意什么等问题...
- 微信小程序开发:禁止输入表情的控制,验证方法,光标控制
- 如何找到最快的DNS服务器!!
- python执行速度太慢为什么还_为什么你写的Python运行的那么慢呢?
- 详解display:inline | block |inline-block的区别(转)
- 地址坐标LA3708:Graveyard
- 多精度数带余除法_算法笔记 (一) 高精度
- 视频加密并上传至oss实现高并发访问
- Multisim小信号调谐放大器电路仿真
- android电视与苹果手机图片,小米电视怎么投屏?图文讲解安卓和苹果手机投屏到小米电视方法...
- 对微信公众号文章爬取进行分析
- python语言程序设计基础上海交通大学_python语言程序设计基础第四章答案
- 智齿客服Android集成流程,智齿客服接入_智齿客服客服系统如何接入网站_智齿客服接入流程_企业服务汇...
- 服务器搭建免流系统,国内服务器搭建免流
热门文章
- sql如何粘贴一列不同的数值_原来Excel的复制粘贴有这么多不为人知的用法
- python爬取京东商品属性_python爬虫小项目:爬取京东商品信息
- java 二维数组动态添加,菜鸟求助: 二维数组如何实现动态接收?
- linux命令 三大利器,awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一...
- ug链轮设计软件_正版UG软件,UG软件代理,正版UG软件模块功能介绍
- 计算机技术学 试卷,计算机技术及科学技术学院试卷模板A.doc
- android系统打印功能实现,Android实现系统打印功能
- 使用webpack5模块联邦
- html canvas绘制网格,canvas(七)绘制网格和坐标轴
- Android设置Spinner控件的文字居中显示