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

飞天使-k8s基础组件分析-服务与ingress

文章目录

      • 服务的介绍
        • 服务代理
        • 服务发现
        • 连接集群外服务
        • 服务发布
        • 无头服务
      • 服务,pod和dns的关系
      • 端口转发
      • 通过expose 暴露应用
      • 服务案例
      • INGRESS
      • MetalLB使用
      • 参考文档

服务的介绍

服务的作用是啥? 
提供外部调用,保证podip的真实性看看服务解决了什么问题? 
[root@k8s-01 chapter05]# cat web-rs.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:name: web
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx[root@k8s-01 chapter05]# kubectl get pod -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
nginx-97499b967-jzxwg   1/1     Running   0          35h   10.244.1.2    k8s-02   <none>           <none>
web-dgn64               1/1     Running   0          76s   10.244.1.54   k8s-02   <none>           <none>
web-x4kkz               1/1     Running   0          76s   10.244.1.52   k8s-02   <none>           <none>
web-xx2md               1/1     Running   0          76s   10.244.1.53   k8s-02   <none>           <none>rs控制数量为3,如果这3个换了呢,这些ip地址如何让客户端知道呢? pod 和服务之间的关系,依旧是标签来控制[root@k8s-01 chapter05]# cat web-svc.yaml 
apiVersion: v1
kind: Service
metadata:name: my-service
spec:ports:- port: 80targetPort: 80selector:app: nginx[root@k8s-01 chapter05]# kubectl apply -f web-svc.yaml 
service/my-service created
[root@k8s-01 chapter05]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        35h
my-service   ClusterIP   10.107.106.26    <none>        80/TCP         5s
nginx        NodePort    10.104.210.165   <none>        80:30001/TCP   35h上面是创建了服务,服务创建之后,有一个ip
查看集群分配给服务的Ip
# kubectl get svc#访问刚才创建的服务三种方式
创建一个Pod,访问服务的Ip
在k8s的任何一个节点访问
使用任何一个现有服务所属任何pod访问
下面图片有它的处理过程查看服务和后面pod的ip地址信息
[root@k8s-01 chapter05]# kubectl describe svc my-service
Name:              my-service
Namespace:         default
Labels:            <none>
Annotations:       Selector:  app=nginx
Type:              ClusterIP
IP:                10.107.106.26
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more...
Session Affinity:  None
Events:            <none>#此处如果删除一个pod,查看service中的podip 也会随着变化实验一: 配置 sessionAffinity: ClientIP
[root@k8s-01 chapter05]# cat web-svc.yaml 
apiVersion: v1
kind: Service
metadata:name: my-service
spec:sessionAffinity: ClientIPports:- port: 80targetPort: 80selector:app: nginx[root@k8s-01 chapter05]# kubectl delete svc/my-service
service "my-service" deleted
[root@k8s-01 chapter05]# kubectl apply -f web-svc.yaml 
service/my-service created
[root@k8s-01 chapter05]# kubectl describe svc my-service
Name:              my-service
Namespace:         default
Labels:            <none>
Annotations:       Selector:  app=nginx
Type:              ClusterIP
IP:                10.104.130.27
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more...
Session Affinity:  ClientIP
Events:            <none>实验二:设置自定义的服务ip
[root@k8s-01 chapter05]# vim web-svc.yaml 
[root@k8s-01 chapter05]# kubectl apply -f web-svc.yaml 
service/my-service created
[root@k8s-01 chapter05]# kubectl describe svc web-service
Error from server (NotFound): services "web-service" not found
[root@k8s-01 chapter05]# cat web-svc.yaml 
apiVersion: v1
kind: Service
metadata:name: my-service
spec:clusterIP: 10.104.130.24sessionAffinity: ClientIPports:- port: 80targetPort: 80selector:app: nginx
[root@k8s-01 chapter05]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-97499b967-jzxwg   1/1     Running   0          35h
web-tsxck               1/1     Running   0          34m
web-x4kkz               1/1     Running   0          50m
web-xx2md               1/1     Running   0          50m
[root@k8s-01 chapter05]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        36h
my-service   ClusterIP   10.104.130.24    <none>        80/TCP         33s
nginx        NodePort    10.104.210.165   <none>        80:30001/TCP   35h实验三: 创建没有选择器的服务
服务通常抽象访问Kubernetes pods,但是它也可以抽象访问其它类型的后端,比如:
比如使用外部的数据库集群
指向服务到不同的命名空间或其它kubernetes集群的服务在上面任何一种情况下,都可以定义一个没有Pod选择器的服务,比如:
由于上面定义的服务没有选择器,对应的Endpoint对象也不会自动创建,因此需要手工的创建Endpoint.kind: Endpoints

在这里插入图片描述

服务代理

Userspace
Iptables
Ipvs
以上三种模式,ipvs用的多

在这里插入图片描述

服务发现

查看某个pod的 环境变量
kubectl exec web-tsxck env生产环境中要先创建服务在创建pod,否则pod里面的环境变量没有服务的变量服务发现通过两种方式,1.环境变量 2. DNSDNS的服务方式
一个完整的FQDN如下所示:
Backend-database.default.svc.cluster.local进入到容器里面, 
kubectl exec -it web-sfe1d -- bash
curl http://my-service
curl http://my-service.default.svc.cluster.local
cat /etc/resolv.conf

连接集群外服务

一般是数据库,云数据库信息查看服务的endpoints[root@k8s-01 chapter05]# kubectl get endpoints
NAME         ENDPOINTS                                                 AGE
kubernetes   192.168.100.30:6443                                       37h
my-service   10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more...   80m
nginx        10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more...   37h查看apiversion版本[root@k8s-01 chapter05]# kubectl explain endpoints.apiVersion
KIND:     Endpoints
VERSION:  v1FIELD:    apiVersion <string>DESCRIPTION:APIVersion defines the versioned schema of this representation of anobject. Servers should convert recognized schemas to the latest internalvalue, and may reject unrecognized values. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources[root@k8s-01 chapter05]# cat external-service.yaml 
apiVersion: v1
kind: Service
metadata:name: external-service
spec:ports:- port: 80[root@k8s-01 chapter05]# cat external-endpoints.yaml 
apiVersion: v1
kind: Endpoints
metadata:name: external-service
subsets:- addresses:- ip: 192.168.100.31ports:- port: 30001
[root@k8s-01 chapter05]# cat external-endpoints-alias.yaml 
apiVersion: v1
kind: Service
metadata:name: external-service
spec:type: ExternalNameexternalName: feitianshi.cc.ccports:- port: 30001注意:此部分实验未成功,各位可以自己参考配置文件[root@k8s-01 chapter05]# kubectl describe svc external-service
Name:              external-service
Namespace:         default
Labels:            <none>
Annotations:       Selector:  <none>
Type:              ClusterIP
IP:                10.105.6.128
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         192.168.100.31:30001
Session Affinity:  None
Events:            <none>

服务发布

发布服务的类型如下
ClusterIP 内部访问
NodePort 外部访问
LoadBalancer 外部访问
ExternalName 内部访问案例
NodePort:
创建服务
kubectl create –f web-svc-nodeport.yaml检查NodePort服务
kubectl get svc web-nodeport[root@k8s-01 chapter05]# cat web-svc-nodeport.yaml 
apiVersion: v1
kind: Service
metadata:name: web-nodeport
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30123selector:app: nginx[root@k8s-01 chapter05]# kubectl create -f web-svc-nodeport.yaml 
service/web-nodeport created
[root@k8s-01 chapter05]# kubectl get svc web-nodeport
NAME           TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
web-nodeport   NodePort   10.105.18.188   <none>        80:30123/TCP   8s
[root@k8s-01 chapter05]# curl 10.105.18.188
<!DOCTYPE html>[root@k8s-01 chapter05]# cat web-svc-loadbalancer.yaml 
apiVersion: v1
kind: Service
metadata:name: web-loadbalancer
spec:type: LoadBalancerports:- port: 80targetPort: 80selector:app: nginx[root@k8s-01 chapter05]# cat service-external-ip.yaml 
apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: nginxports:- name: httpprotocol: TCPport: 80targetPort: 80externalIPs:- 192.168.100.199

在这里插入图片描述

无头服务

无头服务:没有clusterIp字段的服务就是无头服务。
有些服务需要直接连接后端的pod 案例:
- 创建无头服务
# kubectl create –f web-headless.yaml[root@k8s-01 chapter05]# cat web-headless.yaml 
apiVersion: v1
kind: Service
metadata:name: web-headless
spec:clusterIP: Noneports:- port: 80targetPort: 80selector:app: nginx- 查看创建的服务
# kubectl get svc
# kubectl describe svc web-headless通过dns发现pods
# kubectl run dnsutils --image=tutum/dnsutils --generator=run-pod/v1 --command -- sleep infinity
# kubectl exec dnsutils nslookup web-headless[root@k8s-01 chapter05]# kubectl exec dnsutils nslookup web-headless
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
Server:         10.96.0.10
Address:        10.96.0.10#53Name:   web-headless.default.svc.cluster.local
Address: 10.244.1.61
Name:   web-headless.default.svc.cluster.local
Address: 10.244.1.60
Name:   web-headless.default.svc.cluster.local
Address: 10.244.1.2
Name:   web-headless.default.svc.cluster.local
Address: 10.244.1.59[root@k8s-01 chapter05]# kubectl get svc
NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP   10.96.0.1        <none>        443/TCP        40h
my-service     ClusterIP   10.104.130.24    <none>        80/TCP         2s
nginx          NodePort    10.104.210.165   <none>        80:30001/TCP   39h
web-headless   ClusterIP   None             <none>        80/TCP         8m50s
[root@k8s-01 chapter05]# kubectl exec dnsutils nslookup my-service
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
Server:         10.96.0.10
Address:        10.96.0.10#53Name:   my-service.default.svc.cluster.local
Address: 10.104.130.24无头服务比有头服务更快些,注意区分

服务,pod和dns的关系

什么东西可以获取DNS的名称?
集群中定义的每个服务都会被分配一个DNS名称。默认情况下,客户机pod的dns搜索列表包括Pod自己的名称空间和集群的默认域。假设k8s集群bar的名称空间中有一个名为foo的服务,在该名称空间运行的pod可以直接对foo执行dns查询来查找此服务。在别的名称空间中执行foo.bar进行查询。服务
A记录
普通服务分配一个DNS A记录作为表单的名称my-svc.my-namespace.svc.cluster-domain.example,这将解析到服务的集群IP。
无头服务也分配一个DNS记录,针对my-svg.my-namespace.svg.cluster-domain.example表单的名称。与普通服务不同,这将解析为服务选择的pod的ip集。SRV记录
SRV记录是作为普通服务或无头服务一部分的指定端口创建的。每于每个指定端口,SRV记录都有相应的形式_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example。对于无头服务,这解析为多个答案,每个答案对应一个支持的pod,并包含pod的端口号和域名。
Auto-generated-name.my-svcc.my-namespace.svc.cluster-domain.examplePods
pods的主机名和子域名字段
比如在名称空间my-namespace中将主机名设置为“foo”,子域设置为“bar”的pod将具有完全限定的域为:foo.bar.my-namespace.svc.cluster-domain.examplePods dns策略有以下4种:
Default
ClusterFirst
ClusterFirstWithHostNet
NonePod dns配置
属性有以下三个:
Nameservers
Searchs
options

端口转发

对于排错比较方便
创建redis的部署和应用
创建deployment资源
# kubectl create –f redis-master-deployment.yaml查看部署状态
# kubectl get pods查看replicaset状态
# kubectl get rs创建服务
# kubectl create –f redis-master-service.yaml查看服务
# kubectl get svc | grep redis校验运行在pod中的redis server是否侦听在6379端口
# kubectl get pods redis-master-7db7f6579f-zd27q –template=‘{{(index(index.spec.containers 0).ports 0).containerPort}}{{“\n”}}’执行端口转发
# kubectl port-forward redis-master-7db7f6579f-zd27q 7000:6379客户端进行测试
# redis-cli –p 7000[root@k8s-01 chapter05]# cat redis-master-deployment.yaml 
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:name: redis-masterlabels:app: redis
spec:selector:matchLabels:app: redisrole: mastertier: backendreplicas: 1template:metadata:labels:app: redisrole: mastertier: backendspec:containers:- name: masterimage: redis  # or just image: redisresources:requests:cpu: 100mmemory: 100Miports:- containerPort: 6379[root@k8s-01 chapter05]# cat redis-master-service.yaml 
apiVersion: v1
kind: Service
metadata:name: redis-masterlabels:app: redisrole: mastertier: backend
spec:ports:- port: 6379targetPort: 6379selector:app: redisrole: mastertier: backend

通过expose 暴露应用

创建资源
# kubectl create –f hello-application.yaml查看关于部署的信息
# kubectl get deployment hello-world
# kubectl describe deployments hello-world
# kubectl get replicasets
# kubectl describe replicasets暴露刚才的部署
# kubectl expose deployment hello-world --type=NodePort --name=example-service显示关于服务的信息
# kubectl describe services example-service列出在Hello World应用运行的Pods
# kubectl get pods –selector=“run=load-balancer-example” --output=wide使用下面的方法进行测试
# curl http://<public-node-ip>:<node-port>[root@k8s-01 chapter05]# cat hello-application.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: hello-world
spec:selector:matchLabels:run: load-balancer-examplereplicas: 2template:metadata:labels:run: load-balancer-examplespec:containers:- name: hello-worldimage: "mike0405/node-hello:1.0"ports:- containerPort: 8080protocol: TCP[root@k8s-01 chapter05]# cat hello-service.yaml 
apiVersion: v1
kind: Service
metadata:name: hello
spec:selector:app: hellotier: backendports:- protocol: TCPport: 80targetPort: http

服务案例

创建后端的部署
# kubectl create –f hello.yaml创建后端的服务
# kubectl create –f hello-service.yaml创建前端的部署和服务
# kubectl create –f fronted.yaml测试前端和后端的交互
# curl http://${EXTERNAL_IP}[root@k8s-01 chapter05]# curl 192.168.100.31:32746
{"message":"Hello"}
[root@k8s-01 chapter05]# curl 192.168.100.31:32746
{"message":"Hello"}
[root@k8s-01 chapter05]# cat frontend.yaml 
apiVersion: v1
kind: Service
metadata:name: frontend
spec:selector:app: hellotier: frontendports:- protocol: "TCP"port: 80targetPort: 80type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:name: frontend
spec:selector:matchLabels:app: hellotier: frontendtrack: stablereplicas: 1template:metadata:labels:app: hellotier: frontendtrack: stablespec:containers:- name: nginximage: "mike0405/hello-frontend:1.0"lifecycle:preStop:exec:command: ["/usr/sbin/nginx","-s","quit"][root@k8s-01 chapter05]# 
[root@k8s-01 chapter05]# cat hello.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: hello
spec:selector:matchLabels:app: hellotier: backendtrack: stablereplicas: 7template:metadata:labels:app: hellotier: backendtrack: stablespec:containers:- name: helloimage: "mike0405/hello-go-gke:1.0"ports:- name: httpcontainerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: hello
spec:selector:app: hellotier: backendports:- protocol: "TCP"port: 80targetPort: 80[root@k8s-01 chapter05]# kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
dnsutils                        1/1     Running   0          129m
frontend-76c7d58dc5-l5kcz       1/1     Running   0          5m30s
hello-84ccf7cd9d-97htk          1/1     Running   0          7m2s
hello-84ccf7cd9d-9sl6v          1/1     Running   0          7m2s
hello-84ccf7cd9d-9tg8f          1/1     Running   0          7m2s
hello-84ccf7cd9d-bps5g          1/1     Running   0          7m2s
hello-84ccf7cd9d-lh446          1/1     Running   0          7m2s
hello-84ccf7cd9d-tl2gx          1/1     Running   0          7m2s
hello-84ccf7cd9d-w2hjz          1/1     Running   0          7m2s
hello-world-7457d6ddb5-g2fcf    1/1     Running   0          37m
hello-world-7457d6ddb5-mknkq    1/1     Running   0          37m
nginx-97499b967-jzxwg           1/1     Running   0          42h
redis-master-7d557b94bb-8wqjh   1/1     Running   0          60m
web-764vs                       1/1     Running   0          4h8m
web-kd8ml                       1/1     Running   0          4h8m
web-rqc7q                       1/1     Running   0          4h8m

INGRESS

为什么需要INGRESS ? 
一个重要原因,每个LoadBalancer服务都需要自己负载均衡器和自己的公共IP地址,而一个Ingress只需要一个,即使提供对数个服务的访问时也是如此。对象发送HTTP请求时请求中的主机和路径决定请求转发给哪个服务。internet - ingress - serviceingress 可以理解成nginx配置文件

MetalLB使用

这个了解下,根据实际情况看

参考文档

https://edu.csdn.net/course/detail/27762?spm=1003.2449.3001.8295.2

相关文章:

飞天使-k8s基础组件分析-服务与ingress

文章目录 服务的介绍服务代理服务发现连接集群外服务服务发布无头服务 服务&#xff0c;pod和dns的关系端口转发通过expose 暴露应用服务案例INGRESSMetalLB使用参考文档 服务的介绍 服务的作用是啥&#xff1f; 提供外部调用&#xff0c;保证podip的真实性看看服务解决了什么…...

Unity——拖尾特效

拖尾是一种很酷的特效。拖尾的原理来自人类的视觉残留&#xff1a;观察快速移动的明亮物体&#xff0c;会看到物体移动的轨迹。摄像机通过调整快门时间&#xff0c;也可以拍出具有拖尾效果的照片&#xff0c;如在城市的夜景中&#xff0c;汽车的尾灯拖曳出红色的线条。 在较老…...

java开发之fastjson

依赖 <!-- fastjson依赖 --> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> <…...

第一个C语言程序:HelloWorld

第一个C语言程序 注释 注释 对代码的解释和说明 特点 ○ 不会被执行 目的 让人们能够更加轻松地看懂代码 分类 行注释 // 快键键 ctrl/ 块注释 /**/ 快捷键 shiftalta 示例代码&#xff1a; #include <stdio.h>int main() {// 行注释/*块注释*/printf("hello w…...

golang 使用 viper 加载配置文件 自动反序列化到结构

文章博客地址:golang 使用 viper 加载配置 自动反序列化到结构 golang使用 viper 无需设置 mapstructure tag 根据配置文件后缀 自动返序列化到结构解决结构有下划线的字段解析不成功问题 viper 正常加载配置文件 golang viper 其中可以用来 查找、加载和反序列化JSON、TOML…...

C#设计模式六大原则之--接口隔离原则

设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守&#xff0c;而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内&#xff0c;努为做到一个良好的设计。本文主要介绍一下.NET(C#)…...

【面试题】:axios二次封装都进行了哪些配置以及如果项目里面有两个baseURL你怎么解决?

一.axios的概念 Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 二.axios的特点&#xf…...

谈谈对 GMP 的简单认识

犹记得最开始学习 golang 的时候&#xff0c;大佬们分享 GMP 模型的时候&#xff0c;总感觉云里雾里&#xff0c;听了半天&#xff0c;并没有一个很清晰的概念&#xff0c;不知 xmd 是否会有这样的体会 虽然 golang 入门很简单&#xff0c;但是对于理解 golang 的设计思想和原…...

Java正则表达式系列--从字符串中提取字符串或数字

原文网址&#xff1a;Java正则表达式系列--从字符串中提取字符串或数字_IT利刃出鞘的博客-CSDN博客 简介 本文用示例介绍Java如何使用正则表达式从字符串中提取想要的内容&#xff08;字符串或者数字等&#xff09;。 例1&#xff1a;提取一次不同内容 需求 从字符串中找到…...

机器学习实战之模型的解释性:Scikit-Learn的SHAP和LIME库

概要 机器学习模型的“黑箱”困境 机器学习模型的崛起让我们惊叹不已&#xff01;不论是预测房价、识别图片中的猫狗&#xff0c;还是推荐给你喜欢的音乐&#xff0c;这些模型都表现得非常出色。但是&#xff0c;有没有想过&#xff0c;这些模型到底是如何做出这些决策的呢&a…...

Go 语言进阶与依赖管理 | 青训营

Powered by:NEFU AB-IN 文章目录 Go 语言进阶与依赖管理 | 青训营 语言进阶依赖管理测试 Go 语言进阶与依赖管理 | 青训营 GO语言工程实践课后作业&#xff1a;实现思路、代码以及路径记录 语言进阶 Go可以充分发挥多核优势&#xff0c;高效运行 Goroutine是Go语言中的协程…...

hyperf 十三 视图

教程&#xff1a;Hyperf composer地址&#xff1a;hyperf/view - Packagist 本次测试使用twig twig composedr地址&#xff1a;twig/twig - Packagist twig 文档地址&#xff1a;Home - Twig - The flexible, fast, and secure PHP template engine 一、安装 composer re…...

请你说说前端图形图像的框架

前端图形图像方面有许多强大的框架和库&#xff0c;使得开发者能够更容易地创建丰富的视觉效果和复杂的图形应用。下面列举了一些主要的框架和库&#xff1a; 1. Three.js Three.js 是一款运行在浏览器中的 3D 引擎&#xff0c;你可以用它创建各种三维场景&#xff0c;包括了…...

C++数据结构学习——栈

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、栈二、C语言实现1.声明代码2.实现增删查改代码3.测试代码 总结 前言 栈&#xff08;Stack&#xff09;是计算机科学中一种常见的数据结构&#xff0c;它是…...

【C++笔记】C++之类与对象(下)

【C笔记】C之类与对象(下&#xff09; 1、再看构造函数1.1、构造函数的初始化列表1.2、C支持单参数的构造函数的隐式类型转换1.3、匿名对象 2、Static成员2.1、为什么要有静态成员变量&#xff1f;2.2、一个类的静态成员变量属于这个类的所有对象2.3、静态成员函数 3、友元3.1、…...

管理类联考——英语——实战篇——大作文——图表——动态图表——整体效果

动态图表模板 What is clearly presented in the above 图表类型 is that dramatic changes have taken place in 主题词1 from 年份1 to 年份2.During the period, there was a marked jump from 数字1 to 数字2 in 事物1,while that of 事物2 declined significantly from 数…...

threejs纹理加载三(视频加载)

threejs中除了能把图片作为纹理进行几何体贴图以外&#xff0c;还可以把视频作为纹理进行贴图设置。纹理的类型有很多&#xff0c;我们可以用不同的加载器来加载&#xff0c;而对于视频作为纹理&#xff0c;我们需要用到今天的主角&#xff1a;VideoTexture。我们先看效果&…...

VUE笔记(三)vue的语法

一、计算属性 1、计算属性的概念 计算属性是依赖于源数据(data或者属性中的数据)&#xff0c;在元数据的基础上进行逻辑运算后得到的新的数据&#xff0c;计算属性要依赖于源数据&#xff0c;源数据数据变化计算属性也会变化 2、计算属性的语法 在vue2中使用computed这个选…...

探讨uniapp的路由与页面生命周期问题

1 首先我们引入页面路由 2 页面生命周期函数 onLoad() {console.log(页面加载)},onShow() {console.log(页面显示)},onReady(){console.log(页面初次显示)},onHide() {console.log(页面隐藏)},onUnload() {console.log(页面卸载)},onBackPress(){console.log(页面返回)}3 页面…...

咸鱼之王俱乐部网站开发

我的俱乐部 最新兑换码 *注意区分大小写&#xff0c;中间不能有空格&#xff01; APP666 HAPPY666 QQ888 QQXY888 vip666 VIP666 XY888 app666 bdvip666 douyin666 douyin777 douyin888 happy666 huhushengwei888 taptap666 周活动 宝箱周 宝箱说明 1.木质宝箱开启1个…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...