k8s核心资源对象一(入门到精通)
本文将深入探讨Kubernetes中的核心资源对象,包括Pod、Deployment、Service、Ingress、ConfigMap和Secret,详细解析其概念、功能以及实际应用场景,帮助读者全面掌握这些关键组件的使用方法。
一、pod
1 pod概念
k8s最小调度单元,可以包含一个或多个容器。同一个pod的容器可以共享网络和存储。
2 pod示例
[root@master-1 pod]# cat 02-pods-nginx.yaml
apiVersion: v1
kind: Pod
metadata:name: linux86-web
spec:containers:- name: webimage: nginx:1.24.0-alpineports:- containerPort: 80
[root@master-1 pod]# kubectl apply -f 02-pods-nginx.yaml
[root@master-1 pod]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
linux86-web 1/1 Running 0 82s 10.100.2.4 worker233 <none> <none>
[root@master-1 pod]# curl -I 10.100.2.4
二、deployment
1 介绍
Deployment是用于部署服务的资源,是最常用的控制器
- 管理RS,通过RS资源创建Pod;
- 具有上线部署,副本设置,滚动升级,回滚等功能;
- 提供声明式更新,即可以使用apply命令进行更新镜像版本之类的;
2 更新策略
蓝绿发布:不停止旧版本,直接部署新版本,新版本测试没有问题,就切换到新版本。
优点:无需停机,风险较小
缺点:切换是全量的,如果新版本有问题,则对用户体验有直接影响,需要双倍机器资源
灰度发布:旧版本和新版本共存
将新版本部署到一部分生产环境,让一部分用户先试用,如果没有问题,再逐步扩大范围,把全部服务都切换到新环境。
优点:用户体验影响小,灰度发布过程出现问题只影响部分用户
滚动更新:平滑地将服务更新
3 Deployment滚动发布
[root@master231 deployments]# cat 02-deploy-nginx-strategy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: deploy-nginx-strategy
spec:# 定义升级策略strategy:# 指定升级类型,有效值为Recreate和RollingUpdate.# Recreate:# 先删除所有旧的Pod,再创建新的Pod。# RollingUpdate:# 先删除部分旧的Pod,滚动更新旧的Pod,逐步使用新的Pod替代旧的Pod。# 默认就是基于滚动更新类型。# type: Recreatetype: RollingUpdate# 滚动更新rollingUpdate:# 在升级过程中,在原有旧的Pod基础之上启动的Pod数量。maxSurge: 2# 在升级过程中,指定最大不可用的数量。maxUnavailable: 1#maxSurge: "20%"#maxUnavailable: "10%"replicas: 5selector:matchExpressions:- key: appsvalues: - "v1"- "v2"operator: Intemplate:metadata:labels:apps: v1school: liuxspec:containers:- name: v1# image: harbor.liux.com/liux-apps/apps:v1image: harbor.liux.com/liux-apps/apps:v2imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:name: deploy-strategy
spec:type: NodePortselector:apps: v1school: liuxports:- port: 8888targetPort: 80nodePort: 30000
[root@master231 deployments]#
升级过程
-------------> 第一波
旧的pod: 4
新的pod: 3 -------------> 第二波
旧的pod: 1
新的新的: 3 + 2[root@master231 deployments]# kubectl apply -f 02-deploy-nginx-strategy.yaml
deployment.apps/deploy-nginx configured
service/deploy-strategy unchanged
[root@master231 deployments]# kubectl get po,svc -o wide
#切换版本
[root@master231 deployments]# vim 02-deploy-nginx-strategy.yaml #image: harbor.liux.com/liux-apps/apps:v1image: harbor.liux.com/liux-apps/apps:v2
4.Deloyment蓝绿发布
4.1 部署蓝环境
[root@master231 blue-green]# cat 01-blue.yaml
kind: Deployment
apiVersion: apps/v1
metadata:name: liux-blue
spec:replicas: 3selector:matchLabels:app: bluetemplate:metadata:labels:app: bluespec:containers:- name: v1image: harbor.liux.com/liux-apps/apps:v1---kind: Service
apiVersion: v1
metadata:name: liux-app-svc
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30080selector:app: blue
[root@master231 blue-green]#
[root@master231 blue-green]# kubectl apply -f 01-blue.yaml
deployment.apps/liux-blue created
service/liux-app-svc created
[root@master231 blue-green]#
#测试访问
[root@master231 blue-green]# while true ; do sleep 0.5;curl 10.0.0.233:30080; done
4.2 部署绿环境
[root@master231 blue-green]# cat 02-green.yaml
kind: Deployment
apiVersion: apps/v1
metadata:name: liux-green
spec:replicas: 3selector:matchLabels:app: greentemplate:metadata:labels:app: greenspec:containers:- name: mywebimage: harbor.liux.com/liux-apps/apps:v2
[root@master231 blue-green]#
[root@master231 blue-green]# kubectl apply -f 02-green.yaml
deployment.apps/liux-green created
4.4 切换svc的标签
[root@master231 blue-green]# cat 03-switch-svc-selector.yaml
kind: Service
apiVersion: v1
metadata:name: liux-app-svc
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30080selector:# app: blueapp: green
[root@master231 blue-green]#
[root@master231 blue-green]# kubectl apply -f 03-switch-svc-selector.yaml
service/liux-app-svc configured
5.Deployment灰度发布
5.1 部署旧版本
先将副本数设置为3,随着新版本的创建,将副本逐渐调低到0
[root@master231 canary-huidu]# cat 01-old.yaml
kind: Deployment
apiVersion: apps/v1
metadata:name: liux-old
spec:replicas: 3selector:matchLabels:app: webtemplate:metadata:labels:app: webspec:containers:- name: mywebimage: harbor.liux.com/liux-apps/apps:v1
---
kind: Service
apiVersion: v1
metadata:name: liux-web-svc
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30080selector:app: web
[root@master231 canary-huidu]#
[root@master231 canary-huidu]# kubectl apply -f 01-old.yaml
deployment.apps/liux-old created
service/liux-web-svc created
5.2 部署新版本
先将副本数设置为1,随着新版本的稳定,将副本逐渐调高到3
[root@master231 canary-huidu]# cat 02-new.yaml
kind: Deployment
apiVersion: apps/v1
metadata:name: liux-new
spec:replicas: 1selector:matchLabels:app: webtemplate:metadata:labels:app: webspec:containers:- name: mywebimage: harbor.liux.com/liux-apps/apps:v2
[root@master231 canary-huidu]#
[root@master231 canary-huidu]#
[root@master231 canary-huidu]# kubectl apply -f 02-new.yaml
deployment.apps/liux-new created
5.3 修改副本数量以及测试结果
将旧的副本数量手动修改从3-0,与此同时,将新的副本数量从1-3
[root@master231 canary-huidu]# kubectl edit deploy liux-old
deployment.apps/liux-old edited
[root@master231 canary-huidu]# kubectl edit deploy liux-new
deployment.apps/liux-new edited#测试访问
[root@master231 ~]# while true ; do sleep 0.5;curl 10.0.0.233:30080; done
三、service
1.概述
service 用于服务发现和负载均衡。基于labels标签关联后端pod列表,以实现后端节点得动态发现,从而管理endpoints资源;负载均衡,底层借助于kube-proxy组件实现,基于iptables或者ipvs将用户请求转发给不同的Pod以均衡流量。
Service配置Selector标签, Endpoints Controller(controller manager)会自动创建对应的endpoint对象,否则.不会生成endpoint对象。
2.service类型
- ClusterIP(默认):集群内部访问,自动分配一个仅 Cluster 内部可以访问的虚拟 IP;
- NodePort:通过节点IP和端口暴露服务,在ClusterIP基础上为service在所有worker节点绑定一个端口,通过nodeport端口来访问服务;
- LoadBalancer:集成云厂商的负载均衡器(如AWS ELB);
- ExternalName:映射到外部DNS。用于将K8S集群外部的服务映射至K8S集群内部访问,让集群内部的Pod能够通过固定的service名称访问集群外部的服务。
3.service示例
[root@master-1 nfs]# vim nginx-demo.yaml
apiVersion: v1
kind: Service
metadata:labels:app: nginx-demoname: nginx-demo
spec:# 指定svc的类型为NodePort,也就是在默认的ClusterIP基础之上多监听所有worker节点的端口而已。type: NodePort# 配置端口映射ports:- nodePort: 30698# 指定Service服务本身的端口号port: 88protocol: TCP# 后端Pod提供服务的端口号targetPort: 80# 基于标签选择器关联Podselector:app: nginx-demo[root@master-1 nfs]# kubectl apply -f nginx-demo.yaml
[root@master-1 nfs]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 16d
nginx-demo NodePort 10.0.0.187 <none> 88:30698/TCP 2d
[root@master-1 nfs]# kubectl get endpoints
NAME ENDPOINTS AGE
nginx-demo 172.17.1.3:80,172.17.77.11:80 2d1h[root@master-1 nfs]# kubectl describe svc nginx-demo
Name: nginx-demo
Namespace: default
Labels: app=nginx-demo
Annotations: <none>
Selector: app=nginx-demo
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.0.0.187
IPs: 10.0.0.187
Port: <unset> 88/TCP
TargetPort: 80/TCP
NodePort: <unset> 30698/TCP
Endpoints: 172.17.1.3:80,172.17.77.11:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>#访问
http://192.168.91.22:30698
4.endpoints
Endpoint是Kubernetes集群中的一个资源对象,存储在etcd中,用来记录一个Service对应的所有pod的访问地址.
Service配置Selector, 创建service时Endpoints Controller(controller manager)会自动创建对应的endpoint对象,否则.不会生成endpoint对象.
#查看endpoints
[root@master-1 nfs]# kubectl get endpoints
NAME ENDPOINTS AGE
fuseim.pri-ifs <none> 13d
kubernetes 192.168.91.18:6443,192.168.91.19:6443,192.168.91.20:6443 16d
nginx-demo 172.17.1.3:80,172.17.77.11:80 2d1h
#查看etcd数据
[root@master-1 nfs]# export ETCDCTL_API=3
[root@master-1 nfs]# export ETCD_ENDPOINTS=http://192.168.91.19:2390
[root@master-1 nfs]# etcdctl --endpoints=${ETCD_ENDPOINTS} get / --prefix --keys-only | grep 'endpoints/default/nginx-demo'
/registry/services/endpoints/default/nginx-demo
四、Ingress
1.概念
Ingress是k8s中管理外部流量的核心组件,通过灵活的路由规则和丰富的控制器生态满足多样化需求。
k8s使用ingress和ingress controller两者结合实现了完整的ingress负载均衡器。 负载分发时,ingress controller基于ingress规则将请求转发到service对应的endpoint上,用于将不同URL的访问请求转发到后端不同的service,以实现http层的业务路由机制。
全过程:ingress controller-->ingress规则-->services-->endpoints(pod)
2.示例 编写ingress规则
访问nginx.liux.com,将会代理到svc中名称nginx.liux.com端口88上去
[root@master-1 ingress]# cat nginx-route-https.yaml
#注意命名空间 namespace与要代理的服务需要在同一个名称空间
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:name: nginx-routenamespace: kube-system
spec:entryPoints:- webroutes:- match: Host(`nginx.liux.com`)kind: Ruleservices:- name: nginx-demoport: 88
3.Ingress与service的区别
在 K8s 中,Ingress 和 Service 都是用于管理网络流量的核心组件,但它们的职责和使用场景有显著区别。
- Service 是基础网络抽象,确保 Pod 的可访问性。
- Ingress 是高级流量网关,专注于 HTTP 路由和集中管理。
- 两者通常结合使用:Ingress 处理外部请求的路由,Service 负责内部流量的分发。
特性 | Service | Ingress |
---|---|---|
层级 | L4(TCP/UDP) | L7(HTTP/HTTPS |
核心功能 | 服务发现、基础负载均衡 | 高级路由、SSL 终止、流量管理 |
外部暴露方式 | NodePort、LoadBalancer | 通过 Ingress Controller + 规则 |
路由规则 | 仅 IP/端口 | 域名、路径、请求头等 |
资源成本 | 每个 LoadBalancer 独立实例 | 单一入口点管理多个服务 |
依赖组件 | 无需额外组件 | 需要 Ingress Controller |
示例:一个 Web 应用服务包含frontend-service(前端)和backend-service(后端 API),可进行如下配置:
配置方式:
- Service:为 frontend-service 和 backend-service 创建 ClusterIP 类型的 Service,供集群内访问。
- Ingress:定义规则将 www.example.com/ 路由到 frontend-service,将 www.example.com/api 路由到 backend-service,并启用 HTTPS。
这样外部用户通过统一的域名访问,而 Ingress 根据路径将请求分发到不同的 Service,再由 Service 负载均衡到具体的 Pod。
五. ConfigMap 和 Secret
ConfigMap 和 Secret 都是用于管理应用配置的核心资源,但它们的用途和安全性有显著区别。
1. ConfigMap
作用:
- 存储 非敏感 的配置数据(如环境变量、配置文件、命令行参数等
- 将配置与容器镜像解耦,便于应用配置的灵活管理
数据格式:
- 数据以 明文 形式存储(如键值对、JSON、YAML 或纯文本文件)
典型场景:
- 存储应用的配置文件(如 nginx.conf、application.properties)。
- 定义环境变量(如 LOG_LEVEL=debug)。
- 共享配置给多个 Pod 或多个容器。
安全性:
- 不加密,数据对集群内用户可见,不适合存储敏感信息。
使用方式:
- 通过环境变量注入容器。
- 挂载为卷(Volume)到 Pod 的文件系统中。
示例:
#编写cm资源
[root@master231 cm]# cat 02-cm-games.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: nginx-conf
# 指定cm的数据
data:games.conf: |server {listen 0.0.0.0:99;root /usr/local/nginx/html/bird/;server_name game01.liux.com;}#编写pod资源清单(在此引用cm资源)
[root@master231 pod]# vim 16-pods-volumes-configMap-games.yaml
apiVersion: v1
kind: Pod
metadata:name: liux-games-cm-008
spec:nodeName: worker233# hostNetwork: truevolumes:- name: data01# 指定存储卷类型是configMapconfigMap:# 指定configMap的名称name: nginx-conf# 引用configMap中的某个key,若不指定,则引用configMap资源的所有key。#items:# 指定configMap的key#- key: student.info# 暂时理解为在容器挂载点的文件名称。#path: banzhan.infocontainers:- name: gamesimage: harbor.liux.com/liux-games/games:v0.5volumeMounts:- name: data01#mountPath: /liux-linux86mountPath: /etc/nginx/conf.d/
2.Secret
作用:
- 存储 敏感信息(如密码、API 密钥、TLS 证书、SSH 密钥等)。
- 提供一定程度的安全保护(非完全加密,需结合其他机制增强安全性)。
数据格式:
- 数据以 Base64 编码 形式存储(非加密,仅防意外泄露)。
- 支持 stringData 字段直接写入明文(自动转换为 Base64)。
典型场景:
- 存储数据库密码(如 mysql-password)。
- 存储 TLS 证书(如 tls.crt 和 tls.key)。
- 容器镜像仓库的认证信息(如 Docker harbor 凭据)。
安全性:
- Base64 编码仅防止明文暴露,仍需配合以下措施
- 启用 Kubernetes 的 Secret 加密机制(如使用 KMS、Vault)。
- 限制集群内 RBAC 权限(避免未授权访问)。
使用方式:
- 通过环境变量注入容器(不推荐,可能被日志记录)。
- 挂载为卷到 Pod 的文件系统中(更安全)。
示例一创建:
#1.声明式创建
[root@master231 secrets]# echo admin |base64
YWRtaW4K
[root@master231 secrets]# echo 12366 |base64
MTIzNjYK
[root@master231 secrets]# vim 01-secret-userinfo.yaml apiVersion: v1
kind: Secret
metadata:name: my-secrets-01
data:# 对于Secret的值进行base64编码,当Pod的容器使用secret时会自动对数据进行解码username: YWRtaW4Kpassword: MTIzNjYK
[root@master231 secrets]# kubectl apply -f 01-secret-userinfo.yaml
secret/my-secrets-01 created
[root@master231 secrets]# kubectl get secrets
NAME TYPE DATA AGE
my-secrets-01 Opaque 2 82s#2. 响应式创建# - 基于命令行key=value的方式创建
[root@master231 secrets]# kubectl create secret generic my-secrets-02 --from-literal=username='admin' --from-literal=password='12366'# - 基于命令行读取文件的方式创建
[root@master231 secrets]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -q
[root@master231 secrets]# kubectl create secret generic my-secrets-03 --from-file=ssh-privatekey=/root/.ssh/id_rsa --from-file=ssh-publickey=/root/.ssh/id_rsa.pub #响应式创建harbor的认证信息
[root@master231 secrets]# kubectl create secret docker-registry liux-harbor --docker-username=admin --docker-password=12366 --docker-email=admin@liux.com --docker-server=harbor.liux.com
示例二引用:
#3.在pod中引用 基于存储卷、环境变量的方式挂载[root@master231 pod]# cat 31-pods-secrets-env-volumes.yaml
apiVersion: v1
kind: Pod
metadata:name: linux86-web-secrets-env-cm-001
spec:volumes:- name: data01# 指定存储卷类型为secretsecret:# 指定secret的名称secretName: my-secrets-01- name: data02secret:secretName: my-secrets-01items:- key: usernamepath: username.info- key: passwordpath: password.txtcontainers:- name: webimage: harbor.liux.com/liux-web/nginx:1.25.1-alpine#基于存储卷的方式挂载volumeMounts:- name: data01mountPath: /liux-linux86-secrets- name: data02mountPath: /liux-linux86-secrets-2#基于环境变量的方式挂载env:- name: liux_USERNAMEvalueFrom:# 值引用自某个secretsecretKeyRef:# 指定secret的名称name: my-secrets-01# 指定引用secret对应的keykey: username- name: liux_SSH_PRIVATEKEYvalueFrom:secretKeyRef:name: my-secrets-03key: ssh-privatekey
[root@master231 pod]#
[root@master231 pod]# kubectl apply -f 31-pods-secrets-env-volumes.yaml
pod/linux86-web-secrets-env-cm-001 created
[root@master231 pod]# kubectl get pods
NAME READY STATUS RESTARTS AGE
linux86-web-secrets-env-cm-001 1/1 Running 0 8s
[root@master231 pod]# kubectl exec -it linux86-web-secrets-env-cm-001 -- env#在pod中引用harbor登录信息 注意,请确保你创建的用户必须在harbor中对相应的项目有访问权限!
[root@master231 pod]# cat 32-pods-harbor-secrets.yaml
apiVersion: v1
kind: Pod
metadata:name: linux86-secrets-harbor-001
spec:# 指定harbor的secret认证信息,可以指定多个。imagePullSecrets:- name: harbor-liuxing# - name: liux-harborcontainers:- name: webimage: harbor.liux.com/liux-apps/apps:v1# 指定镜像的拉取策略,若不指定,当tag为latest时,默认是Always,当tag非latest时,则默认策略为IfNotPresentimagePullPolicy: Always# imagePullPolicy: IfNotPresent
3.总结
特性 | ConfigMap | Secret |
---|---|---|
数据类型 | 非敏感配置(明文) | 敏感信息(Base64 编码) |
安全性 | 无加密,明文存储 | Base64 编码(非加密),需额外安全措施 |
典型用途 | 配置文件、环境变量、命令行参数 | 密码、密钥、证书 |
存储限制 | 无大小限制 | 每个 Secret 最大 1MiB |
更新与热加载 | 支持更新,挂载为卷时可自动同步 | 同 ConfigMap,但需注意敏感数据更新策略 |
相关文章:
k8s核心资源对象一(入门到精通)
本文将深入探讨Kubernetes中的核心资源对象,包括Pod、Deployment、Service、Ingress、ConfigMap和Secret,详细解析其概念、功能以及实际应用场景,帮助读者全面掌握这些关键组件的使用方法。 一、pod 1 pod概念 k8s最小调度单元,…...
了解 DeepSeek R1
了解DeepSeek R1 R1探索纯强化学习是否可以在没有监督微调的情况下学会推理的能力。 ‘Aha’ Moment 这种现象有点类似于人类在解决问题时突然意识到的方式,以下是它的工作原理: 初始尝试:模型对解决问题进行初始尝试识别:识别…...
【C语言】大小端字节序和字节序判断
前言: 在上章介绍了整形在内存的储存,了解了原码,反码,补码,知道了整数在内存的储存一般是补码,解决了负数相加的问题。 那么在本章为大家讲解一下大小端字节序。 一那字节序是什么呢? 字节…...
DrissionPage移动端自动化:从H5到原生App的跨界测试
一、移动端自动化测试的挑战与机遇 移动端测试面临多维度挑战: 设备碎片化:Android/iOS版本、屏幕分辨率差异 混合应用架构:H5页面与原生组件的深度耦合 交互复杂性:多点触控、手势操作、传感器模拟 性能监控:内存…...
ARM 汇编启动代码详解:从中断向量表到中断处理
ARM 汇编启动代码详解:从中断向量表到中断处理 引言 在嵌入式系统开发中,ARM 处理器(如 Cortex-A 系列)的启动代码是系统初始化和运行的基础。启动代码通常包括中断向量表的创建、初始化硬件状态(如关闭缓存和 MMU&a…...
笔试专题(七)
文章目录 乒乓球筐(哈希)题解代码 组队竞赛题解代码 删除相邻数字的最大分数(线性dp)题解代码 乒乓球筐(哈希) 题目链接 题解 1. 两个哈希表 先统计第一个字符串中的字符个数,再统计第二个字…...
React基础知识(一)
文章目录 概念特点React基本使用hello_react案例虚拟DOM的两种创建方式使用jsx创建使用js创建 虚拟DOM和真实DOM React jsxXMLjsx语法规则作用基本语法规则js语句和js代码babel.js作用 模块与组件模块组件 React面向组件编程函数式组件类组件 概念 react是一个将数据渲染为Htm…...
红黑树(Red-Black Tree)核心知识点与面试高频问题
红黑树(Red-Black Tree)核心知识点与面试高频问题 一、红黑树的核心性质 红黑树是一种自平衡的二叉搜索树,通过以下规则确保平衡性: 节点颜色:每个节点是红色或黑色。 根节点:根必须是黑色。 叶子节点&a…...
SpringBoot整合SSM
一、SpringBoot整合SSM SpringBoot整合SpringSpringBoot整合SpringMVCSpringBoot整合MyBatis(主要) 步骤一:创建SpringBoot工程,添加druid依赖 <!-- todo 1 添加druid连接池依赖--> <dependency><groupId>co…...
set/multiset容器
1.概念 所有元素会在插入时自动排序 set/multiset属于关联式容器,底层结构是用二叉树实现。 set不允许重复元素,multiset允许重复元素。 2. set构造和赋值 set<T> st; set(const set &st);// 拷贝构造函数 set& operator(const set &a…...
vim 编辑器 使用教程
Vim是一款强大的文本(代码)编辑器,它是由Bram Moolenaar于1991年开发完成。它的前身是Bill Joy开发的vi。名字的意义是Vi IMproved。 打开vim,直接在命令行输入vim即可,或者vim <filename>. Vim分为四种模式&a…...
去中心化固定利率协议
核心机制与分类 协议类型: 借贷协议(如Yield、Notional):通过零息债券模型(如fyDai、fCash)锁定固定利率。 收益聚合器(如Saffron、BarnBridge):通过风险分级或博弈论…...
Python高阶函数-filter
1. 基本概念 filter() 是Python内置的高阶函数,用于过滤序列中的元素。它接收一个函数和一个可迭代对象作为参数,返回一个迭代器,包含使函数返回True的所有元素。 filter(function, iterable)2. 工作原理 惰性计算:filter对象是…...
hive/doris查询表的创建和更新时间
hive查询表的创建和更新时间: SELECT d.NAME AS database_name, t.TBL_NAME AS table_name, FROM_UNIXTIME(t.CREATE_TIME) AS create_time, FROM_UNIXTIME(tp.PARAM_VALUE) AS last_ddl_time FROM metastore.TBLS t JOIN metastore.DBS d ON t.DB_ID d.DB_ID JOIN…...
40常用控件_WindowFrame的影响
window frame 的影响 如果 widget 作为一个窗口(带有标题栏,最小化,最大化,关闭按钮),那么在计算尺寸和坐标的 时候就有两种算法.包含 window frame 和 不包含 window frame. 其中x(),y0,frameGeometry(), pos(),move() 都是按照包含 window frame 的方式来计算 的. 其中 geome…...
PCB 赋能机器人技术革新:核心功能与前沿趋势
一、智能控制中枢的异构集成 采用 20 层刚挠结合板架构,搭载 NVIDIA Jetson AGX Orin SoC(100TOPS 算力),集成 64 位 ARMv8 内核与 32GB 内存,实现多模态传感器数据融合与实时决策。板载 128MB DDR4 缓存支持 μs 级响…...
unity 环形UI菜单实现方法2
在项目中需要一个环形UI并且循环往复的效果,这个方法思路为提前预设好位置,让UI根据坐标预设的移动,然后使用mask遮罩达到循环往复效果的目的。 下图分别分为了三个列表 第一个列表poslist是提前预设的位置 第二个列表为背景暂时不用看 第三个…...
Redis进阶--主从复制
目录 一、引言 二、介绍 三、解决问题 四、配置主从复制 1.复制 全量复制: 部分复制: 实时复制: 五、总结 一、引言 本篇文章将继续介绍Redis中的主从复制机制 二、介绍 主从复制是在分布式系统中实现的,希望有多个服务器…...
Redisson分布式锁:原理、使用
1. Redisson简介 Redisson是一个基于Redis的Java客户端库,提供了丰富的分布式对象和服务(如分布式锁、信号量、Map等)。其核心优势在于简化分布式锁的实现,并解决了原生Redis分布式锁的常见问题(如死锁、误删…...
Java设计模式之外观、享元、组合模式《三国争霸:模式风云录》
第一章:乱世起(外观初现) 黄巾余孽张角三兄弟操控"混沌子系统",各地流民不堪996劳役。观国隐士诸葛孔明出山,在博望坡构建首个"军师智脑": /*** 外观模式:军师智…...
设计模式之解释器模式:原理、实现与应用
引言 解释器模式(Interpreter Pattern)是一种行为型设计模式,它定义了一种语言的文法表示,并提供一个解释器来解释该语言中的句子。解释器模式适用于需要解析特定语法规则的场景,如正则表达式、SQL解析等。本文将深入…...
redis itheima
缓存问题 核心是如何避免大量请求到达数据库 缓存穿透 既不存在于 redis,也不存在于 mysql 的key,被重复请求 public Result queryById(Long id) {String key CACHE_SHOP_KEYid;// 1. redis & mysqlString shopJson stringRedisTemplate.opsFo…...
AF3 OpenFoldDataModule类setup方法解读
AlphaFold3 data_modules 模块的 OpenFoldDataLoader 类 setup 方法用于设置数据集的关键部分,负责根据不同的模式(训练、验证或预测)生成和初始化相应的数据集。 源代码: def setup(self, stage=None):# Most of the arguments are the same for the three datasets data…...
服务器报错:xxx/libc.so.6: version `GLIBC_2.32‘ not found
/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32 not found (required by ./aima-sim-app-main) 解决思路 根据错误信息,您的应用程序 aima-sim-app-main 和 libmujoco.so.3.1.6 库依赖于较新的 GNU C Library (glibc) 版本(如 GLIBC_2.32, GLIBC…...
FPGA状态机设计:流水灯实现、Modelsim仿真、HDLBits练习
一、状态机思想 1.概念 状态机(Finite State Machine, FSM)是计算机科学和工程领域中的一种抽象模型,用于描述系统在不同状态之间的转换逻辑。其核心思想是将复杂的行为拆解为有限的状态,并通过事件触发状态间的转移。 2.状态机…...
机试题——最少乘坐公交次数
题目描述 春节将近,小明想在节日期间逛一逛城里的 ( N ) 个著名景点。所有景点都能通过坐公交到达。需要设计一种公交路线方案,让小明能最快地逛完所有景点。 输入描述 第一行:一个整数 ( N ),表示景点数量,满足 ( …...
防孤岛保护装置在分布式光伏并网中的应用
什么是光伏的“孤岛效应” 孤岛islanding 包含负荷和电源的部分电网,从主网脱离后继续孤立运行的状态。孤岛可分为非计划性孤岛和计划性孤岛。 孤岛效应的危害 当电网侧停电检修,若并网光伏电站的逆变器仍在继续供电,维修人员不一定…...
记一次gitlab服务器负载过高问题处理
服务器上进程 /var/opt/gitlab/gitlab-rails/etc/unicorn.rb /opt/gitlab/embedded/service/gitlab-rails/config.ru 进程服务器cpu占用过高应该怎么处理 tail -f /var/log/gitlab/gitlab-rails/production.log调整 Unicorn 配置:unicorn.rb 是 Unicorn 服务器的配…...
LiT and Lean: Distilling Listwise Rerankers intoEncoder-Decoder Models
文章:ECIR 2025会议 一、动机 背景:利用LLMs强大的能力,将一个查询(query)和一组候选段落作为输入,整体考虑这些段落的相关性,并对它们进行排序。 先前的研究基础上进行扩展 [14,15],…...
【项目日记】高并发服务器项目总结
生活总是让我们遍体鳞伤, 但到后来, 那些受伤的地方一定会变成我们最强壮的地方。 -- 《老人与海》-- 高并发服务器项目总结 模块关系图项目工具模块缓冲区模块通用类型模块套接字socket模块信道Channel模块多路转接Poller模块 Reactor模块时间轮Tim…...
P1332 血色先锋队(BFS)
题目背景 巫妖王的天灾军团终于卷土重来,血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团,以及一切沾有亡灵气息的生物。孤立于联盟和部落的血色先锋军很快就遭到了天灾军团的重重包围,现在他们将主力只好聚集了起来,以抵…...
systemd 与 SysVinit
1. 什么是 systemd 和 SysVinit? systemd 和 SysVinit 都是 Linux 的初始化系统(init system),用于管理系统启动、服务、进程和日志。 比较项SysVinitsystemd启动方式逐步启动(串行)并行启动(…...
PythonWeb项目-Django+vue白酒数据推荐系统功能介绍
❥(^_-) 上千个精美定制模板,各类成品Java、Python、PHP、Android毕设项目,欢迎咨询。 ❥(^_-) 程序开发、技术解答、代码讲解、文档,💖文末获取源码+数据库+文档💖 💖软件下载 | 实战案例 💖文章底部二维码,可以联系获取软件下载链接,及项目演示视频。 本项目源…...
AWS Bedrock:开启企业级生成式AI的钥匙【深度解析】
引言:生成式AI的工业革命需要新基建 根据Gartner预测,到2026年超过80%的企业将在生产环境中部署生成式AI。而AWS Bedrock作为首个企业级生成式AI托管平台,正在重塑AI工业化落地的技术范式。本文将深入解构其技术架构与商业价值。 一、Bedroc…...
网络安全应急响应-文件痕迹排查
在Windows系统的网络安全应急响应中,文件痕迹排查是识别攻击行为的关键步骤。以下是针对敏感目录的详细排查指南及扩展建议: 1. 临时目录排查(Temp/Tmp) 路径示例: C:\Windows\TempC:\Users\<用户名>\AppData\L…...
【玩转全栈】—— Django 连接 vue3 保姆级教程,前后端分离式项目2025年4月最新!!!
本文基于之前的一个旅游网站,实现 Django 连接 vue3,使 vue3 能携带 CSRF Token 发送 axios 请求给后端,后端再响应数据给前端。想要源码直接滑倒底部。 目录 实现效果 解决跨域 获取 csrf-token 什么是 csrf-token ? CSRF攻击的…...
网络安全·第一天·IP协议安全分析
本篇博客讲述的是网络安全中一些协议缺陷以及相应的理论知识,本博主尽可能讲明白其中的一些原理以及对应的防卫措施。 学习考研408的同学也能进来看看,或许对考研有些许帮助(按照考研现在的趋势,年年都有新题目,本文当…...
TensorFlow深度学习实战——字符嵌入、子词嵌入、句子嵌入和段落嵌入
TensorFlow深度学习实战——字符嵌入、子词嵌入、句子嵌入和段落嵌入 0. 前言1. 字符嵌入2. 字词嵌入3. 句子嵌入和段落嵌入相关链接 0. 前言 在自然语言处理中,嵌入 (Embedding) 技术是将文本转化为数值向量的核心方法,使计算机能够理解和处理语言中的…...
剖析AI与5G:是夸大其词,还是时代变革的引擎?-优雅草卓伊凡
剖析AI与5G:是夸大其词,还是时代变革的引擎?-优雅草卓伊凡 在当今科技飞速发展的时代,AI与5G无疑是两大备受瞩目的焦点。近日,一个引人深思的问题浮出水面:“AI是不是被夸大了,就像当年的5G一样…...
Python Cookbook-5.7 在增加元素时保持序列的顺序
任务 你需要维护一个序列,这个序列不断地有新元素加入,但始终处于排序完毕的状态这样你可以在任何需要的时候检查或者删除当前序列中最小的元素。 解决方案 假设有一个未排序的列表,比如: the_list [903, 10, 35, 69, 933, 485, 519, 37…...
Ubuntu18系统安装
1、虚拟机安装 请参照之前的《虚拟机安装centos7-NAT网络模式安装》与《虚拟机安装centos7-桥接模式》 2、启动虚拟机进入系统的欢迎界面 选择English后并点击回车键(Enter) 3、进入安装页面 选择Countinue without updating并点击回车键(Enter) 4、键盘配置 选择Done并点击…...
【AIGC】零样本学习方法综述(TPAMI 2023 研究综述)
出版日期为2022年7月18日;工作由国家自然科学基金资助6217616年6061732011和61976141,部分由广东基础和应用基础研究基金资助2022A1515010791,部分由深圳大学自然科学基金会稳定支持计划资助号20200804193857002,部分由SZU的跨学科…...
Redis持久化之AOF
AOF(Append Only File)持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用解决了数据持久化的实时性。 1.使用AOF 开启AOF需要设置配置文件: appendonly yes…...
QT6(12)3.3.1 Qt元对象系统概述:QObject 类与 QMetaObject 类,类型转换 qobject_cast<T>()。
(33)Qt元对象系统概述: QObject 类: 以及: 老师带咱们学生测试一下: 谢谢老师 (34)类型转换 qobject_cast( ) : 来自 一言的教导: (35&#x…...
Electron使用WebAssembly实现CRC-32 STM32校验
Electron使用WebAssembly实现CRC-32 STM32校验 将C/C语言代码,经由WebAssembly编译为库函数,可以在JS语言环境进行调用。这里介绍在Electron工具环境使用WebAssembly调用CRC-32 STM32格式校验的方式。 CRC-32 STM32校验函数WebAssembly源文件 C语言实…...
C++11QT复习 (十五)
文章目录 Day10 标准模板库学习笔记(2025.04.02)一、函数和数组能否放入 STL 容器?1. 引用不能直接作为容器元素类型✅ 推荐做法:使用 std::reference_wrapper<T> 2. 函数不能直接作为容器元素类型✅ 推荐做法一:…...
文件存储的路径简单分析
filename file_pic.filename pic /static/img/filename # 将文件的名称存储在数据库中,方便调取 p_file os.path.join(/home/enen/ee/static/img, filename) file_pic.save(p_file) # 保存文件到指定目录,具体项目是要根据项目的存储地址来看的…...
汽车与航空航天领域软件维护:深度剖析与未来展望
一、引言 在当今科技飞速发展的时代,汽车和航空航天领域的软件应用愈发广泛和深入,软件已成为这些行业系统的核心组成部分。从汽车的智能驾驶辅助系统到航空航天飞行器的飞行控制软件,软件的可靠性、安全性直接关系到整个系统的正常运行和人…...
吉利汽车采用 EMQX 与AutoMQ联合方案构建公私有云一体化的车联网核心架构
吉利汽车集团 数字化基础架构总工程师 洪旅杭 关于吉利汽车 吉利汽车集团在中国上海、宁波、以及海外等地建有造型设计和工程研发中心,研发实力雄厚。在中国、马来西亚建有世界一流的现代化整车和动力总成制造工厂,拥有各类销售网点超过 1400 多家&…...
深圳漫云科技户外公园实景儿童剧本杀小程序:开启亲子互动新纪元
在亲子娱乐需求日益增长的当下,深圳漫云科技推出的户外公园实景儿童剧本杀小程序,凭借其创新玩法与丰富功能,为亲子家庭带来全新体验。该小程序融合户外探险、角色扮演与逻辑推理,不仅满足孩子好奇心,更提升其思维能力…...