Kubernetes生产实践系列之二十二:Service Mesh之在Kubernetes部署Linkerd2进行service mesh

Service Mesh 实战:Istio 与 Linkerd 在 Kubernetes 中的选型与落地 Service Mesh 是云原生架构中解决微服务间通信治理的核心范式,其本质是将服务发现、熔断、重试、mTLS、可观测性等能力从应用代码中剥离,下沉至独立的数据平面代理(如 Envoy 或 Linkerd2-proxy),通过控制平面统一配置与分发。它弥补了 Kubernetes 在运行时流量治理层面的能力缺失,使团队无需修改业务代码即可实现零侵入的弹性保障与安全加固。在真实生产环境中,Istio 凭借丰富的 CRD 和企业级功能成为复杂场景首选,而 Linkerd 则以轻量、开箱即用和 Rust 编写的 阅读详情

一、前言

service mesh是为复杂微服务系统提供基础设施服务的方法,支持Kubernetes的service mesh实现包括文章《kubernetes系列之十八:使用helm安装istio》和《Kubernetes生产实践系列之二十三:Service Mesh之在Kubernetes部署Istio进行service mesh》介绍的Istio以及本文要介绍的Linkerd2。

Linkerd可以在不进行任何入侵性改动的情况下,为部署在Kubernetes的微服务提供可调试性、可观测性、可靠性和安全性等能力。Linkerd主要包含UI、控制面和数据面三大组建。

根据众多测评的结果,普遍认为Linkerd2在数据面基于Rust编写的linkerd-proxy的性能要比Istio的Envoy好:

结论:

与裸金属相比,在常规条件下,Linkerd 和 Istio 的开销都算是可以接受的。当进入高负载状态时,相对于 Istio,Linkerd 能够提供更高的 RPS,并且使用更少的资源。

结论:

对于这种综合的工作负载,Istio的Envoy代理使用的CPU比Linkerd多了50%以上。Linkerd的控制平面使用了Istio的一小部分,尤其是在考虑“核心”组件时。

结论:

In this experiment, both the Linkerd2-meshed setup and Istio-meshed setup experienced higher latency and lower throughput, when compared with the baseline setup. The latency incurred in the Istio-meshed setup was higher than that observed in the Linkerd2-meshed setup. The Linkerd2-meshed setup was able to handle higher HTTP and GRPC ping throughput than the Istio-meshed setup.

转载自https://blog.youkuaiyun.com/cloudvtech

二、Linkerd2架构

2.1 架构

Linkerd架构由控制面和数据面组成:

  1. 控制面主要的工作包括遥测数据汇总、提供API、配置数据面proxy等,模块包括Controller(提供API服务)、Destination(proxy配置和路由)、Identity(安全控制/mTLS)、Proxy Injector(是一个Kubernetes准入控制器,在业务POD内部注入Linkerd数据面相关的sidecar)、Service Profile Validator(服务配置验证准入控制器)、Tap(具体服务的proxy的数据流观测)、Web(dashboard)、监控套件(Prometheus和Grafana)
  2. 数据面主要的工作是使用sidecard进行业务容器数据流的代理,由linkerd-init和proxy两个模块组成;linkerd-init进行iptables的配置,所配置的规则包括任何目的地为POD IP的数据都会先被转发到proxy的4143端口,任何从POD外出的数据包都会先被转发到4140端口;proxy是用Rust编写的轻量级透明代理,作为业务POD的sidecar对进出POD的流量进行拦截,可以无入侵的对HTTP、HTTP/2、WebSocket和任何TCP协议进行透明代理,自动的延迟感知的七层负载均衡,自动的四层非HTTP流量负载均衡,按需进行数据流TAP分析。

 

2.2 工作原理

Linkerd通过在业务POD中安装轻量级的透明代理sidecar进行业务POD的服务接入,这些sidecar代理随后会自动对进出POD的流量进行处理。这些轻量级的进程会向控制面发送测量的metrics并且从控制面接受控制信息。

在部署服务的时候,可以通过在部署的Kubernetes的spec文件里面加入如下annonation来声明接入到Linkerd的Service Mesh中:

linkerd.io/inject: enabled

对于所有的标注了这个label的部署,linkerd-inject准入控制器会在部署的时候将数据面的proxy作为sidecar注入到业务POD里面:

          

转载自https://blog.youkuaiyun.com/cloudvtech

三、部署Linkerd

参考:

https://linkerd.io/2/getting-started/

3.1 安装CLI

curl -sL https://run.linkerd.io/install | sh
export PATH=$PATH:$HOME/.linkerd2/bin

linkerd version
Client version: stable-2.7.1
Server version: unavailable

3.2 验证Kubernetes集群状态

linkerd check --pre

kubernetes-api
--------------
√ can initialize the client
√ can query the Kubernetes API

kubernetes-version
------------------
× is running the minimum Kubernetes API version
    Kubernetes is on version [1.11.5], but version [1.13.0] or more recent is required
    see https://linkerd.io/checks/#k8s-version for hints
× is running the minimum kubectl version
    kubectl is on version [1.11.3], but version [1.13.0] or more recent is required
    see https://linkerd.io/checks/#kubectl-version for hints

pre-kubernetes-setup
--------------------
× control plane namespace does not already exist
    The "linkerd" namespace already exists
    see https://linkerd.io/checks/#pre-ns for hints
× can create non-namespaced resources
√ can create ServiceAccounts
√ can create Services
√ can create Deployments
√ can create CronJobs
√ can create ConfigMaps
√ can create Secrets
√ can read Secrets
√ no clock skew detected

pre-kubernetes-capability
-------------------------
√ has NET_ADMIN capability
√ has NET_RAW capability

linkerd-version
---------------
√ can determine the latest version
√ cli is up-to-date

Status check results are ×

3.3. 安装Linkerd

linkerd install | kubectl apply -f -

3.4 安装后的check

服务的安装情况 deployment:

service:

转载自https://blog.youkuaiyun.com/cloudvtech

四、部署服务

4.1 修改yaml进行Linkerd注入和部署

这里部署这个服务系统emojivoto来进行演示,这个系统的构成如下:

web服务提供REST API,emoji服务通过gRPC提供emoji的查找和list操作,voting服务通过gRPC提供投票和结果排名服务,vote-bot会自动进行投票模拟。在服务中,投票选举🍩会失败,vote-bot选择🍩的概率是15%,所以结果里面回头15%左右的请求失败。

部署之前需要进行Linkerd的注入操作:

cat emojivoto.yml  | linkerd inject - > emojivoto-inject.yml

注入之后的yml如下,会加入linkerd.io/inject: enabled的注释:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: emoji
    app.kubernetes.io/part-of: emojivoto
    app.kubernetes.io/version: v10
  name: emoji
  namespace: emojivoto
spec:
  replicas: 1
  selector:
    matchLabels:
      app: emoji-svc
  template:
    metadata:
      annotations:
        linkerd.io/inject: enabled
      labels:
        app: emoji-svc
    spec:
      containers:
      - env:
        - name: GRPC_PORT
          value: "8080"
        - name: PROM_PORT
          value: "8801"
        image: buoyantio/emojivoto-emoji-svc:v10
        name: emoji-svc
        ports:
        - containerPort: 8080
          name: grpc
        - containerPort: 8801
          name: prom
        resources:
          requests:
            cpu: 100m
      serviceAccountName: emoji

4.2 部署结果

部署的POD如下:

选择里面web POD进行查看可以看到被注入了一个linkerd-init 容器:

和一个linkerd-proxy 容器:

而且从容器日志可以看到linkerd-init 容器进行的iptables操作如下:

2020/05/18 09:48:21 Tracing this script execution as [1589795301]
2020/05/18 09:48:21 State of iptables rules before run:
2020/05/18 09:48:21 > iptables -t nat -vnL
2020/05/18 09:48:21 < Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
2020/05/18 09:48:21 > iptables -t nat -F PROXY_INIT_REDIRECT
2020/05/18 09:48:21 < iptables: No chain/target/match by that name.
2020/05/18 09:48:21 > iptables -t nat -X PROXY_INIT_REDIRECT
2020/05/18 09:48:21 < iptables: No chain/target/match by that name.
2020/05/18 09:48:21 Will ignore port(s) [4190 4191] on chain PROXY_INIT_REDIRECT
2020/05/18 09:48:21 Will redirect all INPUT ports to proxy
2020/05/18 09:48:21 > iptables -t nat -F PROXY_INIT_OUTPUT
2020/05/18 09:48:21 < iptables: No chain/target/match by that name.
2020/05/18 09:48:21 > iptables -t nat -X PROXY_INIT_OUTPUT
2020/05/18 09:48:21 < iptables: No chain/target/match by that name.
2020/05/18 09:48:21 Ignoring uid 2102
2020/05/18 09:48:21 Redirecting all OUTPUT to 4140
2020/05/18 09:48:21 Executing commands:
2020/05/18 09:48:21 > iptables -t nat -N PROXY_INIT_REDIRECT -m comment --comment proxy-init/redirect-common-chain/1589795301
2020/05/18 09:48:21 < 
2020/05/18 09:48:21 > iptables -t nat -A PROXY_INIT_REDIRECT -p tcp --match multiport --dports 4190,4191 -j RETURN -m comment --comment proxy-init/ignore-port-4190,4191/1589795301
2020/05/18 09:48:21 < 
2020/05/18 09:48:21 > iptables -t nat -A PROXY_INIT_REDIRECT -p tcp -j REDIRECT --to-port 4143 -m comment --comment proxy-init/redirect-all-incoming-to-proxy-port/1589795301
2020/05/18 09:48:21 < 
2020/05/18 09:48:21 > iptables -t nat -A PREROUTING -j PROXY_INIT_REDIRECT -m comment --comment proxy-init/install-proxy-init-prerouting/1589795301
2020/05/18 09:48:21 < 
2020/05/18 09:48:21 > iptables -t nat -N PROXY_INIT_OUTPUT -m comment --comment proxy-init/redirect-common-chain/1589795301
2020/05/18 09:48:21 < 
2020/05/18 09:48:21 > iptables -t nat -A PROXY_INIT_OUTPUT -m owner --uid-owner 2102 -o lo ! -d 127.0.0.1/32 -j PROXY_INIT_REDIRECT -m comment --comment proxy-init/redirect-non-loopback-local-traffic/1589795301
2020/05/18 09:48:21 < 
2020/05/18 09:48:21 > iptables -t nat -A PROXY_INIT_OUTPUT -m owner --uid-owner 2102 -j RETURN -m comment --comment proxy-init/ignore-proxy-user-id/1589795301
2020/05/18 09:48:21 < 
2020/05/18 09:48:21 > iptables -t nat -A PROXY_INIT_OUTPUT -o lo -j RETURN -m comment --comment proxy-init/ignore-loopback/1589795301
2020/05/18 09:48:21 < 
2020/05/18 09:48:21 > iptables -t nat -A PROXY_INIT_OUTPUT -p tcp -j REDIRECT --to-port 4140 -m comment --comment proxy-init/redirect-all-outgoing-to-proxy-port/1589795301
2020/05/18 09:48:21 < 
2020/05/18 09:48:21 > iptables -t nat -A OUTPUT -j PROXY_INIT_OUTPUT -m comment --comment proxy-init/install-proxy-init-output/1589795301
2020/05/18 09:48:21 < 
2020/05/18 09:48:21 > iptables -t nat -vnL
2020/05/18 09:48:21 < Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 PROXY_INIT_REDIRECT  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* proxy-init/install-proxy-init-prerouting/1589795301 */
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 PROXY_INIT_OUTPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* proxy-init/install-proxy-init-output/1589795301 */
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain PROXY_INIT_OUTPUT (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 PROXY_INIT_REDIRECT  all  --  *      lo      0.0.0.0/0           !127.0.0.1            owner UID match 2102 /* proxy-init/redirect-non-loopback-local-traffic/1589795301 */
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0            owner UID match 2102 /* proxy-init/ignore-proxy-user-id/1589795301 */
    0     0 RETURN     all  --  *      lo      0.0.0.0/0            0.0.0.0/0            /* proxy-init/ignore-loopback/1589795301 */
    0     0 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* proxy-init/redirect-all-outgoing-to-proxy-port/1589795301 */ redir ports 4140
Chain PROXY_INIT_REDIRECT (2 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 4190,4191 /* proxy-init/ignore-port-4190,4191/1589795301 */
    0     0 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* proxy-init/redirect-all-incoming-to-proxy-port/1589795301 */ redir ports 4143

转载自https://blog.youkuaiyun.com/cloudvtech

五、通过Linkerd Dashboard观察Service Mesh

通过如下命令可以启动linkerd dashboard:

linkerd dashboard &

 

可以看到这个namespace的服务进行service mesh之后的状态:

也可以查看单个服务的信息:

Linkerd自带的监控系统还可以展示grafana监控信息:

转载自https://blog.youkuaiyun.com/cloudvtech

Service Mesh 原理与实战:从 Kubernetes 东西向流量治理说起 Service Mesh 是微服务架构中专用于治理服务间通信(即东西向流量)的基础设施层,其核心在于解耦应用逻辑与网络策略,通过 Sidecar 代理实现细粒度的流量控制、可观测性与零信任安全。它基于 Linux 网络命名空间、iptables 流量劫持和 xDS 动态配置等底层机制,将连接生命周期管理下沉至数据平面,弥补 Kubernetes 在规模化场景下的可观测性黑洞与安全策略碎片化短板。典型技术如 Istio(依托 Envoy)和 Linkerd(Rust 轻量代理)分别面向企业级可控性与快速落地需 阅读详情

相关推荐

Service Mesh 框架选型对比分析:Linkerd、Envoy、Istio、Conduit

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。

2401_84046677的博客 1127

Linkerd2入门

本文记录了如何快速开始Linkerd2的使用,包括安装Linkerd客户端工具、控制平面、viz扩展,并结合官方emojivoto示例程序讲解了如何通过viz仪表板调试HTTP/GRPC请求。

罗小爬的技术宝书 1921

Linkerd Kubernetes原生服务网格实战指南

服务网格是现代云原生架构中实现流量治理、可观测性与安全通信的核心基础设施。其本质是通过透明代理(sidecar)拦截应用流量,基于策略实施重试、熔断、mTLS等控制能力。Linkerd作为轻量级、Kubernetes原生的服务网格,摒弃复杂CRD和中心化控制面,转而深度集成K8s API原语(如Service、EndpointSlice、label/annotation),以极低学习成本实现高可靠流量管理。它特别适合Kubernetes新手入门、中小规模生产环境及GitOps流水线集成,广泛应用于微服务通信

读书、思考、生活 524

k8s 和 service mesh

微服务和云原生可能用到的相关组件。 一、什么是 Kubernetes(k8s) 1、Kubernetes 作为一种容器编排调度工具,解决了分布式应用程序的部署和调度问题 2、Kubernetes 本质上是通过声明式配置来实现应用生命周期管理 3、Kubernetes 通过 Service 对象将一个服务的多个实例组合在了一起,统一对外服务 4、作为微服务的可交付成果,容器解决了环境一致性问题,并在限制应用程序资源方面提供了更多的粒度。它们被广泛用作微服务的载体 5、为了应对服务流量高峰和平谷时,

AIGUO666666的博客 2619

linkerd2:Kubernetes的超轻,安全第一的服务网格。 Linkerd 2.x的主要仓库

Linkerd :balloon: 欢迎使用Linkerd! :waving_hand: Linkerd是Kubernetes的超轻,安全至上的服务网格。 Linkerd在您的Kubernetes堆栈中增加了关键的安全性,可观察性和可靠性功能,而无需更改代码。 Linkerd是一个云原生计算基金会( )项目。 回购布局 这是Linkerd 2.x开发线的主要仓库。 Linkerd存储库的完整列表为: :主Linkerd 2.x存储库,包括控制平面和CLI :Linkerd 2.x数据平面代理 :Linkerd 2.x gRPC API绑定 :Linkerd 1.x :linkerd.io网站(包括1.x和2

《uni-app 长列表优化:虚拟列表(vue-virtual-scroller)解决 1000+ 数据渲染卡顿》(附虚拟列表封装与多端适配)

本文详细介绍了虚拟列表技术在前端长列表渲染中的优化方案。针对传统v-for渲染导致的性能问题(内存占用高、渲染阻塞、滚动卡顿),提出基于vue-virtual-scroller的虚拟列表解决方案,通过可视区域渲染和DOM复用实现性能突破。文章包含核心原理、组件封装、多端适配及性能对比,并给出常见问题的解决方法。实践表明,该方案可将1000条数据的首次渲染时间从3800ms降至420ms,滚动FPS提升至55帧,显著改善用户体验。

qq_59041750的博客 2107

Linkerd2安装和使用

官方地址:https://linkerd.io/2/getting-started/ 步骤1:安装CLI 如果这是您第一次运行Linkerd,则需要将命令行界面(CLI)下载到本地计算机上。此CLI与Linkerd进行交互,包括将控制平面安装到Kubernetes集群上。 要安装CLI,请运行: curl -sL https://run.linkerd.io/install | sh 或者,您可...

3359

MAS1102量产工具实战指南:从下载到开卡,附固件选择与RDT优化技巧

本文提供MAS1102量产工具的实战指南,涵盖从工具下载、短接识别到开卡操作的全过程。重点解析了固件选择策略与RDT优化技巧,帮助用户成功修复基于联芸MAS1102主控的固态硬盘,解决常见开卡错误并提升SSD性能与稳定性。

c2d3e4f的博客 2191

Linkerd 2.3 发布,为 Kubernetes 实现零信任网络

开发四年只会写业务代码,分布式高并发都不会还做程序员? Image credit:Robert McGold...

weixin_33742618的博客 263

沐数科技数据开发岗笔试题2025

与数据库中的主键(Primary Key)​有所不同,业务主键(Business Key)​是业务层面的唯一标识,通常由业务规则决定,例如,订单号、订单明细号,身份证号等。用户授信表(table_credit):包含用户ID(uid)、授信申请时间(credit_submit_time_local)、授信状态(credit_status)。:在正态分布中,大约68%的数据值落在距离均值一个标准差的范围内,约95%的数据值落在两个标准差的范围内,而约99.7%的数据值落在三个标准差的范围内。

weixin_40121264的博客 3525

告别电源纹波!手把手教你用UCC28019设计一个高效率PFC模块(附完整原理图与BOM清单)

本文详细介绍了如何使用UCC28019设计高效率PFC模块,解决电源纹波问题。通过优化补偿网络、关键元器件选型及PCB布局,实现功率因数提升至0.99以上,降低输入电流谐波。附完整原理图与BOM清单,适用于电赛等快速开发场景。

weixin_42652674的博客 333

Service Mesh的架构演进:从Istio到Linkerd的对比与K8s实践

本文探讨了微服务架构中服务通信的痛点及ServiceMesh的解决方案。传统中间件导致业务代码臃肿、维护困难,而ServiceMesh通过Sidecar模式将服务治理能力从业务代码中剥离,由独立代理处理流量。文章对比了Istio(功能全面但复杂)和Linkerd(轻量高性能)的架构差异,并以K8s集成Istio为例演示了灰度发布的实现。ServiceMesh的核心价值在于无侵入代码、集中治理、增强可观测性和跨平台兼容性,建议根据场景选择Istio(企业级需求)或Linkerd(轻量级应用)。

huahua8088的博客 1091

深入浅出PWM:用示波器带你理解占空比与滤波效果

本文通过示波器实测,深入浅出地解析了PWM(脉宽调制)的核心原理。从占空比与平均电压的关系入手,详细演示了RC及有源滤波器如何将数字方波“翻译”为平滑模拟电压,并探讨了PWM-DAC的精度、响应速度等关键设计考量,为硬件调试与电路设计提供了实用的实践指导。

weixin_29292431的博客 343

Kubernetes (K8s) 与 Service Mesh 详解

本文详细介绍了 Kubernetes (K8s) 与 Service Mesh 技术,重点分析了 Kubernetes 原生网络模型的局限性及 Service Mesh 的解决方案。文章对比了 Istio、Linkerd、Consul Connect 和 Open Service Mesh 等主流产品的特点与适用场景,并探讨了 Kubernetes 1.28+ 对 Sidecar 的原生支持演进。核心功能部分深入解析了 Service Mesh 的可观测性和流量管理能力,包括自动指标收集、金丝雀发布等关键特

瘦到被风吹走的博客 1246

蓝桥杯单片机省一经验分享1:基础篇.含详细代码与应试技巧

含详细代码、驱动修改与应试技巧

qq_53529450的博客 1万+

使用 MATLAB/Simulink + Simscape Electrical + Simulink Design Optimization,构建一个沙漠环境中光伏组件灰尘积累与效率下降仿真模型

本文通过,构建了沙漠环境中光伏组件灰尘积累与效率下降仿真模型✅ 建立了风速-沙尘-积尘速率的物理关系✅ 仿真了灰尘积累过程及其对Isc 和 Pmax的影响✅ 量化分析了不同清洁策略的经济性✅ 提出了优化设计与智能运维建议。

xiaoheshang_123的博客 121

TGIK服务网格对比:Istio、Linkerd、Open Service Mesh实战分析

如果你正在寻找**Kubernetes服务网格**的最佳选择,那么你来对地方了!TGIK(TGI Kubernetes)作为专业的Kubernetes技术视频系列,深入探讨了三大主流服务网格解决方案:Istio、Linkerd和Open Service Mesh。本文将为你提供完整的**服务网格实战对比分析**,帮助你在微服务架构中做出明智的技术选型决策。 ## 📊 服务网格:现代微服务架构的

gitblog_00892的博客 1053

3、深入了解响应式扩展(Reactive Extensions)

本文深入探讨了响应式扩展(Reactive Extensions,Rx)的起源、核心概念及其在客户端和服务器端的应用。从Volta项目谈起,解析了Rx如何解决事件传输问题,并介绍了可观察对象(IObservable)和观察者(IObserver)的设计与实现机制。文章还详细讲解了Rx操作符、弹珠图的使用、拉模型与推模型的对偶性原理,并通过代码示例展示了如何将枚举转换为可观察对象。最后总结了Rx的优势,并展望其在未来软件开发中的广泛应用前景。

m2n3b4v5c6的博客 112

Service Mesh选型之争:Istio vs Linkerd,谁更适合你的业务场景?

深入解析Service Mesh选型难题,通过云原生实战教程对比Istio与Linkerd在微服务治理中的适用场景、性能开销与易用性差异,助你根据业务规模与团队能力做出最优选择,值得收藏。

QuickProceed的博客 908

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

新书推荐 |《Service Mesh实战:基于Linkerd和Kubernetes的微服务实践》

新书推荐《ServiceMesh实战:基于Linkerd和Kubernetes的微服务实践》长按二维码了解及购买思科技术专家撰写,以Linkerd和K8s为背景,详解ServiceM...

华章IT官方博客 510

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Dapr与Service Mesh:Istio和Linkerd的协同使用

在现代分布式系统架构中,开发人员经常面临一个关键决策:选择Dapr(分布式应用运行时)还是Service Mesh(服务网格)?实际上,这两者并非互斥的选择,而是可以协同工作的强大组合。Dapr专注于应用层的分布式原语,而Service Mesh如Istio和Linkerd则专注于网络层的流量管理、安全性和可观测性。 本文将深入探讨Dapr与主流Service Mesh(Istio和Linker...

gitblog_00496的博客 1034

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Kubernetes 与 Service Mesh 的深度集成指南

Service Mesh 作为云原生架构中的关键组件,与 Kubernetes 结合可以提供强大的服务治理能力。以下是两者集成使用的全面解析:控制平面管理配置应用PodSidecar代理 2. 主要集成点 Sidecar 注入:自动/手动将代理容器注入Pod CRD 扩展:通过自定义资源定义网格规则 服务发现:集成Kubernetes原生服务发现 流量拦截:通过iptables/ebpf重定向流量 二、主流 Service Mesh 方案对比 特性 Istio Linkerd Consul Co

ttyy1112的专栏 1310

腾讯云 K8S 集群实战 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 应用

Linkerd 是 Kubernetes 的服务网格。 它通过为您提供运行时调试(runtime debugging)、可观察性(observability)、可靠性(reliability)和安全性(security),使运行服务更轻松、更安全 — 所有这些都不需要对您的代码进行任何更改。 服务网格是用于处理服务间通信的专用基础设施层。它负责通过包含现代云原生应用程序的复杂服务拓扑来可靠地...

o__cc的博客 767

Helm与Service Mesh集成:Istio+Linkerd无缝对接的终极指南 [特殊字符]

Helm是Kubernetes的包管理器,它通过Chart(图表)机制简化了Kubernetes应用的部署和管理。对于现代微服务架构来说,Service Mesh(服务网格)如Istio和Linkerd已成为不可或缺的基础设施层。本文将深入探讨如何将Helm与Service Mesh无缝集成,实现云原生应用的现代化部署与管理。 ## 为什么需要Helm与Service Mesh集成? 🤔 在

gitblog_00956的博客 685

Linkerd的部署与入门--service mesh初步体验

本文侧重怎样将linkerd部署、运行起来,并简单介绍了Linkerd在一个模拟应用中的使用,以及Linkerd可视化面板。

Working hard and Focus 1475

Kubernetes 服务网格(Service Mesh)原理与实战指南

Service Mesh(服务网格)是 Kubernetes 微服务治理体系中的关键基础设施层,它以 sidecar 代理的方式为服务间通信提供安全、快速、可靠的保障。本文以 Kubernetes Handbook 中的服务治理章节为核心,系统讲解 Service Mesh 的定位与原理、可靠性机制(熔断、延迟感知负载均衡、服务发现与重试)、为什么需要引入它,并结合仓库中 [Linkerd](ht

gitblog_01151的博客 258
上一篇: Kubernetes生产实践系列之二十一:ServiceMesh之通过ambassador对Kubernetes外部的gRPC服务进行负载均衡
下一篇: Kubernetes生产实践系列之二十三:Service Mesh之在Kubernetes部署Istio进行service mesh
cloudvtech
博客等级 码龄9年 533粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值