kubernetes 证书更新

参考:

  • https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/
  • https://kubernetes.io/zh-cn/docs/tasks/tls/certificate-rotation/

查看证书

查看 kubelet是否支持证书自动轮换,默认轮换的证书位于目录 /var/lib/kubelet/pki

[root@kube-master01 ~]# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: active (running) since Tue 2023-07-25 14:57:05 CST; 18min ago
     Docs: https://kubernetes.io/docs/
 Main PID: 2983 (kubelet)
    Tasks: 13 (limit: 49016)
   Memory: 55.3M
   CGroup: /system.slice/kubelet.service
           └─2983 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/

[root@kube-master01 ~]# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

 [root@kube-master01 ~]# cat /var/lib/kubelet/config.yaml |grep rotate
rotateCertificates: true

查看集群指定证书位置


[root@kube-master01 ~]# kubeadm config print init-defaults
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 1.2.3.4
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: node
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.k8s.io
kind: ClusterConfiguration
kubernetesVersion: 1.27.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}
[root@kube-master01 ~]# kubeadm config print join-defaults
apiVersion: kubeadm.k8s.io/v1beta3
caCertPath: /etc/kubernetes/pki/ca.crt
discovery:
  bootstrapToken:
    apiServerEndpoint: kube-apiserver:6443
    token: abcdef.0123456789abcdef
    unsafeSkipCAVerification: true
  timeout: 5m0s
  tlsBootstrapToken: abcdef.0123456789abcdef
kind: JoinConfiguration
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: kube-master01
  taints: null

备份

mkdir certs-old
cp -rp /etc/kubernetes certs-old

查看

[root@kube-master01 ~]# ls -l certs-old/
total 0
drwxr-xr-x 5 root root 136 Jul 20 12:04 kubernetes
[root@kube-master01 ~]# ls -l certs-old/.kube/
total 8
drwxr-x--- 4 root root   35 Jul 18 17:11 cache
-rw------- 1 root root 5641 Jul 18 17:10 config
[root@kube-master01 ~]# ls -l certs-old/kubernetes/
total 32
-rw------- 1 root root 5637 Jul 20 12:05 admin.conf
-rw------- 1 root root 5669 Jul 20 12:05 controller-manager.conf
-rw------- 1 root root 1989 Jul 18 17:09 kubelet.conf
drwxr-xr-x 2 root root  113 Jul 20 02:57 manifests
drwxr-xr-x 3 root root 4096 Jul 18 17:08 pki
-rw------- 1 root root 5621 Jul 20 12:05 scheduler.conf
drwx------ 5 root root  145 Jul 20 12:05 tmp
[root@kube-master01 ~]# ls -l certs-old/kubernetes/pki/
total 56
-rw-r--r-- 1 root root 1294 Jul 20 12:04 apiserver.crt
-rw-r--r-- 1 root root 1155 Jul 20 12:04 apiserver-etcd-client.crt
-rw------- 1 root root 1679 Jul 20 12:04 apiserver-etcd-client.key
-rw------- 1 root root 1679 Jul 20 12:04 apiserver.key
-rw-r--r-- 1 root root 1164 Jul 20 12:04 apiserver-kubelet-client.crt
-rw------- 1 root root 1675 Jul 20 12:04 apiserver-kubelet-client.key
-rw-r--r-- 1 root root 1099 Jul 18 17:08 ca.crt
-rw------- 1 root root 1679 Jul 18 17:08 ca.key
drwxr-xr-x 2 root root  162 Jul 18 17:08 etcd
-rw-r--r-- 1 root root 1115 Jul 18 17:08 front-proxy-ca.crt
-rw------- 1 root root 1679 Jul 18 17:08 front-proxy-ca.key
-rw-r--r-- 1 root root 1119 Jul 20 12:04 front-proxy-client.crt
-rw------- 1 root root 1675 Jul 20 12:04 front-proxy-client.key
-rw------- 1 root root 1679 Jul 18 17:08 sa.key
-rw------- 1 root root  451 Jul 18 17:08 sa.pub

$ ls certs-old/kubernetes/pki/
etcd.yaml  kube-apiserver.yaml  kube-controller-manager.yaml  kube-scheduler.yaml


[root@kube-master01 ~]# kubectl -n kube-system get cm kubeadm-config -o yaml
apiVersion: v1
data:
  ClusterConfiguration: |
    apiServer:
      extraArgs:
        authorization-mode: Node,RBAC
      timeoutForControlPlane: 4m0s
    apiVersion: kubeadm.k8s.io/v1beta3
    certificatesDir: /etc/kubernetes/pki
    clusterName: kubernetes
    controllerManager: {}
    dns: {}
    etcd:
      local:
        dataDir: /var/lib/etcd
    imageRepository: registry.k8s.io
    kind: ClusterConfiguration
    kubernetesVersion: v1.27.4
    networking:
      dnsDomain: cluster.local
      podSubnet: 10.96.0.0/12
      serviceSubnet: 10.96.0.0/12
    scheduler: {}
kind: ConfigMap
metadata:
  creationTimestamp: "2023-07-18T09:09:00Z"
  name: kubeadm-config
  namespace: kube-system
  resourceVersion: "232092"
  uid: 5117897d-42fa-4b9d-b89d-f8a5e702e1b9

备份 kubelet

[root@kube-master01 ~]# ls -l /var/lib/kubelet/
config.yaml           device-plugins/       memory_manager_state  plugins/              pod-resources/
cpu_manager_state     kubeadm-flags.env     pki/                  plugins_registry/     pods/
[root@kube-master01 ~]# cat /var/lib/kubelet/kubeadm-flags.env 
KUBELET_KUBEADM_ARGS="--container-runtime-endpoint=unix:///var/run/containerd/containerd.sock --pod-infra-container-image=registry.k8s.io/pause:3.9"
[root@kube-master01 ~]# ls -l /var/lib/kubelet/pki/
total 12
-rw------- 1 root root 2830 Jul 18 17:08 kubelet-client-2023-07-18-17-08-53.pem
lrwxrwxrwx 1 root root   59 Jul 18 17:08 kubelet-client-current.pem -> /var/lib/kubelet/pki/kubelet-client-2023-07-18-17-08-53.pem
-rw-r--r-- 1 root root 2287 Jul 18 17:08 kubelet.crt
-rw------- 1 root root 1675 Jul 18 17:08 kubelet.key

更新

[root@kube-master01 ~]# kubeadm certs check-expiration
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'

CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Jul 19, 2024 04:05 UTC   359d            ca                      no      
apiserver                  Jul 19, 2024 04:04 UTC   359d            ca                      no      
apiserver-etcd-client      Jul 19, 2024 04:04 UTC   359d            etcd-ca                 no      
apiserver-kubelet-client   Jul 19, 2024 04:04 UTC   359d            ca                      no      
controller-manager.conf    Jul 19, 2024 04:05 UTC   359d            ca                      no      
etcd-healthcheck-client    Jul 17, 2024 09:08 UTC   358d            etcd-ca                 no      
etcd-peer                  Jul 17, 2024 09:08 UTC   358d            etcd-ca                 no      
etcd-server                Jul 17, 2024 09:08 UTC   358d            etcd-ca                 no      
front-proxy-client         Jul 19, 2024 04:04 UTC   359d            front-proxy-ca          no      
scheduler.conf             Jul 19, 2024 04:05 UTC   359d            ca                      no      

CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Jul 15, 2033 09:08 UTC   9y              no      
etcd-ca                 Jul 15, 2033 09:08 UTC   9y              no      
front-proxy-ca          Jul 15, 2033 09:08 UTC   9y              no      


[root@kube-master01 ~]# kubeadm  certs renew all
[renew] Reading configuration from the cluster...
[renew] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'

certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed
certificate for serving the Kubernetes API renewed
certificate the apiserver uses to access etcd renewed
certificate for the API server to connect to kubelet renewed
certificate embedded in the kubeconfig file for the controller manager to use renewed
certificate for liveness probes to healthcheck etcd renewed
certificate for etcd nodes to communicate with each other renewed
certificate for serving etcd renewed
certificate for the front proxy client renewed
certificate embedded in the kubeconfig file for the scheduler manager to use renewed

Done renewing certificates. You must restart the kube-apiserver, kube-controller-manager, kube-scheduler and etcd, so that they can use the new certificates.

[root@kube-master01 ~]# kubeadm  certs check-expiration
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'

CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Jul 24, 2024 06:52 UTC   364d            ca                      no      
apiserver                  Jul 24, 2024 06:52 UTC   364d            ca                      no      
apiserver-etcd-client      Jul 24, 2024 06:52 UTC   364d            etcd-ca                 no      
apiserver-kubelet-client   Jul 24, 2024 06:52 UTC   364d            ca                      no      
controller-manager.conf    Jul 24, 2024 06:52 UTC   364d            ca                      no      
etcd-healthcheck-client    Jul 24, 2024 06:52 UTC   364d            etcd-ca                 no      
etcd-peer                  Jul 24, 2024 06:52 UTC   364d            etcd-ca                 no      
etcd-server                Jul 24, 2024 06:52 UTC   364d            etcd-ca                 no      
front-proxy-client         Jul 24, 2024 06:52 UTC   364d            front-proxy-ca          no      
scheduler.conf             Jul 24, 2024 06:52 UTC   364d            ca                      no      

CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Jul 15, 2033 09:08 UTC   9y              no      
etcd-ca                 Jul 15, 2033 09:08 UTC   9y              no      
front-proxy-ca          Jul 15, 2033 09:08 UTC   9y              no      

[root@kube-master01 ~]# ls -l /etc/kubernetes/
total 32
-rw------- 1 root root 5641 Jul 25 14:52 admin.conf
-rw------- 1 root root 5673 Jul 25 14:52 controller-manager.conf
-rw------- 1 root root 1989 Jul 18 17:09 kubelet.conf
drwxr-xr-x 2 root root  113 Jul 20 02:57 manifests
drwxr-xr-x 3 root root 4096 Jul 18 17:08 pki
-rw------- 1 root root 5617 Jul 25 14:52 scheduler.conf
drwx------ 5 root root  145 Jul 20 12:05 tmp
[root@kube-master01 ~]# ls -l /etc/kubernetes/pki/
total 56
-rw-r--r-- 1 root root 1294 Jul 25 14:52 apiserver.crt
-rw-r--r-- 1 root root 1155 Jul 25 14:52 apiserver-etcd-client.crt
-rw------- 1 root root 1675 Jul 25 14:52 apiserver-etcd-client.key
-rw------- 1 root root 1679 Jul 25 14:52 apiserver.key
-rw-r--r-- 1 root root 1164 Jul 25 14:52 apiserver-kubelet-client.crt
-rw------- 1 root root 1679 Jul 25 14:52 apiserver-kubelet-client.key
-rw-r--r-- 1 root root 1099 Jul 18 17:08 ca.crt
-rw------- 1 root root 1679 Jul 18 17:08 ca.key
drwxr-xr-x 2 root root  162 Jul 18 17:08 etcd
-rw-r--r-- 1 root root 1115 Jul 18 17:08 front-proxy-ca.crt
-rw------- 1 root root 1679 Jul 18 17:08 front-proxy-ca.key
-rw-r--r-- 1 root root 1119 Jul 25 14:52 front-proxy-client.crt
-rw------- 1 root root 1679 Jul 25 14:52 front-proxy-client.key
-rw------- 1 root root 1679 Jul 18 17:08 sa.key
-rw------- 1 root root  451 Jul 18 17:08 sa.pub


重启 控制平台pod

[root@kube-master01 manifests]# mv /etc/kubernetes/manifests/* /root/certs-old/etc-kubernetes-manifests/
[root@kube-master01 manifests]# crictl ps 
CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD
5ede0cf8bb2d2       ead0a4a53df89       2 hours ago         Running             coredns             2                   f5f9fc235b4f7       coredns-5d78c9869d-l6qsw
64591e9c84957       ead0a4a53df89       2 hours ago         Running             coredns             2                   f7fd104b43a70       coredns-5d78c9869d-d6tjw
ae281e1b09574       6848d7eda0341       2 hours ago         Running             kube-proxy          2                   ee26bf2b947f1       kube-proxy-862db

#等待20秒
[root@kube-master01 manifests]# mv  /root/certs-old/etc-kubernetes-manifests/* .
[root@kube-master01 manifests]# crictl ps 
CONTAINER           IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID              POD
c79467f61b16f       e7972205b6614       1 second ago        Running             kube-apiserver            0                   054aa5b7aa334       kube-apiserver-kube-master01
1575c51f03ec5       f466468864b7a       1 second ago        Running             kube-controller-manager   0                   dd7da3afef78a       kube-controller-manager-kube-master01
e900e9e36238d       98ef2570f3cde       1 second ago        Running             kube-scheduler            0                   28e22a70ffe19       kube-scheduler-kube-master01
9102a026ffc03       86b6af7dd652c       1 second ago        Running             etcd                      0                   cf60901f178f9       etcd-kube-master01
5ede0cf8bb2d2       ead0a4a53df89       2 hours ago         Running             coredns                   2                   f5f9fc235b4f7       coredns-5d78c9869d-l6qsw
64591e9c84957       ead0a4a53df89       2 hours ago         Running             coredns                   2                   f7fd104b43a70       coredns-5d78c9869d-d6tjw
ae281e1b09574       6848d7eda0341       2 hours ago         Running             kube-proxy                2                   ee26bf2b947f1       kube-proxy-862db
[root@kube-master01 manifests]# kubectl get pod -A
NAMESPACE     NAME                                    READY   STATUS    RESTARTS       AGE
kube-system   coredns-5d78c9869d-d6tjw                1/1     Running   2 (140m ago)   5d5h
kube-system   coredns-5d78c9869d-l6qsw                1/1     Running   2 (140m ago)   5d5h
kube-system   etcd-kube-master01                      1/1     Running   0              127m
kube-system   kube-apiserver-kube-master01            1/1     Running   0              126m
kube-system   kube-controller-manager-kube-master01   1/1     Running   0              20m
kube-system   kube-proxy-862db                        1/1     Running   2 (140m ago)   5d4h
kube-system   kube-proxy-gnpjp                        1/1     Running   1 (5h5m ago)   5d4h
kube-system   kube-proxy-k7vpf                        1/1     Running   1 (5h5m ago)   5d4h
kube-system   kube-scheduler-kube-master01            1/1     Running   0              5d4h

不知道为啥我设置了kubelet 证书每过半个小时更新一次,kubelet直到第二天才开始自动轮训替换。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Clion配置与使用记录

Clion与ROS2、docker 为了能够在Docker中使用ROS2环境,同时Clion能够在编辑代码时可以有代码提示以及函数、变量跳转等功能 Docker配置 参考:Docker SSH配置 启动Docker,需要将端口映射,添加如下参数: -p 8024:22&…

iOS transform rotate总结

研究了一下transform的旋转设置,调了半天还以为是旋转写错了,发现是两个不同的view对象写错了,不管怎么说,还是记录一下旋转相关的操作吧。 参数都是弧度。 以一个图片来举例。 let img UIImageView.init() img.image UIImage…

MySQL 储存过程

目录 🧿MySQL存储过程简介 🧿MySQL储存优点 🧿 MySQL创建存储过程(CREATE PROCEDURE) 🧿MySQL修改存储过程(ALTER PROCEDURE) 🧿MySQL删除存储过程(DROP …

手动搭建gateway,项目集成gateway实现Token效果

目录 背景步骤1、首先创建springboot项目2、引入依赖3、配置文件!!!!!(超级重要!!!根据自己的需要进行配置)4、相关类我们在服务中进行的白名单中接口的操作如…

基于 FFmpeg 的跨平台视频播放器简明教程(七):使用多线程解码视频和音频

系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程(一):FFMPEG Conan 环境集成基于 FFmpeg 的跨平台视频播放器简明教程(二):基础知识和解封装(demux)基于 FFmpeg 的跨平台视频…

生产环境Session解决方案、Session服务器之Redis

目录 一、服务器配置 二、安装nginx 三、安装配置Tomcat: 四、配置session Session服务器之Redis Redis与Memcached的区别 安装部署redis 一、服务器配置 IP地址 主机名 软件包列表 192.168.100.131 huyang1 nginx 192.168.100.133 huyang3 JDK Tomca…

[STL]list使用介绍

[STL]list使用 注:本文测试环境是visual studio2019。 文章目录 [STL]list使用1. list介绍2. 构造函数3. 迭代器相关函数begin函数和end函数rbegin函数和rend函数 4. 容量相关函数empty函数size函数 5. 数据修改函数push_back函数和pop_back函数push_front函数和pop…

位图和布隆过滤器+哈希切分思想

文章目录 一.位图(bitset)底层实现: 二.布隆过滤器(bloomFilter)底层实现: 三.哈希切分思想 一.位图(bitset) 位图是一种以一个比特位为数据记录单元的哈希表 ,以无符号整数为key值,采用直接定址法(不存在哈希冲突的问题),其哈希映射函数为 f ( k e y ) k e y ( k e y 的存在…

快速排序qsort讲解

hello大家好,我是c语言boom家宝,今天为大家分享的博客内容是qsort快速排序,简称快排的一个知识点的讲解。 在讲到快排之前,允许博主先提一嘴冒泡排序。大家在c语言的学习过程中,冒泡排序是必不可少会学习到的一个思想&…

Hudi数据湖技术引领大数据新风口(三)解决spark模块依赖冲突

文章目录 解决spark模块依赖冲突2.2.6 执行编译命令2.2.7 编译成功 下一章 核心概念后记 解决spark模块依赖冲突 修改了Hive版本为3.1.2,其携带的jetty是0.9.3,hudi本身用的0.9.4,存在依赖冲突。 1)修改hudi-spark-bundle的pom文…

kafka集群

目录 broker ZooKeeper consumer group(消费者组) 分区(Partitions) 副本(Replicas) 主题(Topic) 偏移量(offset) broker 一个kafka进程就是一个broker…

备战秋招 | 笔试强训17

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、假设A为抽象类,下列声明()是正确的 A. int fun(A); B. A Obj; C. A fun(int); D. A *p; 2、虚函数可不可以重载为内联? A. 可以 B. 不可以 C. 语法…

uni-app踩坑记

打包h5如何配置域名: 在manifest.json中配置域名 配置完成后无论是测试环境还是正式环境都带上/mobile/,否则会报错404 如何引入调试工具erada: 在默认的index.html中直接引入erada,页面样式会整个错乱,解决方案就是引入官方…

低代码开发平台源码

什么是低代码开发平台? 低代码来源于英文“Low Code,它意指一种快速开发的方式,使用最少的代码、以最快的速度来交付应用程序。通俗的来说,就是所需代码数量低,开发人员门槛低,操作难度低。一般采用简单的图…

学习笔记|大模型优质Prompt开发与应用课(二)|第二节:超高产文本生成机,传媒营销人必备神器

文章目录 01 文字写作技能的革新,各行各业新机遇四大类常见文字工作新闻记者的一天新闻记者的一天–写策划prompt 新闻记者的一天–排采访prompt生成结果prompt生成结果 大模型加持,文字写作我们如何提效营销创作营销创作-使用预置法为不同平台生成文案p…

产品开发八大模块交流︱奇瑞新能源汽车产品开发院院长荣升格

奇瑞新能源汽车股份有限公司研发中心/产品开发院院长荣升格先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:产品开发八大模块交流。大会将于8月12-13日在北京举办,敬请关注! 议题简要: VUCA时代…

从源码分析Handler面试问题

Handler 老生常谈的问题了,非常建议看一下Handler 的源码。刚入行的时候,大佬们就说 阅读源码 是进步很快的方式。 Handler的基本原理 Handler 的 重要组成部分 Message 消息MessageQueue 消息队列Lopper 负责处理MessageQueue中的消息 消息是如何添加…

用WhatsApp开拓和跟进客户,需要注意这些雷点

我们很多新手小白在利用WhatsApp开拓和维护客户的时候,总是容易犯一些错误,踩到雷点,这不利于客户对企业的印象,不利于增长,下面我们来说一些需要注意的点: 1、专业正确的用语 不管外贸人是跟进哪个国家…

29.Git版本控制工具

1.Git简介 Git是一开源的分布式版本控制系统,提供了存储代码、管理版本历史、分支和合并等功能。 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。它的主要目的是跟踪和记录软件开发过程…

双重for循环优化

项目中有段代码逻辑是个双重for循环,发现数据量大的时候,直接导致数据接口响应超时,这里记录下不断优化的过程,算是抛砖引玉吧~ Talk is cheap,show me your code! 双重for循环优化 1、数据准备2、原始双重for循环3、…