Kubernetes 几大概念的作用
更详细的组件通信流程
Kubernetes 主要由以下几个核心组件组成:
1. etcd 保存了整个集群的状态;
2. API Server 提供了资源操作的唯一入口,并提供认证,授权,访问控制,API 注册和发现等机制;
3. Controller Manager 负责维护集群的状态,比如故障检查,自动扩展,滚动更新等;
4. Scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
5. Kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI) 和网络(CNI)的管理;
6. Container Runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);
7. Kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡;
理解 k8s 核心几块资源
k8s 默认的组件很多,每一个 Pod 控制器(工作负载),以及网络插件组件,没法一个个的去读,前期也都被封装在了底层,也关心不到。
因此,只聊我们能用到的几个组件,如 Pod 创建,需要用到几个组件,需要背一背,以及查看对应的资源,在机器上的容器进程信息。
后续不断的加入新知识,再去理解对应的组件,即可循序渐进的理解 k8s 的复杂知识。
当然,建议也是,平日里看 k8s 官网文档,以及如 k8s 权威指南 v5版本书籍,去阅读理论知识,扩充自己的理论知识,更合适。v1-v5
上课,为了更快速的,理解,操作,k8s 组件该如何玩。
1) .快速学会玩法
2).再去看资料理解本质原理
1. CRI
容器运行时 | Kubernetes
容器运行时,这是 k8s 组件之一,负责容器运行。
默认情况 k8s 使用 CRI 容器运行时接口,和你部署的容器交互。
如果同时检测你部署了 docker engine,containerd 两款容器,优先会选用 docker
2. docker engine
https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtime/#docker
负责 Node 上容器的管理工作,创建 docker 容器实例。
3. kubelet
安装在 Node 节点上的代理程序,用来管理 Pod, 容器,镜像,Volume等。
4. kube-proxy
安装在 Node 上的网络代理程序,提供网络代理,负载均衡,和 Service 通讯
5. k8s 重要资源(学会用 k8s 就靠这个)
不属于k8s的资源,属于重要概念
一. Node
(不属于k8s的资源,属于重要概念)-ECS机器 k8s 运行的一个环境
Pod等资源,属于 k8s 安装好后的,集群内的一个资源信息。
Node 是 Pod 真正运行的主机,可以是物理机,也可以是虚拟机。
为了管理 Pod,每个 Node 节点上至少要运行 container runtime(比如 docker 或 rkt), kuberlet 和 kube-proxy 服务。
1. k8s 工作节点,node,运行环境可以是:::vmware 创建的一个虚拟机,k8s-node-11 k8s-node-12
2. node 上具体运行啥呢?运行容器,k8s 部署的应用,都是跑在容器里,node 上还得安装 docker,
3.初始化,运行工作节点,或者主节点,背后的逻辑:
a. 下载 k8s 自身的一些组件的镜像。
b. 运行镜像,创建对应的容器,到对应的目标机器上(k8s-master,k8s-node-11,k8s-node-12)
这就是我们主要部署的架构逻辑
k8s-node 的部署逻辑
# POD(10.10.10.3) 根容器 创建一个隔绝的名称空间 Pause/Infra
Volume 容器1 容器2 容器3
k8s-node-12(阿里云ECS) 先安装好 docker,kubelet组件# POD(10.10.10.2) 根容器 创建一个隔绝的名称空间 Pause/Infra
Volume 容器1 容器2
k8s-node-11(阿里云ECS) 先安装好 docker,kubelet组件# POD(10.10.10.4) 根容器 创建一个隔绝的名称空间 Pause/Infra
Volume 容器1
k8s-node-13(阿里云ECS) 先安装好 docker,kubelet组件# 共享资源 kubelet Docker kube-proxy
kubelet 和 master 的 api-server 通信 决定容器创建的信息获取,信息更新。
kube-proxy 在 k8s 里,容器要对外提供网络访问,以及 ip 地址设置等。底层基于 iptables 的规则转发数据包,修改数据包。
二 container
Container(容器) 是一种便携式,轻量级的操作系统级虚拟化技术。
它使用 namespace 隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便的在任何地方运行。
由于容器体积小且启动快,因此可以在每个容器镜像中打包一个应用程序,这种一对一的应用镜像关系拥有很多好处,使用容器,不需要与外部的基础架构环境绑定,因为每一个应用程序都不需要外部依赖,更不需要与外部的基础架构环境依赖,完美解决了从开发到生产环境的一致性问题。
容器同样比虚拟机更加透明,这有助于监测和管理。尤其是容器进程的生命周期由基础设施管理,而不是被进程管理隐藏在容器内部,最后,每个应用程序用容器封装,管理容器部署就等同于管理应用程序部署。
其他容器的优点还包括:
-
敏捷的应用程序创建和部署:与虚拟机镜像相比,容器镜像更易用,更高效。
-
持续开发,集成和部署:提供可靠与频繁的容器镜像构建,部署和快速简便的回滚(镜像是不可变的)。
-
开发与运维的关注分离:在构建/发布时及创建容器镜像,从而将应用与基础架构分离。
-
开发,测试与生产环境的一致性:在笔记本电脑上运行和云中一样。
-
可观测:不仅显示操作系统的信息和度量,还显示应用自身的信息和度量。
-
云和操作系统的分发可移植性:可运行在 Ubuntu,RHEL,CoreOS,物理机,GKE以及其他任何地方。
-
以应用为中心的管理:从传统的硬件上部署操作系统提升到操作系统中部署应用程序。
-
松耦合,分布式,弹性伸缩,微服务:应用程序被分成更小,更独立的模块,并可以动态管理和部署-而不是运行在专用设备上的大型单体程序。
-
资源隔离:可预测的应用程序性能。
-
资源利用:高效率和高密度。
1. Pod
-
Kubernetes 使用 Pod 来管理容器,每个 Pod 可以包含一个或多个紧密关联的容器。
-
Pod 是一组紧密关联的容器集合,它们共享 进程间通信 和 Network namespace, 是 Kubernetes 调度的基本单位。
-
Pod 内的多个容器共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
-
Pod 的设计理念是支持多个容器在一个 Pod 中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
-
Pod 是 k8s 集群中所有业务类型的基础,可以看作运行在 k8s 集群中的小机器人,不同类型的业务就需要不同类型的小机器人去执行。
-
目前 k8s 中的业务主要可以分为长期伺服型(long-running), 批处理型 (batch), 节点后台支撑型(node-daemon) 和有状态应用型(stateful application)。
-
分别对应的小机器人控制器为 Deployment, Job, DaemonSet 和 StatefulSet.
1. Pod 是在 k8s 集群中运行部署应用或服务的最小单元,它是可以支持多容器的,
2. Pod 的 IP 是随机变化的,删除 Pod ,IP 变化
3. Pod 内部有一个根容器
4. 一个 Pod 内可以有一个,多个容器 比如 nginx pod 容器组,mysql pod 容器组 等
5. 一个 Pod 内的所有容器,共享根容器的网络名称空间,文件系统,进程资源
6. 一个 Pod 内的容器网络地址,由根容器提供。比如:pod 部署的多种形态
Pod1 10.10.10.1 Pod1 这个容器组可以包含一个容器 或者多个容器 根据你的需求而定Pod2 10.10.10.2 无状态 无需数据卷
可以跑一个 nginx-pod nginx1.14 nginx-pod 容器也会有自己的 pod id 这是 一个无状态的 nginx-pod 容器Pod3 10.10.10.3 持久化容器内的数据,以卷的形式,放在宿主机上(k8s-node节点了)
可以涉及存储 把它的数据以卷的形式 映射 到宿主机上
nginx-pod /var/log/nginx/ 涉及存储卷 卷的数据依然映射到宿主机上 /linux0224/nginx/logsPod4 10.10.10.4 一个 Pod4 容器组中 运行多个容器共享一个数据卷Pod4 10.10.10.5 IP address volume containerized app# Pod 可以是虚拟机 k8s-node-12 也可以是物理机,或者阿里云服务器
1.下载安装(yum install/rpm -ivh) docker 容器引擎
2. 初始化时,自动生成 kubelet 与 kube-proxy 组件
3.Pod 你部署的一个业务容器组,一个,多个容器,都被 pod 管理了# Pod 部署的多种形态,区分,有无数据要持久化,以及容器有无数据共享
1. 无状态 无需数据卷
2. 持久化容器内的数据,以卷的形式,放在宿主机上(k8s-node节点了)
3. 形态3,一个 Pod 下的多个容器共享一个数据卷 比如 一个 pod 下,运行2个 wordpress 容器,的静态数据,读取 NFS # Pod 就想豌豆一样,里面的豆子就像是一个个容器,共享网络,存储 一个个豆子容器被一个豌豆荚的 pod 管理
即碗豆子容器被管理豌豆荚容器管理着 都来自于豌豆荚设置的一个隔离环境
创建 Pod 请求走向
-
API Server 负责 etcd 存储的所有操作,且只有 API Server 才直接操作 etcd 集群
-
API Server 对内 (集群中的其他组件) 和对外 (用户) 提供统一的 REST API,其他组件均通过 API Server 进行通信
-
Controller Manager, Scheduler, Kube-proxy 和 Kubelet 等均通过 API Server watch API 监测资源变化情况,并对资源作相应的操作。
-
所有需要更新资源状态的操作均通过 API Server 的 REST API 进行
-
-
API Server 也会直接调用 Kubelet API (如 logs,exec,attach等),默认不校验 Kubelet 证书,但可以通过 --kubelet-certificate-authority 开启(而 GKE 通过 SSH 隧道保护他们之间的通信)
Pod 是如何被创建的
1.运维执行创建 Pod 请求(一个 yaml 文件,记录了业务应用的名字,镜像,如何部署等信息),提交给 api-server
2.api-server 接收请求后将资源清单的信息写入 etcd
3.etcd 存储好信息后反馈 api-server
4.api-server 告知 scheduler 事件信息,scheduler 发现有一个新 pod ,但是没有绑定 node,通过资源清单信息以及算法选择合适的 node
5.将要 pod 和 node 绑定的信息告诉 api-server
6.api-server 将调度结果写入 etcd
7.etcd 更新好 pod 的信息后继续反馈 api-server
8.此时 kubelet 组件(目标 node) watch 到有一个新 pod 被分配过来了,获取 pod 信息,根据 pod 描述内容创建对应容器
9.kubelet 反馈 pod 创建结果(docker 信息) 给 api-server,且写入 etcd
10. 最终结束一个 pod 的完整创建流程
架构组件的认识
1.系统各个组件分工明确(APIServer 是所有请求入口,CM 是控制中枢,Scheduler 主管调度,而 Kubelet负责运行),配合流畅,整个运行机制一气呵成。
2. 除了配置管理和持久化组件 ETCD,其他组件并不保存数据,意味 除ETCD外 其他组件都是无状态的。
3. 因此,从架构设计上对 kubernetes 系统高可用部署提供了支撑。
4. 同时因为组件无 状态,组件的升级,重启,故障等并不影响集群最终状态,只要组件恢复后就可以从中所处继续运行。
5. 各个组件和 kube-apiserver 之间的数据推送都是通过 list-watch 机制来实现。
容器的运行状态
创建 pod 是为了运行容器,容器有运行状态,表现为创建的成功,失败,问题。
https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/kubenetes 会跟踪 Pod 中每个容器的状态,就像它跟踪 Pod 总体上的阶段一样,你可以使用容器生命周期回调 来在容器一旦调度器将 pod 分配给某个节点,kubelet 就通过 容器运行时 开始为 pod 创建容器,容器的状态有三种,waiting要检查 Pod 中容器的状态,你可以使用 kubectl describle pod <pod 名称> 其输出中包含 Pod 中每个容器的状态。每种状态都有特定的意义:Waiting (等待)
如果容器并不在 Running 或者 Terminated 状态之一,他就处在 Waiting 状态,处于 Waiting 状态的容器仍在运行它。。。Running (运行中)
Running 状态表明容器正在执行状态并且没有问题发生,如果配置了 postStart 回调,那么该回调已经执行且已完成,如果。。。Terminated(已终止)
处于 Terminated 状态的容器已经开始执行并且或者正常结束或者或者因为某些原因失败,如果你使用 kubectl 来查询包含 Termnated 如果容器配置了 preStop 回调,则该回调会在容器进入 Terminated 状态之前执行
2. Label
Label 也是面试发问的点
Label 是识别 Kubenetes 对象的标签,以 key/value 的方式附加到对象上 (key最长不能超过63字节,value可以为空,也可以是不超过253字节的字符串)。
Label 不提供唯一性,并且实际上经常是很多对象 (Pods) 都使用相同的 label 来标志具体的应用。
label 定义好后其他对象可以使用 Label Selector 来选择一组相同 label 对象(比如 ReplicaSet 和 用 label 来选择一组 Pod),Label Selector 支持以下几种方式:
-
等式,如 app=nginx 和 env!=production
-
集合,如 env in (production, qa)
-
多个 label (它们之间是 AND 关系),如 app=nginx,env=test
1. label 就像身份证标签一样,用于标识 k8s 的对象 2. 我们传统的机器上应用查找,那是基于 ip:port,但是在 k8s 里,更多匹配关系,都是通过 label 来查找
3. Namespace
k8s 里可以基于 namespace,管理不同环境下的资源,也是一个重要资源,形成逻辑上的不同的项目组。
Namespace 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组成用户组。常见的 pods, services,replication controllers 和 deployment 等都是属于某一个 namespace 的 (默认是 default)而 node , persistentVolumes 等 不属于任何 namespace.
4.Controller
k8s 控制器种类有很多,用来在不同的场景,如何更好的管理 Pod
1. 上面于超老师也说了,POD可以理解为 k8s 里面的干活的小机器人,不同的类型都要用不同的机器人去执行, 2. 控制这些小机器人的控制器,就主要分为
Replication Controller
-
也叫 RC 控制器,副本控制器,控制 pod 的副本数;
-
RC 是 k8s 集群中最早的保证 Pod 高可用的 API 对象;
-
通过监控运行中的 Pod 来保证集群中运行指定数目的 Pod 副本;
-
指定的数目可以是多个也可以是1个;
-
当少于指定数目, RC 就会启动运行新的 Pod 副本;
-
多于指定数目,RC 就会杀死多余的 Pod 副本;
-
严格根据你定义的数量,确保POD数量
-
即使在指定数目为1的情况下,通过 RC 运行 Pod 也比直接运行 Pod 更明智,因为 RC 也可以发挥它高可用的能力,保证永远有1个 Pod 在运行,(pod 挂了,容器就挂了,机器人也就挂了,有控制在,就不怕应用挂了)
RC 是 k8s 较早期的技术概念,比如控制小机器人提供高可用的 Web 服务,启动如3个 pod 副本,也就是3套应用后端。
Replica Set, RS
RS 是 RC 控制器的下一代,也提供副本数,确保 pod (容器的高可用) ,
RS 控制器一般不会直接用,而是结合另一种控制器 (Deployment) 以及更多参数使用。
Deployment
部署控制器,主要用 k8s 部署应用就是靠这个。
Deployment 表示用户对 k8s 集群的一次更新操作。
部署是一个比 RS 应用模式更广泛的 API 对象,可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。
滚动升级一个服务,实际是创建一个新的 RS,然后逐渐将新 RS 中副本数增加到理想状态,将旧 RS 中的副本数减小到0的复合操作;
这样一个复合操作用一个 RS 是不太好描述的,所以用一个更通用的 Deployment 来描述。
以 k8s 的 发展方向,未来对所有长期服务型的业务的管理,都会通过 Deployment 来管理。
(LNMP就是典型代表,需要高可用,负载均衡的应用集群,积极更新多个后端,这些所有的)
长期服务型的应用特点在于业务应用提供访问,有的 Node 上 可能有改 pod ,有的 Node 可以没有
DaemonSet
-
后台支撑服务集控制器的功能在于关注 k8s 中的 Node (物理机,虚拟机)
-
能保证每个节点上都有一个此类的 Pod 在运行
-
这种特性,就很实用用于部署如监控软件的 agenl,采集每一个目标 Node 的资源数据,
-
-
节点可以所有集群中的机器,也可能是基于 NodeSelector选定的部分节点。
-
DaemonSet 主要用于
-
日志采集
-
监控采集
-
存储
-
这几类服务的运行
-
SeatefulSet
有状态服务集在 k8s 1.3 版本后发布,之前于超老师说过,nginx 此类应用一般是无状态的,可以随意创建,删除;
还有一种就是有状态(stateful)的应用。
RC,RS,deployment 主要提供无状态服务的部署, pod 的名字也都是随机生成的,一个 pod 挂了 ,重建一个就好,pod 的。。。而 stateful 用来控制有状态的,每一个 pod 的名字是预先定义好的,不能更改;
无状态的 pod 一般不会挂载存储,保证 pod 共享状态即可,可以随意创建,删除;
有状态的 pod ,pod 都会单独挂载一个存储,如果 pod 出了问题,其他节点要重新创建 pod,并且获取原有 pod 的存储信息,继续。。。这个特性明显就是提供给数据库使用。
5. Service
上述讲的 pod 控制器,是实现了 Pod,容器被创建在目标 Node 机器,以及确保了数量,副本数;
但是目前还没说,这些 Pod 该如何访问? 分散在不同的机器,通过什么 ip 去访问?
Node 节点主要就是 kubelet 和 api-server 通信,Pod 管理,也就是 docker 管理以及 kube-proxy 实现网络代理功能。
pause-amd64 是 kubernetes 基础设施的一部分,kubernetes 管理的所有 Pod 里,pause-amd64容器是第一个启动的,用于实现 pause container 作为 Pod 里其他所在 container 的 parent container,主要 有两个职责:
1. 是 Pod 里其他容器共享 linux namespace 的基础。
2. 扮演 PID 1 的角色,负责处理僵尸进程。
Kubernetes 的官网解释:
https://github.com/kubernetes/kubernetes/tree/master/build/pause
参考资料
https://jimmysong.io/kubernetes-handbook/concepts/pause-container.html
https://lib.jimmysong.io/
相关文章:
Kubernetes 几大概念的作用
更详细的组件通信流程 Kubernetes 主要由以下几个核心组件组成: 1. etcd 保存了整个集群的状态; 2. API Server 提供了资源操作的唯一入口,并提供认证,授权,访问控制,API 注册和发现等机制; …...

力扣199. 二叉树的右视图(DFS,BFS)
Problem: 199. 二叉树的右视图 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 无论是DFS还是BFS我们都要思考到达二叉树的每一层(或者每一层中的每一个节点)时,我们都该如何按题目要求做出对应得处理!!!在本体中我们主要是&#x…...
[数据集][目标检测]光伏板太阳能版缺陷检测数据集VOC+YOLO格式2400张3类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2400 标注数量(xml文件个数):2400 标注数量(txt文件个数):2400 标注…...

根据QQ号获取暗恋的人的全部歌单
文章目录 前言一、成果展示二、后端开发流程三、前后端障碍与难点解决四、待扩展内容五、总结 前言 本人喜欢使用QQ音乐听歌,并且喜欢点击好友栏目观看最近在听,了解暗恋的人最近在听什么歌曲,知己知彼,百战不殆。但是每次都需要…...

解决火狐浏览器访问地址受限制问题(This address is restricted)
问题如下图: This address is restrictedThis address uses a network port which is normally used for purposes other than Web browsing. Firefox has canceled the request for your protection. 此地址受到限制 此地址使用通常用于 Web 浏览以外的目的的网…...

基于MPPT的太阳能光伏电池simulink性能仿真,对比扰动观察法,增量电导法,恒定电压法
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 扰动观察法 (Perturb and Observe Method) 4.2 增量电导法 (Incremental Conductance Method) 4.3 恒定电压法 (Constant Voltage Method) 5.完整工程文件 1.课题概述 在simulink中,实…...

HUAWEI 华为交换机 配置 MAC 防漂移 防MAC伪造示例
组网需求 某企业网络中,用户需要访问企业的服务器。如果某些非法用户从其他接口假冒服务器的MAC 地址发送报文,则服务器的 MAC 地址将在其他接口学习到。这样用户发往服务器的报文就会发往非法用户,不仅会导致用户与服务器不能正常通信&…...
Java 反射机制实践案例
Java反射机制允许程序在运行时查询和操作对象的类信息,甚至可以调用类的方法、访问字段和创建新的对象。下面通过几个简单的示例来展示Java反射的实践应用。 1. 获取Class对象的引用 有三种主要方式可以在运行时获得Class对象的引用: // 方法1: 通过对…...

OJ:循环队列
622. 设计循环队列 - 力扣(LeetCode) 思路 思路:首先循环队列的意思是:空间固定,就是提前开辟好,满了就不能插入了,但是删除数据后仍有空间,删除循环队列里面的数据后,保…...

专业140+总430+电子科技大学858信号与系统考研经验成电电子信息与通信工程,电科大,真题,大纲,参考书。
今年考研成绩出来,初试专业课858信号与系统140,总分430,其余各门分数都比较平稳,总分好于自己估分,应群里很多同学要求,我总结一下自己的复习经验。首先我是一个大冤种,专业课资料学长给了一套&…...
C++:STL - set map
C:STL - set & map 关联式容器pairset模板参数typedef的类型构造函数迭代器常规接口特殊接口 multisetmap模板参数typedef的类型常规接口特殊接口 multimap 关联式容器 关联式容器是C标准库提供的一种数据结构,用于存储操作键值对(key-v…...

一招鲜吃遍天之Haproxy集群
四层: LVS:Linux Virtual Server Nginx: HAProxy:High Availability Proxy 七层: HAProxy Nginx 硬件: F5 F5 | 多云安全和应用交付 Netscaler NetScaler: Application Delivery at Scale Array 北京华耀科技…...

数据库的筛选条件
【一】筛选过滤条件 【1】完整的查询语句 -- 查询当前表中的全部数据select * from 表名 where 筛选条件;-- 查询当前表中的指定字段的数据select 字段名,字段名 from 表名 where 筛选条件;# 执行顺序from where select select 你选择的列1, 你选择的列2, ... from 查询的…...

MySQL学习笔记(一)数据库事务隔离级别与多版本并发控制(MVCC)
一、数据库事务隔离级别 数据库事务的隔离级别有4种,由低到高分别为Read uncommitted (读未提交)、Read committed(读提交) 、Repeatable read(可重复读) 、Serializable (串行化&a…...

如何在Linux上为PyCharm创建和配置Desktop Entry
在Linux操作系统中,.desktop 文件是一种桌面条目文件,用于在图形用户界面中添加程序快捷方式。本文将指导您如何为PyCharm IDE创建和配置一个 .desktop 文件,从而能够通过应用程序菜单或桌面图标快速启动PyCharm。 步骤 1: 确定PyCharm安装路…...

Igraph入门指南 4
二、图的创建 图分有向图和无向图,所以图的创建有各自的实现方式。 1、手工创建图: 1-1 通过文本创建:graph_from_literal 通过每项提供两个顶点名(或ID号)作为一条边的格式,手动创建图,顶点…...

外包干了30天,技术明显退步。。
🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 这次来聊一个大家可能也比较关心的问题,那就是就业城市选择的问题。而谈到这个问题&a…...

数据库 — 增删查改
一、操作数据库、表 显示 show databases;创建 create database xxx;使用 use xxx; 删除 drop database xxx;查看表; show tables; 查看表结构 desc 表名; 创建 create table 表名(字段1 类型1,字段2 类型2,.... ); 删除 drop table 表名; 二…...

eclipse搭建java web项目
准备条件 eclipsejdk1.8 (配置jdk环境)apache-tomcat-8.5.97(记住安装位置) 一 点击完成 开始创建javaweb项目 import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.s…...
gitlab-ci_cd语法CICD
工作原理 1、将代码托管在git 2、在项目根目录创建ci文件.gitlan-ci.yml 在文件中指定构建,测试和部署脚本 3、gitlab将检测到他并使用名为git Runner的工具运行脚本 4、脚本被分组为作业,他们共同组成了一个管道gitlab-ci的脚本执行,需要自…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...

【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...