08--kubernetes可视化界面与Daemonset

2024-08-29 16:12

本文主要是介绍08--kubernetes可视化界面与Daemonset,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:前几章写的内容太多了,后面打算写k8s持久化篇幅也不小,这一章算作过度章节,内容简单一些,主要是K8S_web界面与Daemonset控制器。

1、Dashboard

Dashboard是一个图形化界面,用于汇总和展示来自不同数据源的关键信息。它通过图表、表格、图形等形式将数据可视化,使用户能够快速理解数据趋势和关键指标。

功能:

  1. 数据可视化:将数据以图表、仪表、地图等形式展示,使复杂的数据变得易于理解。
  2. 实时更新:许多Dashboard能够实时更新数据,提供最新的信息。
  3. 数据监控:监控关键指标和性能指标,及时发现异常或趋势。
  4. 自定义:用户可以根据需要自定义Dashboard的布局和内容,以关注特定的指标或数据。
  5. 互动性:提供过滤、搜索和钻取等功能,允许用户深入分析数据。
  6. 报告生成:支持生成报告和导出数据,方便进行进一步的分析或分享。

这里dashboard也是运行在k8s集群内部pod上运行的, 所以想使用web界面还需要使用nodeport方式暴露出来。本质上使用dashboard管理k8s集群是使用一个pod管理k8s,所以需要针对这个pod进行提权,这里就要引入另一个资源对象serviceacoount(sa),但sa刚创建出来时,权限仅限于访问apiserver,此时则需要创建一个clusterrole,通过创建clusterrole后赋予其权限,与sa绑定在一起,授予sa权限,这个绑定规则就是clusterrolebinding,创建pod后引用sa即可拥有对应的权限。

详细解释:

  • ServiceAccount 是 Pod 与 Kubernetes API 交互时使用的身份。你可以为 Pod 指定一个 ServiceAccount。

  • ClusterRole 定义了该 ServiceAccount 可以执行的操作权限,比如 getlistwatch 等,针对不同资源如 Pods、Services、Secrets 等。

  • ClusterRoleBinding 将定义好的 ClusterRole 权限绑定到指定的 ServiceAccount 上,使得该 ServiceAccount 可以执行 ClusterRole 中定义的操作。

 五种访问dashboard的方式(这里只演示最常使用的nodeport):

1. Nodport方式访问dashboard,service类型改为NodePort
2. loadbalancer方式,service类型改为loadbalacer
3. Ingress方式访问dashboard
4. API server方式访问 dashboard
5. kubectl proxy方式访问dashboard

1.1、Dashboard部署

部署文件下载地址:

文件原地址:https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml百度网盘链接:
链接: https://pan.baidu.com/s/1OwUFWpRSRML3f7i9JhyodA?pwd=gszm 提取码: gszm

 所需提前下载的镜像(拉取到node节点,可指定某个节点进行创建):

[root@k8s-node1 ~]# docker pull registry.cn-chengdu.aliyuncs.com/k8s_module_images/dashboard:v2.4.0
[root@k8s-node1 ~]# docker pull registry.cn-chengdu.aliyuncs.com/k8s_module_images/metrics-scraper:v1.0.7[root@k8s-node1 ~]# docker tag registry.cn-chengdu.aliyuncs.com/k8s_module_images/dashboard:v2.4.0 kubernetesui/dashboard:v2.4.0
[root@k8s-node1 ~]# docker tag registry.cn-chengdu.aliyuncs.com/k8s_module_images/metrics-scraper:v1.0.7 kubernetesui/metrics-scraper:v1.0.7tag不改也可以,记得修改yaml内的image项

修改命名空间为我们现在使用的kube-system

[root@k8s-master1 ~]# sed -i '/namespace/ s/kubernetes-dashboard/kube-system/g' recommended.yam

进入文件内部修改

1、命名空间创建部分添加注释
#apiVersion: v1
#kind: Namespace
#metadata:
#  name: kubernetes-dashboard2、搜索image:
没有docker tag的记得修改image3、搜索kind: Deployment(有两个组件)
指定创建节点为k8s-node1(根据需要操作)spec:nodeName: k8s-node14、搜索kind: Service(只改第一个)
有多个svc,只需要修改dashboard的,本yaml内为标签k8s-app: kubernetes-dashboard
指定svc类型为NodePort,添加nodeport端口
spec:type: NodePortports:- port: 443targetPort: 8443nodePort: 32123修改后文件为百度云链接内的recommended-finish.yaml

根据文件创建dashboard

[root@k8s-master1 ~]# kubectl apply -f recommended.yaml 
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

检查创建情况

[root@k8s-master1 ~]# kubectl get pod -n kube-system

https访问node1的32123端口(注意浏览器安全策略,最高安全策略会强制拦截访问)

 至此搭建完成,下面演示token登录和使用

1.2、Dashboard使用

首先需要获取token

[root@k8s-master1 ~]# kubectl get clusterrole

以这个角色作为与我们sa绑定的clusterrole,上面运行yaml文件时也创建了clusterrole并有完整的sa和绑定关系,但是权限较小,所以这里采用权限较大的角色进行绑定。

创建sa和绑定关系的操作过程如下:

[root@k8s-master1 ~]# vim dashboard-adminuser.yaml
[root@k8s-master1 ~]# cat dashboard-adminuser.yaml
---
apiVersion: v1  # 指定 API 版本
kind: ServiceAccount  # 资源类型:ServiceAccount
metadata:name: admin-user  # ServiceAccount 的名称namespace: kube-system  # ServiceAccount 所在的命名空间
---
apiVersion: rbac.authorization.k8s.io/v1  # 指定 API 版本
kind: ClusterRoleBinding  # 资源类型:ClusterRoleBinding
metadata:name: admin-user  # ClusterRoleBinding 的名称
roleRef:apiGroup: rbac.authorization.k8s.io  # 指定 RBAC API 组kind: ClusterRole  # 角色类型:ClusterRolename: cluster-admin  # 绑定的角色名称(ClusterRole)
subjects:
- kind: ServiceAccount  # 绑定的主体类型:ServiceAccountname: admin-user  # 绑定的 ServiceAccount 名称namespace: kube-system  # 绑定的 ServiceAccount 所在的命名空间
[root@k8s-master1 ~]# kubectl apply -f dashboard-adminuser.yaml 
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

查看创建情况

[root@k8s-master1 ~]# kubectl get sa -n kube-system
NAME                                 SECRETS   AGE
admin-user                           1         72s

创建sa的时候会同步生成对应的secret(以sa名字为前缀)

[root@k8s-master1 ~]# kubectl get secret -n kube-system
NAME                                             TYPE                                  DATA   AGE
admin-user-token-5pvvm                           kubernetes.io/service-account-token   3      3m54s

查看该secret的详细信息可以获得token

[root@k8s-master1 ~]# kubectl describe secret admin-user-token-5pvvm -n kube-system
Name:         admin-user-token-5pvvm
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-userkubernetes.io/service-account.uid: 9d5166be-d225-4395-a17b-3df11808b89fType:  kubernetes.io/service-account-tokenData
====
ca.crt:     1066 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6ImtyaU9nanQxZTFrM1RaWDM2b21jOFdFQkIyRDBEM3NDWmJuVWs5U3o1QkUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTVwdnZtIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5ZDUxNjZiZS1kMjI1LTQzOTUtYTE3Yi0zZGYxMTgwOGI4OWYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.rqn5RsVMU5DbAxLRbSR4qsUG_sHEEGQWdIW7KWMLw_MO3JgUrpPFEwBcMfupQq00ck_eX-c7PPbdh-8f5tUXxYxKDkPKwm8VF6Cuk4Q6TLdTUKFmqlZ8X9s-TZdsKIdwPwGkFQtzkMLVnqO8DxcQWZyAWg7Datahbp_pziEXRa1fgw_qnPfw_JyDs1jBUH3H2DLC7bMqeUmYejADeu3odX5hMJM0_ws33rV34Gq1eY1CQV6WuyHRKyZIR7Jj7fvoIz0nKqAE1qqDSMPOmd7tx2JYieL1wTTgegr-SZyUAVHm1jSimI3oSBp6I_Sen7QDBMH1oJgrDzUBzos1Uzabag

复制token,回到浏览器登录使用。进入dashboard界面

选择命名空间,查看对应资源对象

管理删除pod

 扩容deployment,其他资源对象同理

2、Daemonset

DaemonSet(ds) 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时,会为他们新增一个 Pod。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod(慎用!!!)

DaemonSet 的一些典型用法:
在每个节点上运行集群存储 DaemonSet,例如 glusterd、ceph。
在每个节点上运行日志收集 DaemonSet,例如 fluentd、logstash、filebeat。
在每个节点上运行监控 DaemonSet,例如 Prometheus Node Exporter、Flowmill、Sysdig 代理、collectd、Dynatrace OneAgent、AppDynamics 代理、Datadog 代理、New Relic 代理、Ganglia gmond 或者 Instana 代理。
一个简单的用法是在所有的节点上都启动一个 DaemonSet,并作为每种类型的 daemon 使用。

一个稍微复杂的用法是单独对每种 daemon 类型使用一种DaemonSet。这样有多个 DaemonSet,但具有不同的标识,并且对不同硬件类型具有不同的内存、CPU 要求。

查看当前集群已有的daemonset

[root@k8s-master1 deployment.yaml.d]# kubectl get daemonset -n kube-system
NAME              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-flannel-ds   3         3         3       3            3           <none>                   13d
kube-proxy        3         3         3       3            3           kubernetes.io/os=linux   13d

这里有三个的原因是,除两个node节点外,最初yaml文件设置master接受调度

DaemonSet 中的 Pod 可以使用 hostPort,从而可以通过node节点 IP 访问到 Pod;因为DaemonSet模式下Pod不会被调度到其他节点。

 ports:- name: httpdcontainerPort: 80#除非绝对必要,否则不要为 Pod 指定 hostPort。 将 Pod 绑定到hostPort时,它会限制 Pod 可以调度的位置数;DaemonSet除外#一般情况下 containerPort与hostPort值相同hostPort: 8090     #可以通过宿主机+hostPort的方式访问该Pod。例如:pod在/调度到了k8s-node02			                      【192.168.153.147】,那么该Pod可以通过192.168.153.147:8090方式进行访问。protocol: TCP

操作演示:

无需指定副本数量

[root@k8s-master1 ~]# mkdir daemonset.yaml.d
[root@k8s-master1 ~]# cd daemonset.yaml.d/
[root@k8s-master1 daemonset.yaml.d]# vim nginx-daemonset.yml 
[root@k8s-master1 daemonset.yaml.d]# cat nginx-daemonset.yml 
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: nginx-daemonsetlabels:app: nginx
spec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: registry.cn-chengdu.aliyuncs.com/liumuquan_app/nginx:1.20.1ports:- name: nginxcontainerPort: 80hostPort: 8090protocol: TCP

创建daemonset并查看

[root@k8s-master1 daemonset.yaml.d]# kubectl apply -f nginx-daemonset.yml 
daemonset.apps/nginx-daemonset created
[root@k8s-master1 daemonset.yaml.d]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-daemonset-f4456   1/1     Running   0          16s
nginx-daemonset-h9ttq   1/1     Running   0          16s
[root@k8s-master1 daemonset.yaml.d]# kubectl get pod -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
nginx-daemonset-f4456   1/1     Running   0          37s   10.244.1.37   k8s-node1   <none>           <none>
nginx-daemonset-h9ttq   1/1     Running   0          37s   10.244.2.23   k8s-node2   <none>           <none>

使用浏览器访问

 与deploy一样,daemonset同样支持热升级。

这篇关于08--kubernetes可视化界面与Daemonset的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1118335

相关文章

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1