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最小调度单元,…...
Ubuntu16.04配置远程连接
配置静态IP Ubuntu16.04 修改超管账户默认密码 # 修改root账户默认密码 sudo passwd Ubuntu16.04安装SSH # 安装ssh服务: sudo apt-get install ssh# 启动SSH服务: sudo /etc/init.d/ssh start # 开机自启 sudo systemctl enable ssh# 如无法连接&…...
基于springboot微信小程序课堂签到及提问系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 随着信息时代的来临,过去的课堂签到及提问管理方式的缺点逐渐暴露,本次对过去的课堂签到及提问管理方式的缺点进行分析,采取计算机方式构建基于微信小程序的课堂签到及提问系统。本文通过阅读相关文献,研究国内外相关技术&a…...
互联网三高-高性能之JVM调优
1 运行时数据区 JVM运行时数据区是Java虚拟机管理的内存核心模块,主要分为线程共享和线程私有两部分。 (1)线程私有 ① 程序计数器:存储当前线程执行字节码指令的地址,用于分支、循环、异常处理等流程控制 ② 虚拟机…...
数据操作语言
一、DML的核心操作类型 1.添加数据(INSERT) (1)手动插入:逐行插入数据,适用于少量数据。 INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2);(2)批量导入:通过外部文件导入数据,适用于大数据场景...
智谛达科技:以创新为翼,翱翔AI人形机器人蓝海
在科技创新的浩瀚星空中,智谛达科技集团犹如一颗璀璨的明星,以其独特的创新光芒,照亮了AI人形机器人的广阔蓝海。这家在AI领域深耕多年的企业,始终秉持着创新为翼的发展理念,不断突破技术瓶颈,拓展应用场景,以卓越的实力和前瞻性的思维,引领着人形机器人行业的未来发展。 智谛达…...
封装可拖动弹窗(vue jquery引入到html的版本)
vue cli上简单的功能,在js上太难弄了,这个弹窗功能时常用到,保存起来备用吧 备注:deepseek这个人工智障写一堆有问题的我,还老服务器繁忙 效果图: html代码: <div class"modal-mask&qu…...
【LeetCode77】组合
题目描述 给定区间 [1, n] 和一个整数 k,需要返回所有可能的 k 个数的组合。 思路 算法选择:回溯算法 回溯算法是一种试探性搜索方法,非常适合用来解决组合问题。基本思想是: 从数字 1 开始,逐步构建组合。当当前组…...
【技术报告】GPT-4o 原生图像生成的应用与分析
【技术报告】GPT-4o 原生图像生成的应用与分析 1. GPT-4o 原生图像生成简介1.1 文本渲染能力1.2 多轮对话迭代1.3 指令遵循能力1.4 上下文学习能力1.5 跨模态知识调用1.6 逼真画质与多元风格1.7 局限性与安全性 2. GPT-4o 技术报告2.1 引言2.2 安全挑战、评估与缓解措施2.2.1 安…...
初阶数据结构(3)顺序表
Hello~,欢迎大家来到我的博客进行学习! 目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现初始化尾插头插尾删头删查找指定位置之前插入数据删除指定位置的数据销毁 1.线性表 首先我们需要知道的是,…...
Visual Studio 中使用 Clang 作为 C/C++ 编译器时,设置优化选项方法
在 Visual Studio 中使用 Clang 作为 C/C 编译器时,可以通过以下方法设置优化选项: 方法 1:通过项目属性设置(推荐) 右键项目 → 属性 配置属性 → C/C → 优化 优化:选择优化级别 /O0 - 禁用优化&#x…...
设计模式简述(七)原型模式
原型模式 描述基本使用 使用场景 描述 基于已有对象,利用JDK的Cloneable接口,生成一个新的对象。 常用于需要同时创建多个对象的场景 默认的clone是浅拷贝,如果要实现深拷贝需自行处理 可以在clone方法中手动拷贝数组成员或者其他引用类型成…...
Linux中查看占用端口号的进程信息的方法
在 Linux 中查看占用 ** 端口(eg:1717)**的进程号(PID),可以通过以下命令实现: 方法 1:使用 netstat 命令 sudo netstat -tulnp | grep :1717参数解释: -t:查看 TCP 端口…...
谷歌发布网络安全AI新模型Sec-Gemini v1
谷歌近日宣布推出实验性AI模型Sec-Gemini v1,旨在通过人工智能技术革新网络安全防御体系。该模型由Sec-Gemini团队成员Elie Burzstein和Marianna Tishchenko共同研发,旨在帮助网络安全人员应对日益复杂的网络威胁。 攻防不对称的破局之道 Sec-Gemini团队…...
【学Rust写CAD】35 alpha_mul_256(alpha256.rs补充方法)
源码 // Calculates (value * alpha256) / 255 in range [0,256], // for [0,255] value and [0,256] alpha256. pub fn alpha_mul_256(self,value: u32) -> Alpha256 {let prod value * self.0;Alpha256((prod (prod >> 8)) >> 8) }代码分析 这个函数 alph…...
嵌入式工程师多线程编程(三)裸机编程、RTOS、Linux及多线程编程的全面对比
以下是裸机编程、RTOS、Linux及多线程编程的全面对比解析,结合技术特性和应用场景进行深度分析: 一、架构与调度机制对比 维度裸机编程RTOSLinux任务调度无调度器(轮询/前后台系统)抢占式优先级调度(硬实时࿰…...
Meta LLaMA 4:对抗 GPT-4o 与 Claude 的开源王牌
2025 年 4 月,Meta 正式发布了 LLaMA 4 系列的首批两款模型。 这两款模型模型分别是:LLaMA 4 Scout 与 LLaMA 4 Maverick,均采用了 专家混合架构(Mixture-of-Experts, MoE)。 据 Meta 表示,这是首次有 …...
企业级 ClickHouse Docker 离线部署实践指南20250407
企业级 ClickHouse Docker 离线部署实践指南 引言 在数据分析与日志处理日益重要的今天,ClickHouse 凭借其高性能、列式存储架构,成为企业在大数据分析中的首选引擎之一。本文基于一位金融行业从业者在离线网络环境中部署 ClickHouse 的真实实践过程&a…...
STM32看门狗应用实战:独立看门狗与窗口看门狗深度解析(下) | 零基础入门STM32第九十五步
主题内容教学目的/扩展视频看门狗什么是看门狗,原理分析,启动喂狗方法,读标志位。熟悉在程序里用看门狗。 师从洋桃电子,杜洋老师 📑文章目录 一、看门狗应用架构分析1.1 系统监控流程图1.2 双看门狗应用场景对比 二、…...
DeepSeek-MLA
MLA 结构 需要缓存 KV 向量共用的压缩隐特征K 向量多头共享的带位置编码的向量 为什么带有位置信息的 Q 向量来自于隐特征向量,而带有位置的 K 向量来自于 H 向量且共享呢? 最好的方法肯定是从H向量直接计算并且不共享,但是会大大增加显存使…...
pyTorch-迁移学习-学习率衰减-四种天气图片多分类问题
目录 1.导包 2.加载数据、拼接训练、测试数据的文件夹路径 3.数据预处理 3.1 transforms.Compose数据转化 3.2分类存储的图片数据创建dataloader torchvision.datasets.ImageFolder torch.utils.data.DataLoader 4.加载预训练好的模型(迁移学习) 4.1固定、修改预训练…...
基于大模型的GCSE预测与治疗优化系统技术方案
目录 技术方案文档:基于大模型的GCSE预测与治疗优化系统1. 数据预处理模块功能:整合多模态数据(EEG、MRI、临床指标等),标准化并生成训练集。伪代码流程图2. 大模型架构(Transformer-GNN混合模型)功能:联合建模时序信号(EEG)与空间结构(脑网络)。伪代码流程图3. 术…...
vscode Colipot 编程助手
1、登录到colipot,以github账号,关联登录 点击【continue】按钮,继续。 点击【打开Visual Studio Code】,回到vscode中。 2、问一下11? 可以看出,很聪明,一下子就算出来了。 3、帮我们写一个文件…...
1、window 下SDL 下载使用, 测试环境搭建
1. SDL3下载 官网: https://www.libsdl.org/ 点击SDL Releases 或者 SDL GItHub 进入github下载: 因为自己在windows下使用的mingw,所以下载mingw版的,也可以 下载源码自己编译。 2. 项目搭建 这里使用的时mingw vsocde cmake, 可以使…...
OpenGL学习笔记(模型材质、光照贴图)
目录 光照与材质光照贴图漫反射贴图采样镜面光贴图 GitHub主页:https://github.com/sdpyy OpenGL学习仓库:https://github.com/sdpyy1/CppLearn/tree/main/OpenGLtree/main/OpenGL):https://github.com/sdpyy1/CppLearn/tree/main/OpenGL 光照与材质 在现实世界里&…...
【MySQL】常用SQL--持续更新ing
一、配置信息类 1.查看版本 select version; 或 select version(); 2.查看配置 show global variables where variable_name in (basedir,binlog_format,datadir,expire_logs_days,innodb_buffer_pool_size,innodb_log_buffer_size,innodb_log_file_size,innodb_log_files_i…...
视频分析设备平台EasyCVR打造汽车门店经营场景安全:AI智慧安防技术全解析
一、方案背景 某电动车企业不停爆出维权新闻,支持和反对的声音此起彼伏,事情不断发酵、反转,每天都有新消息,令人目不暇接。车展、车店作为维权事件的高发场所,事后复盘和责任认定时,安防监控和视频监控平…...
【AI提示词】因果溯源大师
提示说明 因果遡源大师,能够帮助你找出从起点到终点的因果链。 提示词 ## Role: 因果溯源大师## Profile: - author: xxx - version: 1.0 - language: 中文 - description: 我是因果遡源大师,能够帮助你找出从起点到终点的因果链## Goals: - 帮助用户…...
Hibernate里的对象不同状态和Session的核心方法
临时状态的测试 Student student new Student("张三", "男", 22, new Date()); 以上student就是一个Transient(临时状态),此时student并没有被session进行托管,即在session的缓存中还不存在student这个对象,当执行完save方法后&a…...
模型嵌入式部署
背景 自从深度学习大规模应用以来,其中一个应用方向就是将深度学习视觉算法部署到嵌入式平台上,使用NPU推理。虽然已经做了很久的模型部署,但一直都是在公司默默耕耘,为了发展一下自己“边缘部署专家”这个个人品牌,打…...
