k8s微服务
一 、什么是微服务
用控制器来完成集群的工作负载,那么应用如何暴漏出去?需要通过微服务暴漏出去后才能被访问
-
Service是一组提供相同服务的Pod对外开放的接口。
-
借助Service,应用可以实现服务发现和负载均衡。
-
service默认只支持4层负载均衡能力,没有7层功能。(可以通过Ingress实现)

二、微服务的类型
示例:
#生成控制器文件并建立控制器
[root@k8s-master ~]# kubectl create deployment timinglee --image myapp:v1 --replicas 2 --dry-run=client -o yaml > timinglee.yaml#生成微服务yaml追加到已有yaml中
[root@k8s-master ~]# kubectl expose deployment timinglee --port 80 --target-port 80 --dry-run=client -o yaml >> timinglee.yaml[root@k8s-master ~]# vim timinglee.yaml
[root@k8s-master ~]# kubectl apply -f timinglee.yaml
deployment.apps/timinglee created
service/timinglee created[root@k8s-master ~]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 19h
timinglee ClusterIP 10.99.127.134 <none> 80/TCP 16s
微服务默认使用iptables调度[root@k8s-master ~]# kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 19h <none>
timinglee ClusterIP 10.99.127.134 <none> 80/TCP 119s app=timinglee#集群内部IP 134
#可以在火墙中查看到策略信息
[root@k8s-master ~]# iptables -t nat -nL
KUBE-SVC-I7WXYK76FWYNTTGM 6 -- 0.0.0.0/0 10.99.127.134 /* default/timinglee cluster IP */ tcp dpt:80
三、ipvs模式
-
Service 是由 kube-proxy 组件,加上 iptables 来共同实现的
-
kube-proxy 通过 iptables 处理 Service 的过程,需要在宿主机上设置相当多的 iptables 规则,如果宿主机有大量的Pod,不断刷新iptables规则,会消耗大量的CPU资源
-
IPVS模式的service,可以使K8s集群支持更多量级的Pod
3.1 ipvs模式配置方式
1 在所有节点中安装ipvsadm
[root@k8s-所有节点 pod]yum install ipvsadm –y
[root@k8s-master ~]# dnf install ipvsadm -y
[root@k8s-node1 ~]# dnf install ipvsadm -y
[root@k8s-node2 ~]# dnf install ipvsadm -y
2 修改master节点的代理配置

[root@k8s-master ~]# kubectl -n kube-system edit cm kube-proxy
![]()

3 重启pod,在pod运行时配置文件中采用默认配置,当改变配置文件后已经运行的pod状态不会变化,所以要重启pod



[!NOTE]
切换ipvs模式后,kube-proxy会在宿主机上添加一个虚拟网卡:kube-ipvs0,并分配所有service IP
四、微服务类型详解
4.1 clusterip
特点:
clusterip模式只能在集群内访问,并对集群内的pod提供健康检测和自动发现功能
示例:
[root@k8s-master ~]# kubectl run testpod --image myapp:v1
pod/testpod created
[root@k8s-master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
testpod 1/1 Running 0 3s
[root@k8s-master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINES S GATES
testpod 1/1 Running 0 18s 10.244.1.27 k8s-node2.timinglee.org <none> <none>
[root@k8s-master ~]# kubectl get pods -o wide --show-labels
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINES S GATES LABELS
testpod 1/1 Running 0 45s 10.244.1.27 k8s-node2.timinglee.org <none> <none> run=testpod
[root@k8s-master ~]# kubectl expose pod testpod --port 80 --target-port 80 --dry-run=client -o yaml > testpod-svc.yml
[root@k8s-master ~]# vim testpod-svc.yml



[root@k8s-master ~]# kubectl run busybox -it --image busyboxplus:latest
/ # curl testpod.default.svc.cluster.local.
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
/ # curl testpod.default.svc.cluster.local.
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>/ # cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local timinglee.org
options ndots:5/ # nslookup testpod.default.svc.cluster.local.
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.localName: testpod.default.svc.cluster.local.
Address 1: 10.106.59.102 testpod.default.svc.cluster.local
/ # nslookup testpod
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.localName: testpod
Address 1: 10.106.59.102 testpod.default.svc.cluster.local
[root@k8s-master ~]# kubectl delete -f testpod-svc.yml
service "testpod" deleted
4.2 ClusterIP中的特殊模式headless
headless(无头服务)
对于无头 Services 并不会分配 Cluster IP,kube-proxy不会处理它们, 而且平台也不会为它们进行负载均衡和路由,集群访问通过dns解析直接指向到业务pod上的IP,所有的调度有dns单独完成
[root@k8s-master ~]# vim testpod-svc.yml




/ # curl testpod
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
/ # curl testpod/hostname.html
testpod
/ # curl testpod/hostname.html
testpod[root@k8s-master ~]# kubectl delete -f testpod-svc.yml
service "testpod" deleted
4.3 nodeport
通过ipvs暴漏端口从而使外部主机通过master节点的对外ip:<port>来访问pod业务
其访问过程为:
![]()
示例:
[root@k8s-master ~]# vim testpod-svc.yml
[root@k8s-master ~]# kubectl apply -f testpod-svc.yml
service/testpod created
[root@k8s-master ~]# kubectl get svc testpod
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
testpod NodePort 10.101.130.40 <none> 80:30774/TCP 26s

[!NOTE]
nodeport默认端口
nodeport默认端口是30000-32767,超出会报错
#####直接指定端口 若超过32767
[root@k8s-master ~]# vim testpod-svc.yml


如果需要使用这个范围以外的端口就需要特殊设定
[root@k8s-master ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml

[!NOTE]
添加“--service-node-port-range=“ 参数,端口范围可以自定义
修改后api-server会自动重启,等apiserver正常启动后才能操作集群
集群重启自动完成在修改完参数后全程不需要人为干预

[root@k8s-master ~]# kubectl delete -f testpod-svc.yml
service "testpod" deleted
4.4 loadbalancer
云平台会为我们分配vip并实现访问,如果是裸金属主机那么需要metallb来实现ip的分配
![]()
示例:
[root@k8s-master ~]# vim testpod-svc.yml

LoadBalancer模式适用云平台,裸金属环境需要安装metallb提供支持
4.5 metalLB
官网:Installation :: MetalLB, bare metal load-balancer for Kubernetes

metalLB功能
为LoadBalancer分配vip
部署方式
修改文件中镜像地址,与harbor仓库路径保持一致
[root@k8s-master ~]# mkdir metalLB
[root@k8s-master ~]# cd metalLB/
[root@k8s-master metalLB]# ls
[root@k8s-master metalLB]# ls
metallb-native.yaml metalLB.tag.gz
[root@k8s-master metalLB]# vim metallb-native.yaml



###部署服务



#####配置分配地址段
[root@k8s-master metalLB]# vim configmap.yml


4.6 externalname
-
开启services后,不会被分配IP,而是用dns解析CNAME固定域名来解决ip变化问题
-
一般应用于外部业务和pod沟通或外部业务迁移到pod内时
-
在应用向集群迁移过程中,externalname在过度阶段就可以起作用了。
-
集群外的资源迁移到集群时,在迁移的过程中ip可能会变化,但是域名+dns解析能完美解决此问题
示例:
[root@k8s-master ~]# kubectl delete -f testpod-svc.yml
service "testpod" deleted
[root@k8s-master ~]# vim testpod-svc.yml



[root@k8s-master ~]# kubectl delete -f testpod-svc.yml
service "testpod" deleted
五、Ingress-nginx
官网:
Installation Guide - Ingress-Nginx Controller
5.1 ingress-nginx功能

-
一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,支持7层
-
Ingress由两部分组成:Ingress controller和Ingress服务
-
Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。
-
业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维护了对应的 Ingress Controller。
5.2 部署ingress
实验素材
[root@k8s-master ~]# mkdir ingress
[root@k8s-master ~]# cd ingress/
[root@k8s-master ingress]# ls
[root@k8s-master ingress]# mkdir app
[root@k8s-master ingress]# cd app/
[root@k8s-master app]# ls
[root@k8s-master app]# kubectl create deployment myappv1 --image myapp:v1 --dry-run=client -o yaml > myapp-v1.yml
[root@k8s-master app]# vim myapp-v1.yml
[root@k8s-master app]# cp myapp-v1.yml myapp-v2.yml
[root@k8s-master app]# vim myapp-v2.yml

[root@k8s-master app]# kubectl apply -f myapp-v1.yml
deployment.apps/myappv1 created
[root@k8s-master app]# kubectl apply -f myapp-v2.yml
deployment.apps/myappv2 created
[root@k8s-master app]# kubectl expose deployment myappv1 --port 80 --target-port 80 --dry-run=client -o yaml >> myapp-v1.yml
[root@k8s-master app]# kubectl expose deployment myappv2 --port 80 --target-port 80 --dry-run=client -o yaml >> myapp-v2.yml
[root@k8s-master app]# vim myapp-v1.yml
[root@k8s-master app]# vim myapp-v2.yml

5.2.1 下载部署文件
[root@k8s-master app]# cd ..
[root@k8s-master ingress]# ls
app deploy.yaml
[root@k8s-master ingress]# vim deploy.yaml





5.2.2 安装ingress
[root@k8s-master ~]# vim deploy.yaml





#修改微服务为loadbalancer
[root@k8s-master ingress]# kubectl -n ingress-nginx edit svc ingress-nginx-controller

[!NOTE]
在ingress-nginx-controller中看到的对外IP就是ingress最终对外开放的ip
5.2.3 测试ingress


[root@k8s-master ingress]# vim ingress1.yml



[!NOTE]
ingress必须和输出的service资源处于同一namespace
5.3 ingress 的高级用法
5.3.1 基于路径的访问


生成ingress
[root@k8s-master ingress]# ls
app deploy.yaml ingress1.yml ingress-nginx-1.11.2.tag.gz
[root@k8s-master ingress]# cp ingress1.yml ingress2.yml
[root@k8s-master ingress]# vim ingress2.yml

[root@k8s-master ingress]# vim /etc/hosts


[root@k8s-master ingress]# kubectl delete -f ingress2.yml
ingress.networking.k8s.io "myapp" deleted
5.3.2 基于域名的访问
[root@k8s-master ingress]# cp ingress2.yml ingress3.yml
[root@k8s-master ingress]# vim ingress3.yml

[root@k8s-master ingress]# vim /etc/hosts

5.3.3 建立tls加密
#建立证书
[root@k8s-master ingress]# openssl req -newkey rsa:2048 -nodes -keyout tls.key -x509 -days 365 -subj "/CN=nginxsvc/O=nginxsvc" -out tls.crt
#建立加密资源类型secret
[root@k8s-master ingress]# kubectl create secret tls web-tls-secret --key tls.key --cert tls.crt
secret/web-tls-secret created

[!NOTE]
secret通常在kubernetes中存放敏感数据,他并不是一种加密方式,在后面课程中会有专门讲解
[root@k8s-master ingress]# cp ingress3.yml ingress4.yml
[root@k8s-master ingress]# vim ingress4.yml

[root@k8s-master ingress]# kubectl apply -f ingress4.yml
ingress.networking.k8s.io/myapp configured




[root@k8s-master ingress]# kubectl delete -f ingress4.yml
ingress.networking.k8s.io "myapp" deleted
5.3.4 建立auth认证
#建立认证文件
[root@k8s-master ingress]# dnf install httpd-tools -y
[root@k8s-master ingress]# htpasswd -cm auth lee
New password:
Re-type new password:
Adding password for user lee
[root@k8s-master ingress]# cat auth
lee:$apr1$0mCu4T3l$BFqJaLTzfAkjInTijB3Qe/
#建立认证类型资源

#建立ingress5基于用户认证的yaml文件
[root@k8s-master ingress]# cp ingress2.yml ingress5.yml
[root@k8s-master ingress]# vim ingress5.yml




[root@k8s-master ingress]# kubectl delete -f ingress5.yml
ingress.networking.k8s.io "myapp" deleted
5.3.5 rewrite重定向
[root@k8s-master ingress]# cp ingress5.yml ingress6.yml
[root@k8s-master ingress]# vim ingress6.yml


[root@k8s-master ingress]# kubectl delete -f ingress6.yml
ingress.networking.k8s.io "myapp" deleted
[root@k8s-master ingress]# vim ingress6.yml

[root@k8s-master ingress]# kubectl delete -f ingress6.yml
ingress.networking.k8s.io "myapp" deleted
六、Canary金丝雀发布

6.1 么是金丝雀发布
金丝雀发布(Canary Release)也称为灰度发布,是一种软件发布策略。
主要目的是在将新版本的软件全面推广到生产环境之前,先在一小部分用户或服务器上进行测试和验证,以降低因新版本引入重大问题而对整个系统造成的影响。
是一种Pod的发布方式。金丝雀发布采取先添加、再删除的方式,保证Pod的总量不低于期望值。并且在更新部分Pod后,暂停更新,当确认新Pod版本运行正常后再进行其他版本的Pod的更新。
6.2 Canary发布方式
![]()
其中header和weiht中的最多
6.2.1 基于header(http包头)灰度

-
通过Annotaion扩展
-
创建灰度ingress,配置灰度头部key以及value
-
灰度流量验证完毕后,切换正式ingress到新版本
-
之前我们在做升级时可以通过控制器做滚动更新,默认25%利用header可以使升级更为平滑,通过key 和vule 测试新的业务体系是否有问题。
示例:
[root@k8s-master ingress]# vim ingress1.yml

[root@k8s-master ingress]# kubectl apply -f ingress1.yml
ingress.networking.k8s.io/myappv1 created
[root@k8s-master ingress]# cp ingress2.yml ingress7.yml
[root@k8s-master ingress]# vim ingress7.yml

6.2.2 基于权重的灰度发布

-
通过Annotaion拓展
-
创建灰度ingress,配置灰度权重以及总权重
-
灰度流量验证完毕后,切换正式ingress到新版本
示例:
[root@k8s-master ingress]# kubectl delete -f ingress7.yml
ingress.networking.k8s.io "myapp" deleted
[root@k8s-master ingress]# vim ingress7.yml
[root@k8s-master ingress]# kubectl apply -f ingress7.yml
ingress.networking.k8s.io/myappv2 created
[root@k8s-master ingress]# vim check_ingress.sh

[root@k8s-master ingress]# kubectl delete -f ingress7.yml
ingress.networking.k8s.io "myappv2" deleted
[root@k8s-master ingress]# kubectl delete -f ingress1.yml
ingress.networking.k8s.io "myappv1" deleted
相关文章:
k8s微服务
一 、什么是微服务 用控制器来完成集群的工作负载,那么应用如何暴漏出去?需要通过微服务暴漏出去后才能被访问 Service是一组提供相同服务的Pod对外开放的接口。 借助Service,应用可以实现服务发现和负载均衡。 service默认只支持4层负载均…...
【Java】Java 的反射机制(一):反射概述
Java 的反射机制(一):反射概述 1.反射概述1.1 静态语言 / 动态语言1.1.1 动态语言1.1.2 静态语言 1.2 Java Reflection1.3 Java 反射机制提供的功能1.4 反射的优点和缺陷1.5 反射相关的主要 API1.6 代码示例 2.Class 类2.1 什么是 Class 类2.…...
Monorepo pnpm 模式管理多个 web 项目
Monorepo pnpm 模式管理多个 web 项目 Monorepo pnpm 模式管理多个 web 项目项目地址git flow 工作流程pnpm workspace.npmrc初始化项目架构引入Husky规范git提交配置eslint和prettiereslint 配置prettier 配置 配置lint-staged创建项目创建shared项目全局安装 vue在 packages …...
2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者,看是有点意料之外,其实也在情理之中。
近日,2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者,这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家,如今却将全球范围内对机器学习和神经网络的研究和开发作为了一种能…...
《深入理解 C++策略模式的变体:编程灵活性的新维度》
在 C编程的广阔领域中,设计模式起着至关重要的作用,它们为软件架构提供了可复用的解决方案。其中,策略模式是一种非常强大的设计模式,它允许算法的行为在运行时根据不同的策略进行改变。而策略模式的变体则进一步扩展了其灵活性和…...
一起体验AI动手实验,OceanBase 2024 年度发布会精彩预告
2024年OceanBase年度发布会将于10月23日在北京望京凯悦酒店举行。此次大会围绕“不止于记录”的主题,共同探讨当前数据库领域的前沿话题,包含主论坛、分论坛、AI 动手实训营、开源技术交流会等多个环节,诚邀全国各地的企业和开发者共同参与&a…...
Download Vmware Fusion (free for person)
1. web link ProductFiles - Support Portal - Broadcom support portal 2. Register user (Required) use your email to register a account 3. login and download note: the username is the email name....
【Java数据结构】二叉树
【本节目标】 1. 掌握树的基本概念 2. 掌握二叉树概念及特性 3. 掌握二叉树的基本操作 4. 完成二叉树相关的面试题练习 一. 树型结构 1 概念★ 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次关系的集…...
虎牙Android面试题及参考答案
给个数组,找出数组中第 k 大的数(利用快排思想 / 用小顶堆,他说可以用大顶堆?) 利用快排思想:快速排序的核心思想是分治和分区。在找数组中第 k 大的数时,每次选择一个基准元素,将数组分为两部分,左边部分小于基准元素,右边部分大于基准元素。如果基准元素最终的下标…...
C++:错误代码分析<2>
🌏主页:R6bandito_ 🚀所属专栏:C/C错误代码收集整理 源码 考虑以下代码: void do_some_work() {std::cout << "Do some work" << std::endl; }int main(int argc, const char* argv[]) {std::…...
怎么ping网络ip地址通不通
怎么Ping网络IP地址通不通?要检查网络中的IP地址是否连通,可以使用Ping命令。Ping命令通过发送ICMP(Internet Control Message Protocol,因特网控制消息协议)Echo请求报文并等待回应,来判断目标主机是否可…...
前端新机部署
编辑器:vscode 下载地址 vscode常用插件 显示代码修改历史、作者等信息 GitLens Nodejs版本 Node版本管理工具 Nvm下载地址 nvm常用命令: nvm ls // 查看安装的所有node.js的版本nvm list available //查看可以安装的所有node.js版本nvm install 版本…...
对比 Babel、SWC 和 Oxc:JavaScript 和 TypeScript 工具的未来
随着现代前端开发的快速演变,JavaScript 和 TypeScript 的工具链不断更新,以满足开发者对性能和效率的需求。我们将对比三款流行的工具:Babel、SWC 和 Oxc,重点分析它们的特点、性能、应用场景以及适用性。 1. Babel:…...
MySQL SELECT 查询(三):查询常用函数大全
MySQL SELECT 查询(三):查询常用函数大全 1. 单行函数 单行函数是 SQL 中一类重要的函数,它们可以对单行数据进行处理,并返回单个结果。单行函数可以嵌套使用,并提供灵活的数据处理能力。 1.1 定义 只对单…...
axios 的 get 请求传参数
在使用 Axios 发起 GET 请求时,参数通常是通过 URL 的查询字符串来传递的。Axios 提供了一个简洁的接口来构建这样的请求,并自动将参数附加到 URL 上。 以下是一个使用 Axios 发起 GET 请求并传递参数的示例: const axios require(axios);…...
用C++编写信息管理系统(歌单信息管理)
C语言是面向过程的编程语言,而C是面向对象的编程语言,在书写代码时风格有所不同(也存在很多共性)。 程序说明 本次系统程序使用的是C语言进行编写,主要考虑怎么实现面向对象的问题。 因为本次程序属于小型系统程序&…...
对层级聚类树进行模块分割,定位基因在哪个模块中
拷贝数据到 ImageGP (http://www.ehbio.com/Cloud_Platform/front/#/analysis?pageb%27Ng%3D%3D%27),并设置参数. ID untrt_N61311 untrt_N052611 untrt_N080611 untrt_N061011 trt_N61311 trt_N052611 trt_N080611 trt_N061011 ENSG000…...
机器学习【金融风险与风口评估及其应用】
机器学习【金融风险与风口评估及其应用】 一、机器学习在金融风险评估中的应用1.提升评估准确性2.实现自动化和智能化3.增强风险管理能力4.信用评估5.风险模型6.交易策略7.欺诈检测 二、机器学习在金融风口评估中的应用1.识别市场趋势2.评估创新潜力3.优化投资策略4. 自然语言处…...
【计算机网络 - 基础问题】每日 3 题(三十八)
✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…...
深入浅出MongoDB(五)
深入浅出MongoDB(五) 文章目录 深入浅出MongoDB(五)可重试读取可重试写入读关注readConcern支持写关注 可重试读取 可重试读取允许mongodb驱动程序在遇到某些网络或服务器错误时,自动重试某些读取操作一次。只有连接到…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...









