使用 kube-prometheus(release-0.6) 监控 Kubernetes v1.18.20

news2025/7/13 20:06:22

本文档是使用 kube-prometheus-stack[release-0.6] 来监控 kubernetes1.18.20,具体兼容性可以看这里:https://github.com/prometheus-operator/kube-prometheus/tree/release-0.6#kubernetes-compatibility-matrix

1 概述

1.1 在 k8s 中部署 Prometheus 监控的方法

通常在 k8s 中部署 prometheus 监控可以采用的方法有下面三种:

  1. 通过自定义yaml手动部署
  2. 通过 operator 部署
  3. 通过 helm chart 部署

1.2 什么是 Prometheus Operator

Prometheus Operator 的本职就是一组用户自定义的 CRD 资源以及 Controller 的实现,Prometheus Operator 负责监听这些自定义资源的变化,并且根据这些资源的定义自动化的完成如 Prometheus Server 自身以及配置的自动化管理工作。以下是 Prometheus Operator
的架构图。

在这里插入图片描述

1.3 我们为什么使用 Prometheus Operator?

由于 Prometheus 本身没有提供管理配置的 API 接口(尤其是管理监控目标和管理警报规则),也没有提供好用的多实例管理手段,因此这一块往往要自己写一写代码或者脚本。为了简化这类应用程序的管理复杂度,CoreOS 公司率先引入了 Operator的概念,并切首先推出了针对在 kubernetes 下运行和管理 EtcdEted Operator。并随后推出了 Prometheus Operator

1.4 kube-prometheus 项目介绍

prometheus-operator官方地址:https://github.com/prometheus-operator/prometheus-operator
kube-prometheus官方地址:https://github.com/prometheus-operator/kube-prometheus

两个项目的关系:前者只包含了Prometheus Operator,后者既包含了Operator,又包含了Prometheus相关组件的部署及常用的Prometheus自定义监控,具体包含下面的组件

  • The Prometheus Operator:创建CRD自定义的资源对象
  • Highly available Prometheus:创建高可用的Prometheus
  • Highly available Alertmanager:创建高可用的告警组件
  • Prometheus node-exporter:创建主机的监控组件
  • Prometheus Adapter for Kubernetes Metrics APIs:创建自定义监控的指标工具(例如可以通过nginx的request来进行应用的自动伸缩)
  • kube-state-metrics:监控k8s相关资源对象的状态指标
  • Grafana: 进行图像展示

2 环境介绍

我的环境中 kubernetes 是通过 kubeadm 搭建的 1.18.20 版本,由三个控制节点和三个计算节点组成,持久化存储选择的是默认的 nfs 存储 和 分布式存储 longhorn

[shutang@www.datang001.com ~]$ kubectl version -oyaml
clientVersion:
  buildDate: "2021-06-16T12:58:51Z"
  compiler: gc
  gitCommit: 1f3e19b7beb1cc0110255668c4238ed63dadb7ad
  gitTreeState: clean
  gitVersion: v1.18.20
  goVersion: go1.13.15
  major: "1"
  minor: "18"
  platform: linux/amd64
serverVersion:
  buildDate: "2021-06-16T12:51:17Z"
  compiler: gc
  gitCommit: 1f3e19b7beb1cc0110255668c4238ed63dadb7ad
  gitTreeState: clean
  gitVersion: v1.18.20
  goVersion: go1.13.15
  major: "1"
  minor: "18"
  platform: linux/amd64

[shutang@www.datang001.com ~]$ kubectl get sc
NAME                            PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
longhorn                        driver.longhorn.io   Delete          Immediate           true                   170d
managed-nfs-storage (default)   fuseim.pri/ifs       Retain          Immediate           false                  197d

kube-prometheus 的兼容性说明:https://github.com/prometheus-operator/kube-prometheus/tree/release-0.6#kubernetes-compatibility-matrix

3 清单准备

从官方的地址获取 release-0.6 分支,或者直接下载该分支的包

[shutang@www.datang001.com ~]$ git clone https://github.com/prometheus-operator/kube-prometheus.git
[shutang@www.datang001.com ~]$ git checkout release-0.6
或者
[shutang@www.datang001.com ~]$ wget -c https://github.com/prometheus-operator/kube-prometheus/archive/v0.6.0.zip

默认下来的文件较多,建议把文件进行归类处理,将相关的 yaml 文件移动到对应目录下

[shutang@www.datang001.com ~]$ cd kube-prometheus/manifests
[shutang@www.datang001.com ~]$  mkdir -p serviceMonitor prometheus adapter node-exporter kube-state-metrics grafana alertmanager operator other

最终的目录结构如下:

[shutang@www.datang001.com ~]$ tree manifests/
manifests/
├── adapter
│   ├── prometheus-adapter-apiService.yaml
│   ├── prometheus-adapter-clusterRoleAggregatedMetricsReader.yaml
│   ├── prometheus-adapter-clusterRoleBindingDelegator.yaml
│   ├── prometheus-adapter-clusterRoleBinding.yaml
│   ├── prometheus-adapter-clusterRoleServerResources.yaml
│   ├── prometheus-adapter-clusterRole.yaml
│   ├── prometheus-adapter-configMap.yaml
│   ├── prometheus-adapter-deployment.yaml
│   ├── prometheus-adapter-roleBindingAuthReader.yaml
│   ├── prometheus-adapter-serviceAccount.yaml
│   └── prometheus-adapter-service.yaml
├── alertmanager
│   ├── alertmanager-alertmanager.yaml
│   ├── alertmanager-secret.yaml
│   ├── alertmanager-serviceAccount.yaml
│   └── alertmanager-service.yaml
├── grafana
│   ├── grafana-dashboardDatasources.yaml
│   ├── grafana-dashboardDefinitions.yaml
│   ├── grafana-dashboardSources.yaml
│   ├── grafana-deployment.yaml
│   ├── grafana-serviceAccount.yaml
│   └── grafana-service.yaml
├── kube-state-metrics
│   ├── kube-state-metrics-clusterRoleBinding.yaml
│   ├── kube-state-metrics-clusterRole.yaml
│   ├── kube-state-metrics-deployment.yaml
│   ├── kube-state-metrics-serviceAccount.yaml
│   └── kube-state-metrics-service.yaml
├── node-exporter
│   ├── node-exporter-clusterRoleBinding.yaml
│   ├── node-exporter-clusterRole.yaml
│   ├── node-exporter-daemonset.yaml
│   ├── node-exporter-serviceAccount.yaml
│   └── node-exporter-service.yaml
├── operator
│   ├── 0namespace-namespace.yaml
│   ├── prometheus-operator-0alertmanagerCustomResourceDefinition.yaml
│   ├── prometheus-operator-0podmonitorCustomResourceDefinition.yaml
│   ├── prometheus-operator-0prometheusCustomResourceDefinition.yaml
│   ├── prometheus-operator-0prometheusruleCustomResourceDefinition.yaml
│   ├── prometheus-operator-0servicemonitorCustomResourceDefinition.yaml
│   ├── prometheus-operator-0thanosrulerCustomResourceDefinition.yaml
│   ├── prometheus-operator-clusterRoleBinding.yaml
│   ├── prometheus-operator-clusterRole.yaml
│   ├── prometheus-operator-deployment.yaml
│   ├── prometheus-operator-serviceAccount.yaml
│   ├── prometheus-operator-serviceMonitor.yaml
│   └── prometheus-operator-service.yaml
├── other
│   └── grafana-pvc.yaml
├── prometheus
│   ├── prometheus-clusterRoleBinding.yaml
│   ├── prometheus-clusterRole.yaml
│   ├── prometheus-prometheus.yaml
│   ├── prometheus-roleBindingConfig.yaml
│   ├── prometheus-roleBindingSpecificNamespaces.yaml
│   ├── prometheus-roleConfig.yaml
│   ├── prometheus-roleSpecificNamespaces.yaml
│   ├── prometheus-rules.yaml
│   ├── prometheus-serviceAccount.yaml
│   └── prometheus-service.yaml
├── serviceMonitor
│   ├── alertmanager-serviceMonitor.yaml
│   ├── grafana-serviceMonitor.yaml
│   ├── kube-state-metrics-serviceMonitor.yaml
│   ├── node-exporter-serviceMonitor.yaml
│   ├── prometheus-adapter-serviceMonitor.yaml
│   ├── prometheus-serviceMonitorApiserver.yaml
│   ├── prometheus-serviceMonitorCoreDNS.yaml
│   ├── prometheus-serviceMonitorKubeControllerManager.yaml
│   ├── prometheus-serviceMonitorKubelet.yaml
│   ├── prometheus-serviceMonitorKubeScheduler.yaml
│   └── prometheus-serviceMonitor.yaml
└── setup

10 directories, 66 files

修改 yaml,增加 prometheusgrafana 的持久化存储
manifests/prometheus/prometheus-prometheus.yaml

...
  serviceMonitorSelector: {}
  version: v2.22.1
  retention: 3d
  storage:
    volumeClaimTemplate:
      spec:
        storageClassName: dynamic-ceph-rbd
        resources:
          requests:
            storage: 5Gi

manifests/grafana/grafana-deployment.yaml

...
      serviceAccountName: grafana
      volumes:
#      - emptyDir: {}
#        name: grafana-storage
      - name: grafana-storage
        persistentVolumeClaim:
          claimName: grafana-data

新增 grafanapvc,创建文件 manifests/other/grafana-pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: grafana-data
  namespace: monitoring
  annotations:
    volume.beta.kubernetes.io/storage-class: "dynamic-ceph-rbd"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

需要把 prometheus、alertmanager、grafana 这三个的组件的 Service设置为 NodePort 类型

4 开始部署

执行部署

[shutang@www.datang001.com ~]$ kubectl create -f other/grafana-pvc.yaml 
[shutang@www.datang001.com ~]$ kubectl create -f operator/
[shutang@www.datang001.com ~]$ kubectl create -f adapter/ -f alertmanager/ -f grafana/ -f kube-state-metrics/ -f node-exporter/ -f prometheus/ -f serviceMonitor/ 

查看状态

[shutang@www.datang001.com ~]$ kubectl get po,svc -n monitoring
NAME                                       READY   STATUS    RESTARTS   AGE
pod/alertmanager-main-0                    2/2     Running   0          133m
pod/alertmanager-main-1                    2/2     Running   0          133m
pod/alertmanager-main-2                    2/2     Running   0          133m
pod/grafana-5cd74dc975-fthb7               1/1     Running   0          133m
pod/kube-state-metrics-69d4c7c69d-wbvlg    3/3     Running   0          133m
pod/node-exporter-h6z9l                    2/2     Running   0          133m
pod/node-exporter-jvjh2                    2/2     Running   0          133m
pod/node-exporter-qjs2s                    2/2     Running   0          133m
pod/node-exporter-vkbxk                    2/2     Running   0          133m
pod/node-exporter-w2vr9                    2/2     Running   0          133m
pod/node-exporter-ztvjj                    2/2     Running   0          133m
pod/prometheus-adapter-66b855f564-jl58t    1/1     Running   0          133m
pod/prometheus-k8s-0                       3/3     Running   1          133m
pod/prometheus-k8s-1                       3/3     Running   1          133m
pod/prometheus-operator-57859b8b59-92bbd   2/2     Running   0          134m

NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/alertmanager-main       NodePort    10.98.248.252    <none>        9093:40002/TCP               133m
service/alertmanager-operated   ClusterIP   None             <none>        9093/TCP,9094/TCP,9094/UDP   133m
service/grafana                 NodePort    10.109.127.152   <none>        3000:40003/TCP               133m
service/kube-state-metrics      ClusterIP   None             <none>        8443/TCP,9443/TCP            133m
service/node-exporter           ClusterIP   None             <none>        9100/TCP                     133m
service/prometheus-adapter      ClusterIP   10.106.95.130    <none>        443/TCP                      133m
service/prometheus-k8s          NodePort    10.111.134.68    <none>        9090:40001/TCP               133m
service/prometheus-operated     ClusterIP   None             <none>        9090/TCP                     133m
service/prometheus-operator     ClusterIP   None             <none>        8443/TCP                     134m

5 解决 ControllerManager、Scheduler 监控问题

默认安装后访问 prometheus,我们可以看到有三个报警:WatchdogKubeControllerManagerDownKubeSchedulerDown
在这里插入图片描述

其中 Watchdog 是一个正常的报警,这个告警的作用是:如果alermanger或者prometheus本身挂掉了就发不出告警了,因此一般会采用另一个监控来监控prometheus,或者自定义一个持续不断的告警通知,哪一天这个告警通知不发了,说明监控出现问题了。prometheus operator已经考虑了这一点,本身携带一个watchdog,作为对自身的监控。
如果需要关闭,删除或注释掉Watchdog部分

prometheus-rules.yaml

...
  - name: general.rules
    rules:
    - alert: TargetDown
      annotations:
        message: 'xxx'
      expr: 100 * (count(up == 0) BY (job, namespace, service) / count(up) BY (job, namespace, service)) > 10
      for: 10m
      labels:
        severity: warning
#    - alert: Watchdog
#      annotations:
#        message: |
#          This is an alert meant to ensure that the entire alerting pipeline is functional.
#          This alert is always firing, therefore it should always be firing in Alertmanager
#          and always fire against a receiver. There are integrations with various notification
#          mechanisms that send a notification when this alert is not firing. For example the
#          "DeadMansSnitch" integration in PagerDuty.
#      expr: vector(1)
#      labels:
#        severity: none

KubeControllerManagerDownKubeSchedulerDown 的解决

原因是因为默认安装的 controller-manager scheduler 默认监听的是 127.0.0.1,需要修改 0.0.0.0。网上有的说是默认安装的集群并没有给系统 kube-controller-manager 组件创建 svc,我查看一下我自己的 kube-system下的 svc 资源对象是存在 kube-controller-manager 组件创建 svc 并且名字是 kube-controller-manager-svc。该 svc 有一个 labels 正好是 k8s-app=kube-controller-manager 和 文件 prometheus-serviceMonitorKubeControllerManager.yaml ServiceMonitor 的 labels 相同。

[21:38]:[root@www.datang001.com:~]# kubectl get svc -n kube-system --show-labels
NAME                          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                        AGE    LABELS
kube-controller-manager-svc   ClusterIP   None         <none>        10257/TCP                      260d   k8s-app=kube-controller-manager
kube-dns                      ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP         261d   k8s-app=kube-dns,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeDNS
kube-scheduler-svc            ClusterIP   None         <none>        10259/TCP                      260d   k8s-app=kube-scheduler
kubelet                       ClusterIP   None         <none>        10250/TCP,10255/TCP,4194/TCP   260d   k8s-app=kubelet

prometheus-serviceMonitorKubeControllerManager.yaml 文件内容如下:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    k8s-app: kube-controller-manager
  name: kube-controller-manager
  namespace: monitoring
spec:
  endpoints:
  - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    interval: 30s
    metricRelabelings:
    - action: drop
...
...

修改 kube-controller-manager 的监听地址

# vim /etc/kubernetes/manifests/kube-controller-manager.yaml
...
spec:
  containers:
  - command:
    - kube-controller-manager
    - --allocate-node-cidrs=true
    - --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf
    - --authorization-kubeconfig=/etc/kubernetes/controller-manager.conf
    - --bind-address=0.0.0.0
# netstat -lntup|grep kube-contro                                      
tcp6       0      0 :::10257                :::*                    LISTEN      38818/kube-controll

kube-sheduler 同理,修改 kube-scheduler 的监听地址

# vim /etc/kubernetes/manifests/kube-scheduler.yaml
...
spec:
  containers:
  - command:
    - kube-scheduler
    - --authentication-kubeconfig=/etc/kubernetes/scheduler.conf
    - --authorization-kubeconfig=/etc/kubernetes/scheduler.conf
    - --bind-address=0.0.0.0
# netstat -lntup|grep kube-sched
tcp6       0      0 :::10259                :::*                    LISTEN      100095/kube-schedul

再次查看 prometheus 的 alert 界面,全部恢复正常
在这里插入图片描述

登录到 grafana ,查看相关图像展示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot任务调度(官方案例)

在线文档项目结构 1.源码克隆&#xff1a;git clone https://github.com/spring-guides/gs-scheduling-tasks.git 2.包含两个项目initial和complete&#xff0c;initial可以根据文档练习完善&#xff0c;complete是完整项目 3.功能描述&#xff1a;构建应用程序&#xff0c;使用…

数据结构 - AVL树 (Adelson-Velsky and Landis Tree)

目录一、前言二、简介三、左旋与右旋四、AVL树的调整1、向AVL树中插入新数据1&#xff09;LL型不平衡&#xff08;右单旋转&#xff09;2&#xff09;RR型不平衡&#xff08;左单旋转&#xff09;3&#xff09;LR型不平衡&#xff08;左右双旋转&#xff09;4&#xff09;RL型不…

爆款短视频是怎样练成的:视频发布技巧,首次公开

剪辑好的优质短视频怎么发布才能成为爆款视频&#xff1f;短视频发布技巧公开 前面几篇我们讨论了短视频定位&#xff0c;怎么写文案脚本&#xff0c;怎么拍摄以及后期剪辑&#xff0c;至此我们一个优质的短视频已经制作完成&#xff0c;今天我们就聊一下下一个环节&#xff1…

Kafka Producer Retries Idempotence 原理

Kafka Producer Retries & Idempotence 原理 由于存在网络瞬时抖动&#xff1b;或者kafka集群短暂的不可用&#xff0c;会导致kafka producer发送消息出现异常&#xff0c;生产者无法将消息推送到topic&#xff0c;在这种情况下&#xff0c;消息丢失的可能性很高。因此kaf…

全排列思路

目录 省流版结论 推导过程 输出结果&#xff08;元素数量为4时&#xff09; 省流版结论 &#xff08;程序来源&#xff1a;排列组合之——全排列&#xff08;c语言&#xff09;_rewrite!的博客-CSDN博客_全排列&#xff09; 一晚上的时间&#xff0c;终于弄懂了。真羡慕计算…

基于标志点特征高精提取与匹配方法,进行双目、结构光、RGBD相机、单目相机多视拼接

1. 工作原理 人工张贴标志点变换位置拍照相邻照片的公共视野内有相同的标志点群匹配两张照片对应标志点对通过三对以上标志点对&#xff0c;实现两张照片间的坐标变换求解 2.标志点特征 圆形 分类&#xff1a; 编码&#xff08;粘贴于被测物体表面&#xff09;&#xff1a;…

SpringBoot文件上传(官方案例)

在线文档项目结构 1.源码克隆&#xff1a;git clone https://github.com/spring-guides/gs-uploading-files.git 2.包含两个项目initial和complete&#xff0c;initial可以根据文档练习完善&#xff0c;complete是完整项目 3.功能描述&#xff1a;构建接受文件上传的应用程序&a…

转行人必看:数字IC前端设计学习路线与方法(内附学习视频)

众所周知&#xff0c;数字前端设计对于工程师的能力要求比较高&#xff0c;不仅有学历上的要求&#xff0c;还要求掌握很多的知识技能。不少跨专业想要转行的小伙伴对数字前端设计这个岗位不是很了解&#xff0c;下面IC修真院就带大家全面了解一下数字IC前端设计。 数字前端到…

酒水销售网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;网站介绍、帮助信息、酒水资讯、酒水类型、酒水信息、购物分享 管理员&#xff1a; 1、管理网站介…

matlab源码说明

目录 1.MATLAB概述 2.MATLAB程序使用几个常规注意实现 2.1.运行过程可能出现Out of Memory的问题解决办法 2.2.保存大于2G的数据 2.3.程序运行方法 1.MATLAB概述 Matlab经过不断的发展和完善,如今已成为覆盖多个学科,是具有超强数值计算能力和仿真分析能力的软件。…

YOLOv5s.yaml文件解读

目录一、YOLOv5s.yaml内容二、详解2.1参数配置2.2 anchors2.3 backbone2.4 head三、如何调整模型一、YOLOv5s.yaml内容 YOLOv5配置了4种不同大小的网络模型&#xff0c;分别是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff0c;其中YOLOv5s是网络深度和宽度最小但检测速度最快的…

资深车主才会告诉你的那些事,看完立省三万二

自动驾驶已经火了几年了。在某度一搜“自动驾驶”&#xff0c;全都是某某公司推出了自动驾驶&#xff0c;某某公司打算推出自动驾驶。当然&#xff0c;这两年因为各种事故的原因&#xff0c;“自动驾驶”被各种名词取代——辅助驾驶、高级辅助驾驶、领航辅助驾驶......这就有点…

以英雄之名为S9总决赛助攻! 虎牙直播and华为云CDN,team work才会赢

以英雄之名为S9总决赛助攻! 虎牙直播and华为云CDN&#xff0c;team work才会赢 你的朋友圈肯定经历过这样一波刷屏 啊啊!!!赢了祝贺!#FPX团灭G2#FPX夺冠啦!超帅超酷超级棒!我们是冠军!!!恭喜FPX!凤凰涅槃!FPX咋这么稳!实在太稳了!小凤凰一飞冲天 团灭!就两个字 就是感觉很厉害…

SimpleAdapter的简单使用

SimpleAdapter适配器的简单使用 1.SimpleAdapter 1.简介 显示复杂的列表项&#xff0c;如图片2.SimpleAdapter的构造函数 上下文数据&#xff08;保存map的list集合&#xff09;子布局key子布局中的id注意&#xff1a;key和id是一一对应的关系 3.SimpleAdapter案例-用户简介 3.…

Java面试常用,初级到高级(持续更新中....)

文章目录一、java基础1、基本类型2、String相关3、数组和list相互转换4、java中的锁5、常用的算法二、项目层面1、并发与并行的区别三、常见错误解决1、Java ConcurrentModificationException异常原因和解决方法2、 main中不能使用this四、底层的相关技术1、spring如何处理循环…

54.Python的def语句自定义函数

54.def语句自定义函数 文章目录54.def语句自定义函数1.课题导入—数学中的函数1.1 计算圆的面积1.2 计算不规则图形的面积2. 什么是函数3. 函数分类3.1 内置函数3.2 自定义函数4. 计算多个矩形的面积5. 自定义函数计算矩形的面积6.自定义函数的写法1.先写函数要实现的功能2.添加…

Android设计模式详解之策略模式

前言 定义&#xff1a;定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 使用场景&#xff1a; 针对同一类型问题的多种处理方式&#xff0c;仅仅是具体行为有差别时&#xff1b;…

电磁波的达朗贝尔方程 工程电磁场P25

我们有下述两个方程 记住一定是线性介质 称为电磁波的达朗贝尔方程&#xff0c;是两个非齐次方程 我们下面介绍达朗贝尔方程的解 我们就用最简单的场源举例 这个方程可以写成 动态位是r和时间的函数 我们可以在球坐标系下展开成 我们再做一下变换 现在如果在这个微分方程里面…

智牛股_第7章_OAuth2+Spring Security OAuth2+GateWay+Druid+Spring Data JPA

交易平台 - Day 7 文章目录交易平台 - Day 7学习目标第1章 OAUTH2统一认证1. 目标2. 分析3. 讲解3.1 传统登陆认证3.2 单点登陆认证3.3 OAuth2简介3.4 OAuth2角色3.5 OAuth2 协议流程3.6 授权类型3.7 授权码模式流程3.8 简化模式3.9 密码模式3.10 客户端模式3.11 Spring Securi…

分治法算法

目录 一 算法简介 ①算法定义 ②算法特征 ③算法编程 二 算法应用 汉诺塔 问题描述 问题解析 问答解答 快速幂 问题描述 问题解析 问题解答 三 分治思想设计排序算法 步骤解析 归并排序 归并排序的主要操作 归并排序与交换排序 归并算法的应用&#xff1a;逆…