当前位置: 首页 > news >正文

k8s自动化安装脚本(kubeadm-1.23.7)

文章目录

  • 介绍
    • 软件架构
    • 版本介绍
    • 更新内容
      • 2023-02-19
      • 2023-02-15
      • 2023-02-14
      • 2023-02-10
      • 2022-10-20
      • 2022-08-06
        • 准备部署包
  • 操作步骤
    • 环境准备
      • 结构
        • 备注
    • 解压部署包
    • 修改host文件
    • 脚本使用方式
    • 初始化环境
      • 验证ansible配置
    • 安装k8s集群
      • 登录master的节点
      • 添加node节点
        • master节点状态检查
  • 组件安装
    • 安装方式
      • 访问prometheus
      • 访问grafana
        • 添加node-exporter面板
      • ingress-nginx
      • kuboard的安装
        • 访问kuboard
          • 纳管集群
    • 证书查看
      • kubeadm 命令查看
      • openssl 命令查看
      • kuboard界面查看
      • 更新证书
        • 验证证书有效期
      • 部署包地址
    • 总结

介绍

  1. 以1.21.1的脚本模板,重构k8s的部署方式(v1.23.7),添加私有仓库的部署及相关离线安装包的方式
  2. 通过kubeadm进行一键式部署k8s集群,根据不同的启动方式,可部署单节点、一主多从、多主多从高可用的k8s集群
  3. 通过ansible快速部署k8s的基础组件(nfs、helm、ingress、monitoring【联网|离线镜像】、kuboard【联网】)

软件架构

  1. 通过部署包中的run.sh进行统一入口,进行初始化环境(部署节点)
  2. ansible+shell实现自动获取host文件中的相关信息进行自动化部署

版本介绍

  1. 需要提前准备多台主机,根据准备机器的多少,修改host文件,本环境是为了开发环境中快速部署k8s集群
  2. 采用kubeadn安装,采用本地yum仓库,版本是:1.23.7
  3. 安装docker的yum源是基于Centos7.5/7.6,版本是:23.0.1
  4. 安装ansible时,使用离线安装,版本: 2.9.27
  5. 安装helm时,使用离线安装,版本: v3.8.1
  6. 高可用安装时:采用haproxy(1.5.18-9)+keepalived(1.3.5-19)
  7. 添加kuboard:v3面板的安装(ansible)主机:单节点、单容器

更新内容

2023-02-19

  1. 修改k8s版本及docker的版本,优化后续修改源镜像的操作
  2. 去除dashboard面板,添加kuboard:v3面板的安装

2023-02-15

  1. 离线安装helm,同时repo add 仓库(联网)
  2. 默认不安装,控制按钮在host文件中的k8s_helm_enable参数
  3. 添加metrics-server组件,用于实现kubectl top pod(离线安装)
  4. 默认安装,控制按钮在host文件中的metrics_server_enable参数

2023-02-14

  1. 优化监控组件,通过github上找到的yaml,结合ansible进行自动化的部署到k8s集群上
  2. k8s master节点的第一台机器上/opt/deploy/grafana/node_export.json文件可以导入到grafana平台上,用于监控物理机的机器资源信息
  3. prometheus-k8s服务是statefulsets的服务,且有资源限制,内存400Mi,过低会导致服务无法启动
  4. 安装监控组件时,需要确定服务的基础设施是否符合预期

2023-02-10

  1. 处理内核参数有几率加载失败的情况
  2. 重构初始化环境的脚本,减少初始化时出现的错误
    • 如果失败,重新执行即可
  3. 重写设置主机名的角色,默认删除后覆盖/etc/hosts文件
  4. 新增nfs服务的安装,可以通过storageClassName: nfs-storage字段添加pvc
    • nfs目前只支持单节点部署,不支持自动化对应外部nfs
    • 对接外部nfs需要手动修改对应的yaml即可,后续详细介绍

2022-10-20

  1. 添加kubeadm自动部署高可用版本,新增haproxy+keepalived
  2. 修复dashboard权限问题,添加ingress的部署方式(默认安装,通过)
  3. 部署包已更新至下述链接

2022-08-06

  1. 时间太久,忘记了。。。

准备部署包

https://download.csdn.net/download/qq_44246980/85695007

新版本未成功上传

操作步骤

环境准备

作用IP地址操作系统配置
k8s-master01192.168.1.21CentOS7最低配置2C2G
k8s-master02192.168.1.22CentOS7最低配置2C2G
k8s-master02192.168.1.23CentOS7最低配置2C2G
k8s-node01192.168.1.31CentOS7最低配置2C2G
ansible192.168.1.31CentOS7最低配置1C1G

结构

在这里插入图片描述

  1. node节点可以填写多个,根据实际情况确认,但是不能超出单master节点的限制
  2. master节点至少是三个少一个都不是高可用版本
  3. 高可用版本keepalived需要提前确认好vip
  4. 建议机器处于同一网段中,或者同一局域网内

备注

  1. 建议单独找一台机器用于部署ansible服务,可以不接受
  2. 但是需要确保机器资源充足,且相关的端口不会冲突(38081【yum】、38082【registry】)
  3. 相关的网络关系需要提前确认
  4. 三台master节点,可以是2n+1台,目前因本地环境,只测试了三台master其他节点尚未涉及

解压部署包

#上传部署包(xshell)
cd /opt                      #目录随意
yum -y install lrzsz 
rz install_k8s_kubeadm_v1.23.7_20230219.tar.gz
#解压
tar -xvf install_k8s_kubeadm_v1.23.7_20230219.tar.gz

修改host文件

#部署机器,初始脚本、安装包镜像
[deploy_server]
192.168.1.31 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 #多主多从
[kubernetes_master]
192.168.1.21 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master01"
192.168.1.22 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master02"
192.168.1.23 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master03"[kubernetes_node]
#192.168.1.23 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-node01"
#192.168.1.24 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-node02"#脚本导致添加必须是master01节点
[nfs]
#192.168.1.21 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22#双节点
[haproxy_keepalived]
192.168.1.21 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master01"
192.168.1.22 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master02"#不填写,则不安装镜像仓库
[docker_repositry]
#192.168.1.136 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-node01"[nodes:children]
kubernetes_master
kubernetes_node[all:vars]
#脚本解析主机信息,层级默认只能添加3个,即3个master,3个node
Number="3"
master_vip="192.168.1.120"               #keepalived使用的vip
add_node_hosts="no"                      #添加主机信息(yes=合并,no=删除后新建[覆盖])######################################################################################
#布尔值true or false
Basic_enable="true"                       #安装基础软件包
set_host_enable="true"                    #设置主机名注入/etc/hosts文件
metrics_server_enable="true"              #安装metrics_server,kubectl top pod 
######################################################################################
#可选组件
######################################################################################
ingress_enable="false"                    #安装ingress服务
k8s_nfs_enable="false"                    #安装nfs-client服务,上述的地址必须填写,否则nfs客户端会启动失败
k8s_helm_enable="false"                   #k8s master节点安装helm客户端(在线)
######################################################################################
#监控组件、k8s v1.23.7版本以上(在线)
#监控组件的镜像采用在线的模式,需要联网自动下载,减少离线安装包的大小
#git clone https://github.com/prometheus-operator/kube-prometheus.git
monitoring_enable="false"                  #是否安装监控组件,默认不安装
clean_monitoring="false"                   #是否清理当前已安装的监控组件,注意,修改前需要确认监控组件已经部署完成后需要清理
#监控组件服务  
nodeExporter_enable="true"                 #采集器node_export
prometheus_enable="true"                   #安装Prometheus服务
grafana_enable="true"                      #是否安装grafana服务
ControlPlane_enable="true"                 #部署k8s ControlPlane,控制面板,里面有很多的设置放在一起的,用来设置规则
prometheusAdapter_enable="true"            #prometheusAdapter
prometheusOperator_enable="true"           #prometheusOperatorkube_state_metrics_enable="false"          #kube_state_metrics
alertmanager_enalbe="false"                #是否安装alertmanager服务
blackboxExporter_enalbe="false"            #是否安装blackboxExporter服务
  1. 一主多从需要把kubernetes_master里只添加一个地址
  2. 多主多从需要把kubernetes_master里添加三个地址,脚本只支持添加三个master节点
  3. 多主多从同时需要把haproxy_keepalived角色填写

脚本使用方式

[root@registry]# cd /opt/deploy_install_k8s
[root@registry]# ls 
host  images  init  playbook  README.md  run.sh  yum
[root@ansible install_k8s_kubeadm]# sh run.sh 【registry 2023-02-19 03:01:55】 sh run.sh init            初始化环境 
----------------------------------------------------------------------------【registry 2023-02-19 03:01:55】 sh run.sh online          在线安装(kuboard、monitoring组件) 【registry 2023-02-19 03:01:55】 sh run.sh offline         离线安装k8s(1.23.7) 
----------------------------------------------------------------------------【registry 2023-02-19 03:01:55】 sh run.sh ping            验证ansible的主机清单信息(ping) 【registry 2023-02-19 03:01:55】 sh run.sh install         通过host文件进行组件的单独安装 
----------------------------------------------------------------------------【registry 2023-02-19 03:01:55】 sh run.sh load offline    保存离线镜像包(monitoring组件) 【registry 2023-02-19 03:01:55】 sh run.sh load warehouse  导入上面保存的组件 【registry 2023-02-19 03:01:55】 sh run.sh load help       帮助信息 #1. 执行run.sh脚本,获取脚本的执行帮助信息
#2. sh run.sh init    初始化ansible机器,初始化环境章节详细介绍
#3. sh run.sh online  在线安装(kuboard、monitoring组件) ,相关组件的镜像未合并到registry镜像里(减少安装包的大小)
#4. sh run.sh online  离线安装(kuboard、monitoring组件),通过脚本在线下载并保存离线镜像包,然后配合脚本导入离线环境的机器中使用
#5. sh run.sh ping    验证ansible的网络是否正常通信
#6. sh run.sh install 默认在线安装基础组件(monitoring组件),其他的组件则存放在本地的registry镜像仓库里
#7. sh run.sh load offline 虚拟机解压安装包后,执行初始化环境,联网状态下下载(monitoring组件)的离线镜像并打包,存放/tmp
#8. sh run.sh load warehouse 拷贝离线包,到执行目录(执行后提示/tmp/offline/)

初始化环境

[root@registry install_k8s_kubeadm]# sh run.sh online  
Online(在线) Dashboard 
----------------------------------------------------------------------------
1) 初始化环境(ansible))
2) 安装k8s集群[一主多从](1.23.7)
3) 安装k8s集群[多主多从](1.23.7)
4) 添加k8s node节点(1.23.7) 
5) 更新k8s certs,续费10年(1.23.7) 
----------------------------------------------------------------------------
6) docker安装kuboard(v3)[在线安装]
7) k8s安装其他组件(nfs、monitoring、ingress)[在线安装]
----------------------------------------------------------------------------
请输入对应的数字编号:1
请输入部署机的地址(192.168.1.31):【registry 2023-02-19 03:01:24】  docker-ce-23.0.1-1.el7.x86_64已安装,不需要重新部署 【registry 2023-02-19 03:01:24】  docker服务已正常启动!!! 【registry 2023-02-19 03:01:24】 /var/images/deploy Ready to complete 
-----------------------------------------------------------------------------------------  
Loaded image: registry.bcbx.com:38082/bcbx_registry:v1.0.0【repositry.tar】 load repository success  
-----------------------------------------------------------------------------------------  【registry 2023-02-19 03:01:25】 /var/images/repositry Ready to complete 【registry 2023-02-19 03:01:25】 clear /var/images/repositry,please wait!!! 
-----------------------------------------------------------------------------------------  【registry 2023-02-19 03:01:25】 registry rm success 【registry 2023-02-19 03:01:25】 start the image registry success 
-----------------------------------------------------------------------------------------  【registry 2023-02-19 03:01:27】 yum_repo rm success 【registry 2023-02-19 03:01:27】 start the image yum_repo success 
-----------------------------------------------------------------------------------------  【registry 2023-02-19 03:01:29】  ansible-2.9.27-1.el7.noarch已安装,不需要重新部署 【registry 2023-02-19 03:01:29】  Ansible.cfg配置文件修改成功 
#部署机的地址,通过脚本过去的地址,确认无误后直接回车即可

出现上述错误,则重新执行一下
结果如下

请添加图片描述

  1. 安装docker服务
  2. 安装ansible服务,修改配置文件
  3. 准备离线yum仓库
  4. 准备离线registry仓库,相关挂载点是:/var/images/

验证ansible配置

sh run.sh ping

请添加图片描述

安装k8s集群

[root@registry install_k8s_kubeadm]# sh run.sh online
Online(在线) Dashboard 
----------------------------------------------------------------------------
1) 初始化环境(ansible))
2) 安装k8s集群[一主多从](1.23.7)
3) 安装k8s集群[多主多从](1.23.7)
4) 添加k8s node节点(1.23.7) 
5) 更新k8s certs,续费10年(1.23.7) 
----------------------------------------------------------------------------
6) docker安装kuboard(v3)[在线安装]
7) k8s安装其他组件(nfs、monitoring、ingress)[在线安装]
----------------------------------------------------------------------------
请输入对应的数字编号:3
#host文件需要提前修改
#确认host中用户名、密码、ip正确且网络连接正常后,回车,等待执行脚本结束

执行结果如下:
请添加图片描述

登录master的节点

请添加图片描述

添加node节点

  1. 在host文件下的kubernetes_node分组下添加新增的需要新增的节点,并把之前已添加的节点删除
  2. 修改后执行 sh run.sh online脚本,选择4,添加node节点
  3. 脚本正常执行完毕后,检查各个节点的/etc/hosts文件,如果确认对应的域名解析,需要手动添加对应的主机关系
  4. 注意:每次添加node节点时,需要把已填入集群的节点手动删除,否则会出现重复加入的操作导致剧本执行失败
 sh run.sh online

请添加图片描述

master节点状态检查

请添加图片描述

组件安装

请添加图片描述

  1. 默认不安装,手动修改后安装,可以在按照k8s集群后进行安装使用
  2. 也可以在安装集群的是否安装

安装方式

[root@k8s-node01 install_k8s_kubeadm]# sh run.sh  install
  1. 需要前修改上述图片中的布尔值,改为true时,开始执行安装
  2. 因本地环境资源不足,不做演示截图

访问prometheus

访问地址: http://k8s-ip:30090/请添加图片描述

访问grafana

访问地址: http://k8s-ip:30000/
登陆密码: admin/admin

添加node-exporter面板

  1. 下载k8s master节点的第一台机器上/opt/deploy/grafana/node_export.json文件
  2. 通过浏览器登陆grafana平台,通过Dashboards按钮,鼠标停放,选择import
  3. 出现导入界面,选择upload json file按钮,选择下载到本地的文件
  4. 其他都是自动填充的,最后一个选择prometheus data source数据源后点击导入即可

ingress-nginx

请添加图片描述

使用方式,自行百度

kuboard的安装

#在线下载,网速较慢的情况下建议使用云主机下载
docker pull  swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3
docker save  swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3 -i kuboard.tar.gz
docker load -i kuboard.tar.gz
[root@registry ~]# docker load -i kuboard.tar.gz 
2d8252e11370: Loading layer [==================================================>]  3.072kB/3.072kB
22d9813f1d6a: Loading layer [==================================================>]  9.216kB/9.216kB
331120fa4807: Loading layer [==================================================>]  23.75MB/23.75MB
b6e875ecbb12: Loading layer [==================================================>]  18.77MB/18.77MB
9b6a33d74d53: Loading layer [==================================================>]  42.52MB/42.52MB
87405db6d205: Loading layer [==================================================>]  2.024MB/2.024MB
c502deb85597: Loading layer [==================================================>]  28.67kB/28.67kB
f062a9dd21ed: Loading layer [==================================================>]  61.95kB/61.95kB
20f6f032efed: Loading layer [==================================================>]  42.06MB/42.06MB
ba47fe085ef6: Loading layer [==================================================>]  13.32MB/13.32MB
Loaded image: swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3#网速ok,则无需上述操作,直接执行即可
[root@registry install_k8s_kubeadm]# sh run.sh online

请添加图片描述

访问kuboard

http://ansible-ip:18080

纳管集群

请添加图片描述

  1. 详细功能请查看kuboard的官方
  2. https://www.kuboard.cn/

证书查看

kubeadm 命令查看

#可以通过 kubeadm alpha certs check-expiration 命令查看相关证书是否过期。
#注:该命令仅在 v.15 之后的版本可用
kubeadm alpha certs check-expiration
# k8s v1.23.7
kubeadm certs  check-expiration

请添加图片描述

openssl 命令查看

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '

请添加图片描述

kuboard界面查看

请添加图片描述

更新证书

Kubenetes通过脚本自动更新证书有效期脚本来源

[root@registry install_k8s_kubeadm]# sh run.sh online
Online(在线) Dashboard 
----------------------------------------------------------------------------
1) 初始化环境(ansible))
2) 安装k8s集群[一主多从](1.23.7)
3) 安装k8s集群[多主多从](1.23.7)
4) 添加k8s node节点(1.23.7) 
5) 更新k8s certs,续费10年(1.23.7) 
----------------------------------------------------------------------------
6) docker安装kuboard(v3)[在线安装]
7) k8s安装其他组件(nfs、monitoring、ingress)[在线安装]
----------------------------------------------------------------------------
请输入对应的数字编号:5

请添加图片描述

验证证书有效期

请添加图片描述

部署包地址

链接:https://pan.baidu.com/s/1Q31dwjvQJVZOZWxbR4Uv7w?pwd=bcbx
提取码:bcbx

总结

  1. 上述则是当前部署中可运行正常的服务
  2. 执行sh Run.sh init,则可以调试脚本,对应的启动文件,修改,则可以进行调试
  3. 执行sh Run.sh install,修改host文件,则可以进行安装组件

相关文章:

k8s自动化安装脚本(kubeadm-1.23.7)

文章目录介绍软件架构版本介绍更新内容2023-02-192023-02-152023-02-142023-02-102022-10-202022-08-06准备部署包操作步骤环境准备结构备注解压部署包修改host文件脚本使用方式初始化环境验证ansible配置安装k8s集群登录master的节点添加node节点master节点状态检查组件安装安…...

面试题记录

Set与Map的区别 map是键值对,set是值的集合。键,值可以是任何类型map可以通过get获取,map不能。都能通过迭代器进行for…of遍历set的值是唯一的,可以做数组去重,map,没有格式限制,可以存储数据…...

链式前向星介绍以及原理

1 链式前向星 1.1 简介 链式前向星可用于存储图,本质上是一个静态链表。 一般来说,存储图常见的两种方式为: 邻接矩阵邻接表 邻接表的实现一般使用数组实现,而链式前向星就是使用链表实现的邻接表。 1.2 出处 出处可参考此…...

jenkins 安装 -适用于在线安装 后续写个离线安装的

jenkins安装1.下载jenkins2.安装启动3.附件卸载jdk的命令4.配置jenkins一、在jenkins配置文件中配置jdk环境变量二、修改jenkins默认的操作用户1.下载jenkins jenkins官网下载 https://www.jenkins.io/ 点击下载 我是centos系统所以选择centos,点击后按着官方提供…...

【C++】再谈vscode界面调试C++程序(linux) - 知识点目录

再谈vscode界面调试C程序(linux) 配套文档:vscode界面调试C程序(linux) 命令解释 g -g ../main.cpp 编译main.cpp文件; -g:生成调试信息。编译器会在可执行文件中嵌入符号表和源代码文件名&…...

蚂蚁感冒---第五届蓝桥杯真题

目录 题目链接 题目描述 分析: 代码: y总综合​ 666 题目链接 1211. 蚂蚁感冒 - AcWing题库 题目描述 分析: y总真牛逼,掉头等价于穿过,以第一个点为分界点,分别判断 代码: (自…...

常见排序算法--Java实现

常见排序算法--Java实现插入排序直接插入排序折半插入排序希尔排序交换排序冒泡排序快速排序选择排序直接选择排序堆排序归并排序基数排序各种排序方法比较在网上找了些排序算法的资料。此篇笔记本人总结比较,简单注释,觉得比较好理解,且相对…...

算法笔记(九)—— 暴力递归

暴力递归(尝试) 1. 将问题转化为规模缩小了的同类问题子问题 2. 有明确的不需要的继续递归的条件 3. 有当得到子问题结果之后的决策过程 4. 不记录每一个子问题的解 Question:经典汉诺塔问题 1. 理解清楚,基础三个圆盘的移动…...

Flask框架学习记录

Flask项目简要 项目大致结构 flaskDemo1 ├─static ├─templates └─app.py app.py # 从flask这个包中导入Flask类 from flask import Flask# 使用Flask类创建一个app对象 # __name__:代表当前app.py这个模块 # 1.以后出现bug,可以帮助快速定位 # 2.对于寻找…...

【Opencv 系列】 第6章 人脸检测(Haar/dlib) 关键点检测

本章内容 1.人脸检测,分别用Haar 和 dlib 目标:确定图片中人脸的位置,并画出矩形框 Haar Cascade 哈尔级联 核心原理 (1)使用Haar-like特征做检测 (2)Integral Image : 积分图加速特征计算 …...

信源分类及数学模型

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:information-theory】,需要的朋友们自取。或者公众号【AIShareLab】回复 信息论 也可获取。 文章目录信源分类按照信源…...

Games101-202作业1

一. 将模型从模型空间变换到世界空间下 在这个作业下,我们主要进行旋转的变换。 二.视图变换 ,将相机移动到坐标原点,同时保证物体和相机进行同样的变换(这样对形成的图像没有影响) 在这个作业下我们主要进行摄像机的平移变换&am…...

Linux系统之终端管理命令的基本使用

Linux系统之终端管理命令的基本使用一、检查本地系统环境1.检查系统版本2.检查系统内核版本二、终端介绍1.终端简介2.Linux终端简介3.终端的发展三、终端的相关术语1.终端模拟器2.tty终端3.pts终端4.pty终端5.控制台终端四、终端管理命令ps1.直接使用ps命令2.列出登录详细信息五…...

【Mongoose笔记】MQTT 服务器

【Mongoose笔记】MQTT 服务器 简介 Mongoose 笔记系列用于记录学习 Mongoose 的一些内容。 Mongoose 是一个 C/C 的网络库。它为 TCP、UDP、HTTP、WebSocket、MQTT 实现了事件驱动的、非阻塞的 API。 项目地址: https://github.com/cesanta/mongoose学习 下面…...

数据结构概述

逻辑结构 顺序存储 随机访问是可以通过下标取到任意一个元素,即数组的起始位置下标 链式存储 链式存储是不连续的,比如A只保留了当前的指针,那么怎么访问到B和C呢 每个元素不仅存储自己的值还使用额外的空间存储指针指向下一个元素的地址&a…...

【前端】Vue3+Vant4项目:旅游App-项目总结与预览(已开源)

文章目录项目预览首页Home日历:日期选择开始搜索位置选择上搜索框热门精选-房屋详情1热门精选-房屋详情2其他页面项目笔记项目代码项目数据项目预览 启动项目: npm run dev在浏览器中F12: 首页Home 热门精选滑动到底部后会自动加载新数据&a…...

51单片机蜂鸣器的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、有源蜂鸣器和无源蜂鸣器的区别二、代码编写总结前言 本文旨在介绍如何使用51单片机驱动蜂鸣器。 一、有源蜂鸣器和无源蜂鸣器的区别 有源蜂鸣器是一种电子…...

算法练习-链表(二)

算法练习-链表(二) 文章目录算法练习-链表(二)1. 奇偶链表1.1 题目1.2 题解2. K 个一组翻转链表2.1 题目2.2 题解3. 剑指 Offer 22. 链表中倒数第k个节点3.1 题目3.2 题解3.2.1 解法13.2.2 解法24. 删除链表的倒数第 N 个结点4.1 …...

LabVIEW使用实时跟踪查看器调试多核应用程序

LabVIEW使用实时跟踪查看器调试多核应用程序随着多核CPU的推出,开发人员现在可以在LabVIEW的帮助下充分利用这项新技术的功能。并行编程在为多核CPU开发应用程序时提出了新的挑战,例如同步多个线程对共享内存的并发访问以及处理器关联。LabVIEW可自动处理…...

【go语言grpc之client端源码分析二】

go语言grpc之server端源码分析二DialContextparseTargetAndFindResolvergetResolvernewCCResolverWrapperccResolverWrapper.UpdateStatecc.maybeApplyDefaultServiceConfigccBalancerWrapper.updateClientConnState上一篇文章分析了ClientConn的主要结构体成员,然后…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

密码学基础——SM4算法

博客主页:christine-rr-CSDN博客 ​​​​专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...