- 博客(102)
- 收藏
- 关注
原创 istio mcp-over-xds 原理及实现
在今年五月份社区已经添加了 MCP-OVER-XDS的实现 ,在当前的master代码中已经 移除了mcp 协议 的实现代码,将全部转换为MCP-OVER-XDS实现,也就意味着istio 1.9将不再支持原有MCP协议,具体参考 XDS-OVER-MCP设计initConfigSources当我们配置的ConfigSource为XDS类型时,将创建XDS client,用于发起请求// 初始化一个ads clientxdsMCP, err := adsc.New(srcAddress.Host,
2020-12-15 19:43:15
1987
1
原创 本地部署istio多集群(共享控制面)
环境准备使用kind进行集群安装,通过静态路由打通两个集群的容器网络。cluster1 初始化cluster1 kind配置如下kind: ClusterapiVersion: kind.x-k8s.io/v1alpha4featureGates: GenericEphemeralVolume: truenetworking: podSubnet: "10.241.0.0/16" serviceSubnet: "10.95.0.0/16"nodes:- role: contro
2020-09-10 13:53:07
689
原创 istio-cni详解
概述Istio 在网格中部署的Pod中注入initContainer,istio-init。该istio-init容器设置荚的网络流量重定向到/从Istio三轮代理。这就要求将用户或服务帐户部署到网格上的Pod具有足够的Kubernetes RBAC权限才能部署具有NET_ADMIN和NET_RAW功能的容器。对于某些组织的安全合规性,要求Istio用户具有提升的Kubernetes RBAC权限是有问题的。Istio CNI插件是istio-init执行相同网络功能但不要求Istio用户启用提升的Kub
2020-09-10 13:52:34
1261
原创 keycloak+istio实现基于jwt的服务认证授权
envoy rbac介绍基于角色的访问控制(RBAC)为服务提供服务级别和方法级别的访问控制。RBAC政策是附加的。依次检查策略。根据操作以及是否找到匹配的策略,允许或拒绝请求。策略配置主要包括两个部分。permissions由AuthorizationPolicy中to转换过来定义角色的权限集。 每个权限都与OR语义匹配。 为了匹配此策略的所有操作,应使用any字段设置为true的单个Permission。principals由AuthorizationPolicy中to和when
2020-09-10 13:52:01
3000
原创 istio mcp探究
介绍MCP是基于订阅的配置分发API。配置使用者(即sink)从配置生产者(即source)请求更新资源集合.添加,更新或删除资源时,source会将资源更新推送到sink.sink积极确认资源更新,如果sink接受,则返回ACK,如果被拒绝则返回NACK,例如: 因为资源无效。一旦对先前的更新进行了ACK/NACK,则源可以推送其他更新.该源一次只能运行一个未完成的更新(每个集合).MCP是一对双向流gRPC API服务(ResourceSource和ResourceSink)。当source是
2020-08-28 14:42:26
1421
原创 istio 1.7发布
变更说明涉及以下变更:流量管理添加了 values.global.proxy.holdApplicationUntilProxyStarts config选项,它使sidecar注入器在pod容器列表的开始处注入sidecar,并将其配置为阻止所有其他容器的开始,直到代理就绪为止。默认情况下禁用此选项。(#11130)新增了对用于客户端证书和CA证书的SDS支持,该证书用于使用DestinationRule从Egress Gateway发起的TLS/mTLS(#14039)安全改进
2020-08-28 14:41:46
627
原创 控制pod内container执行顺序的几种姿势
介绍在使用k8s的过程中在特定场景可能需要控制pod的执行顺序,接下来我们将学习各个开源组件的实现方式istio中的实现今天在测试istio新功能时注意到istio中添加了values.global.proxy.holdApplicationUntilProxyStarts,使sidecar注入器在pod容器列表的开始处注入sidecar,并将其配置为阻止所有其他容器的开始,直到代理就绪为止。在查看代码后发现对istio-proxy容器注入了以下内容。 lifecycle:
2020-08-28 14:41:10
2887
2
翻译 在k8s中实现优雅关闭和零停机部署
在本文中,您将学习如何在Pod启动或关闭时防止断开的连接.您还将学习如何正常关闭长时间运行的任务.在Kubernetes中,创建和删除Pod是最常见的任务之一.当您执行滚动更新,扩展部署,每个新版本,每个作业和cron作业等时,都会创建Pod.但是在驱逐后,Pods也会被删除并重新创建-例如,当您将节点标记为不可调度时.如果这些Pod的性质如此短暂,那么当Pod在响应请求时却被告知关闭时会发生什么呢?请求在关闭之前是否已完成?接下来的请求又如何呢?在讨论删除Pod时会发生什么之前,有必要讨.
2020-08-13 13:17:32
5407
原创 你想要的CD工具 - flagger
介绍flagger是一个k8s operator,可以基于多种ingress 实现金丝雀升级,以进行流量转移,并使用Prometheus指标进行流量分析。canary分析器可以通过webhooks进行扩展,以运行系统集成/验收测试,负载测试或任何其他自定义验证。Flagger实现了一个控制环路,该环路逐渐将流量转移到金丝雀,同时测量关键性能指标,例如HTTP请求成功率,请求平均持续时间和Pod运行状况。 基于对KPI的分析,金丝雀会被提升或中止.工作原理flaager 可以通过自定义canary资
2020-08-07 15:33:10
959
原创 轻量级服务网格 - osm
介绍Open Service Mesh(OSM)是一种轻量级,可扩展的Cloud Native服务网格,它使用户能够统一管理,保护和获得针对高度动态微服务环境的开箱即用的可观察性功能。安装osmwget https://github.com/openservicemesh/osm/releases/download/v0.1.0/osm-v0.1.0-darwin-amd64.tar.gztar xf osm-v0.1.0-darwin-amd64.tar.gz# pre check./dar
2020-08-07 15:32:23
349
原创 istio证书签发流程
envoy 中的证书验证combined_validation_context组合的证书验证上下文包含默认的CertificateValidationContext和SDS配置。 当SDS服务器返回动态CertificateValidationContext时,动态和默认的CertificateValidationContext都将合并到新的CertificateValidationContext中以进行验证。 此合并是通过Message::MergeFrom()完成的,因此动态的Certifica
2020-08-07 15:31:32
1170
1
原创 istio请求路由分析
环境这里我们是在本机使用kind,安装查看容器对应的虚拟设备对for container in `crictl ps -q`doiflink=`crictl exec $container cat /sys/class/net/eth0/iflink`iflink=`echo $iflink|tr -d '\r'`veth=`grep -l $iflink /sys/class/net/*/ifindex`veth=`echo $veth|sed -e 's;^.*net/\(.*\)/if
2020-08-07 15:30:58
1601
原创 tekton入门-细数tekton用到的那些images
tekton中以pod为Task的运行单元,而Task中的step实际就是一个个pod,其中用到了许多容器用于进行初始化动作,本文将分析各个容器在tekton task运行时起到的作用entrypoint-image包含entrypoint 可执行文件的image,默认值"override-with-entrypoint:latest",在task pod启动时,会将/ko-app/entrypoint拷贝到具体step的/tekton/tools/entrypoint目录,作为首先调用的命令,将使用该
2020-07-15 13:57:05
629
原创 knative入门 - hello world
Knative有两个组件,可以独立安装或一起使用。为了帮助您挑选适合自己的组件,以下是每个组件的简要说明:Serving 为基于无状态请求的服务提供了一种零扩展抽象。Eventing提供了抽象来启用绑定事件源(例如Github Webhooks,Kafka)和使用者(例如Kubernetes或Knative Services)的绑定。Knative还具有一个Observability插件,该插件提供了标准工具,可用于查看Knative上运行的软件的运行状况本文将安装Serving后运行一个hel
2020-07-11 14:25:49
955
原创 自定义实现envoy rate limit service
envoy ratelimitenvoy 可以继承一个全局grpc ratelimit 服务,称之为为rate limit service,go-control-plane 是一个官方实现的golang 库github.com/envoyproxy/go-control-planego-control-plane中关于rls的pb文件为envoy/service/ratelimit/v2/rls.pb.go其包含了一个RegisterRateLimitServiceServer方法,将一个限流器实现
2020-07-11 14:25:00
792
原创 readnessgate controller demo
Readiness Gateskubernetes从1.11版本开始引入了Pod Ready++特性对Readiness探测机制进行扩展,在1.14版本时达到GA稳定版本,称其为Pod Readiness Gates。通过Pod Readiness Gates机制,用户可以将自定义的ReadinessProbe探测方式设置在Pod上,辅助kubernetes设置Pod何时达到服务可用状态Ready,为了使自定义的ReadinessProbe生效,用户需要提供一个外部的控制器Controller来设置相应
2020-07-11 14:24:25
439
原创 tekton入门 - trigger
triggertrigger使用户能够将事件有效负载中的字段映射到资源模板中。 换句话说,这允许事件既可以建模也可以将实例化为Kubernetes资源。 对于tektoncd/pipeline,这使得将配置封装到PipelineRuns和PipelineResources中变得容易。安装kubectl apply --filename https://storage.googleapis.com/tekton-releases/triggers/latest/release.yamlTrigger
2020-07-03 19:51:38
744
原创 tekton入门 - piplinerun
总览PipelineRun允许您实例化并执行集群内管道。管道按所需的执行顺序指定一个或多个任务。 PipelineRun按照指定的顺序在管道中执行任务,直到所有任务成功执行或发生故障为止。注意:PipelineRun自动为管道中的每个任务创建相应的TaskRun。Status字段跟踪PipelineRun的当前状态,并可用于监视进度。 此字段包含每个TaskRun的状态,以及用于实例化此PipelineRun的完整PipelineSpec,以实现全面的可审核性。配置PipelineRun必要字段
2020-07-03 19:50:56
538
原创 tekton入门 - pipline
pipline总览PipelineRun允许您实例化并执行集群上的。A 以所需的执行顺序Pipeline指定一个或多个Tasks。一个PipelineRun 执行Tasks中Pipeline,直到所有的顺序,他们被指定Tasks已成功执行或出现故障。注意: A会PipelineRun自动TaskRuns为中的每个 创建对应Task的内容Pipeline。该Status字段跟踪的当前状态PipelineRun,并可用于监视进度。此字段包含每个的状态TaskRun,以及PipelineSpec用于实例化此
2020-07-03 19:49:51
674
原创 tekton入门 - taskrun
taskrun一个TaskRun定义支持以下领域:需要:apiVersion-指定API版本,例如 tekton.dev/v1beta1。kind-将此资源对象标识为TaskRun对象。metadata-指定TaskRun唯一标识的元数据,例如name。spec-指定TaskRun的配置。taskRef或taskSpec -指定TaskRun将执行的tasks。可选的:serviceAccountName-指定一个ServiceAccount对象,该对象提供TaskRun用于执行
2020-07-03 19:48:55
1135
原创 tekton入门 - tasks
介绍task是steps的集合,可以在持续集成流程中按照特定的顺序执行,task在k8s集群中以pod的方式运行,task可以在其明明空间中可用,clustertask可以在集群范围内使用Task配置task配置字段如下必选:apiVersion-指定API版本。例如,tekton.dev/v1beta1。kind-将此资源对象标识为Task对象。metadata-指定资源对象元数据的唯一标识。例如name。spec-指定此Task资源对象的配置信息。steps-指定要在Task中运行
2020-07-03 19:48:02
1168
原创 tekton入门 - 起步
<h1 id="介绍">介绍</h1><p>Tekton是Kubernetes原生的持续集成和交付CI/CD解决方案。它允许开发人员跨云提供商和本地系统构建、测试和部署</p><p>包含以下四个组
2020-07-03 11:45:53
943
原创 基于k8s运行wasm的新玩具-krustlet
介绍Krustlet 是基于k8s运行wasm程序的负载,通过亲和性来运行wasm程序,其实现了kubelet api,且兼容了 kubectl logs 和 kubectl delete 命令。接下来将一步步安装、运行krustletkind安装kind config配置kind: ClusterapiVersion: kind.sigs.k8s.io/v1alpha3kubeadmConfigPatches:- | apiVersion: kubeadm.k8s.io/v1beta1
2020-07-01 15:22:19
1169
原创 云原生工作流引擎 - argo-workflow
argoargo工作流是什么Argo Workflows是一个开源的容器本机工作流引擎,用于在Kubernetes上协调并行作业。Argo Workflows通过Kubernetes CRD(自定义资源定义)实现。定义工作流,其中工作流中的每个步骤都是一个容器。将多步骤工作流建模为一系列任务,或者使用图形(DAG)捕获任务之间的依赖关系。使用Kubernetes上的Argo Workflow,可以在短时间内轻松运行用于计算机学习或数据处理的计算密集型作业。在Kubernetes上本地运行CI
2020-05-28 14:24:57
5222
原创 Argo CD-基于Kubernetes的声明式持续交付工具
什么是Argo CD?Argo CD是用于Kubernetes的声明性GitOps连续交付工具。为什么选择Argo CD?应用程序定义,配置和环境应为声明性的,并受版本控制。应用程序部署和生命周期管理应该是自动化的,可审核的且易于理解的。argo cd 架构Argo CD被实现为kubernetes控制器,该控制器连续监视正在运行的应用程序,并将当前的活动状态与所需的目标状态(在Git存储库中指定)进行比较。其活动状态偏离目标状态的已部署应用程序被标记为OutOfSync。Argo CD报
2020-05-28 14:23:50
1361
原创 基于envoy的分布式网关-contour
contourContour是开源的Kubernetes入口控制器,为Envoy边缘和服务代理提供控制平面.Contour支持动态配置更新和多团队入口委托,同时保持轻量级配置文件。特点内置envoyContour是基于Envoy,高性能L7代理和负载均衡器的控制平面灵活的架构轮廓可以部署为Kubernetes部署或守护程序集TLS证书授权管理员可以安全地委派通配符证书访问架构原理Envoy,提供高性能的反向代理。Contour,充当Envoy的管理服务器并为其提供配置
2020-05-28 14:21:49
1623
原创 容器中的ulimit
背景使用的是公有云,最近要对k8s版本进行升级,在升级之后发发现从我们的web terminal 进入到容器,拥有sudo权限的用户无法进行sudo命令,即使使用root通过docker exec 进入到容器,依旧无法sudosudo: pam_open_session: Permission deniedsudo: policy plugin failed session initialization定位进入到容器中我们查看ulimit -a 如下core file size
2020-05-28 14:20:32
3674
1
原创 使用argo构建云原生workflow
argoargo工作流是什么Argo Workflows是一个开源的容器本机工作流引擎,用于在Kubernetes上协调并行作业。Argo Workflows通过Kubernetes CRD(自定义资源定义)实现。定义工作流,其中工作流中的每个步骤都是一个容器。将多步骤工作流建模为一系列任务,或者使用图形(DAG)捕获任务之间的依赖关系。使用Kubernetes上的Argo Workflow,可以在短时间内轻松运行用于计算机学习或数据处理的计算密集型作业。在Kubernetes上本地运行CI
2020-05-26 18:02:01
2187
原创 使用lyft/ratelimit实现envoy全局限速
envoy rate limit介绍envoy中有以下两种限速方式:全局限速Envoy的全局请求限速服务器,检查是否接受。全局意味着所有代理都将使用一个计数器作为评估请求的基础。每个代理都请求一个上游速率限制服务(在此示例中为Lyfts),该服务将在envoy外部运行以决定请求。本地限速本地速率限制计数器在处理请求的单个envoy代理的上下文中运行。这意味着每个代理都跟踪其管...
2020-01-14 18:38:23
1457
原创 使用scheduler-framework扩展原生k8s调度器
scheduler-framework本文将讲述如何使用scheduler-framework扩展原生调度器目的: 在prefilter阶段检查pod是否添加有dely注释,如果未达到对应时间则不调度分析需要实现的method注册插件WithPlugin返回一个注册选项,由此我们可以看出,我们的插件需要实现framework.PluginFactory 接口func WithPlugi...
2019-12-26 18:59:19
2128
3
原创 k8s 使用code-generator生成crd controller
code-generator用于生成k8s风格的api代码生成器client-genconversion-gendeepcopy-gendefaulter-gengo-to-protobufimport-bossinformer-genlister-genopenapi-genregister-genset-genclient-gen在pkg/apis/${GRO...
2019-12-25 10:27:42
3266
1
原创 K8Dash - 强大的Kubernetes Dashboard
K8Dash - Kubernetes DashboardK8Dash是管理Kubernetes集群的最简单方法。为什么?全面的群集管理:命名空间,节点,窗格,副本集,部署,存储,RBAC等快速且始终如一的即时更新:无需刷新页面即可查看最新信息一目了然地快速可视化集群运行状况:实时图表可帮助快速跟踪性能不佳的资源易于CRUD和扩展:加上内联API文档,可以轻松了解每个字段的作用简单的...
2019-12-25 10:27:07
1182
原创 k8s scheduling-framework介绍
scheduling-frameworkscheduling framework 是Kubernetes Scheduler的一种新的可插入架构,可简化调度程序的自定义,它向现有的调度程序中添加了一组新的pluginAPI。插件被编译到调度程序中。这些API允许大多数调度功能实现为插件,同时使调度core保持简单且可维护。有关该框架设计的更多技术信息,请参阅scheduling framew...
2019-12-25 10:26:32
1812
翻译 K8S deployment可视化故障排查指南
这是一个示意图,可帮助您调试Kubernetes中的deployemnt,当您希望在Kubernetes中部署应用程序时,通常定义三个组件:一个deployment - 这是创建名为Pods的应用程序副本的秘诀一个service - 内部负载平衡器路由流量到pod一个ingress - 从外部访问集群服务的网络流向的描述以下是快速视觉回顾。在Kubernetes中,...
2019-12-23 19:04:17
1892
原创 golang+shell快速实现docker运行时
手动挂载镜像导出镜像为tar包docker save -o busybox.tar busybox解压镜像tar xf busybox.tar查看文件ls 020584afccce44678ec82676db80f68d50ea5c766b6e9d9601f7b5fc86dfb96d.json busybox.tar2ec9d8fd000cf6929df9aa7a...
2019-12-05 18:21:15
405
原创 critical pod浅谈
除了在主机上运行的Kubernetes核心组件(如api-server, scheduler, controller-manager )外,还有许多附加组件,由于各种原因,这些附加组件必须在常规群集节点(而不是Kubernetes master)上运行。其中一些附加组件对于功能齐全的群集至关重要,例如metrics-server,DNS和UI。如果紧急附加组件被驱逐(手动或作为其他操作(如...
2019-12-04 17:18:01
819
原创 使用rudr构建云原生应用
介绍OAM是构建云原生应用程序的规范专注于分离开发和运营需求,Open Application Model将模块化,可扩展和可移植的设计引入到Kubernetes等平台上,以构建和交付应用程序。rudr是开放应用模型规范(oam)的Kubernetes实现,允许用户轻松地在任何Kubernetes集群上部署和管理应用程序,而无需担心应用程序开发人员和运营商的问题Rudr目前处于Alp...
2019-12-03 18:55:46
1032
原创 cgroup v2介绍及测试
介绍cgroup是Linux内核允许将流程组织为分层的功能,然后可以限制其使用各种类型资源的组并进行监控。内核的cgroup接口通过伪文件系统,称为cgroupfs。分组在核心cgroup内核代码,而资源跟踪和限制是在一组每个资源类型的子系统(内存,CPU,等等)。术语cgroup是绑定到一组的进程的集合。通过cgroup文件系统定义的限制或参数子系统是一个内核组件,可修改cgroup...
2019-12-03 18:53:50
4478
翻译 KEDA - 基于Kubernetes事件驱动的自动缩放
事件驱动的计算并不是什么新生事务。数据库世界中的人们使用数据库触发器已有多年了。这个概念很简单: 每当您添加,更改或删除数据时,都会触发一个事件以执行各种功能。新的事件是这些类型的事件和触发器在其他领域的应用程序中激增,例如自动扩展,自动修复,容量规划等。事件驱动架构的核心是对系统上的各种事件做出反应并采取相应的行动。自动缩放(以一种或其他方式实现自动化)已成为几乎所有云平台中不可或缺的组成部...
2019-11-26 18:56:42
1901
原创 kubeedge edgecore - EventBus源码分析
EventBusEventBus 是一个MQTT客户端初始化在初始化eventbus时获取mqtt模式 external/internal启动根据配置初始化Mqttclient,创建Internal Mqtt client或者external Mqtt client,设置qs,retain策略和队列的大小external mqtt brokerInitSubClient设置连接参数...
2019-11-15 17:17:28
784
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人