自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学无止境

欢迎光临,有问题可联系QQ:289806210

  • 博客(67)
  • 收藏
  • 关注

原创 K8S高可用集群环境搭建

1.简介本章节使用kubeadm搭建一套三主三从的高可用kubernetes集群。相比单master而言,多master更加有利于我们生产环境的稳定性。就算master节点宕机一台,我们依然有其他master节点保证我们的集群环境。多master节点需要依赖于keepalive还生成一个vip,也就是虚拟ip,做过nginx+keepalive的小伙伴们都知道,还需要一个haproxy来实现负载...

2019-12-24 10:37:55 1721

原创 kmem问题造成K8S中pod内存溢出

问题排查可以通过$ cat /sys/fs/cgroup/memory/kubepods/burstable/pod<pod-uid>/<container-id>/memory.kmem.slabinfo来查看是否存在bug,如果返回cat: memory.kmem.slabinfo: Input/output error则不存在bug问题解决需要在 k...

2019-12-12 11:01:21 3071

原创 cicd流水线编译时依赖下载慢的问题

出现原因当项目代码中指定maven私服地址的时候,优先使用代码中的仓库地址,而我们依赖环境的仓库的地址没有被使用,故每次依赖都需要重新下载。修复方式在新建cicd流水线的时候指定对应环境中的maven的setting文件,在setting文件中指定对应的仓库地址和私服地址。...

2019-11-08 11:07:45 867 1

原创 harbor下镜像tag查询和镜像批量推送

镜像查询harbor接口说明接口请求方式接口作用修改方/api/projectsPOST创建镜像仓库Java后台/api/projects/quotaListGET查看Project配额Harbor后台/api/projects/{projectId}/quotaPOST更新project配额Harbor后台/api/reposito...

2019-10-31 15:53:26 2945

原创 容器云重启问题处理总结

描述有大量Java堆外内存申请,单块约8-9M,虚拟机环境下约50-60块,容器下约100-200块;总内存使用超过POD的cgroup限制;定位方式pmap -x -p pid抓取Java应用进程的内存申请情况,分析存在大量堆外内存块;jmap -dump:format=b,file=pid.hprof pid抓取JVM堆内存使用情况,分析Java堆内存使用正常;perf r...

2019-10-30 10:12:14 413

原创 JED 技术内幕

架构JED 平台包括许多服务器进程,命令行工具, 基于 Web 的工具和一致的元数据存储支持基本概念KeySpacekeyspace 是逻辑上的数据库,在非 shard 场景下,一个 keyspace 对应一个 MYSQL DataBase。从 Keyspace 中读取数据和从一个 MYSQL DataBase 中读取数据很像。但是根据读取数据时不同的一致性要求,可以从一个 master...

2019-10-29 10:30:17 2080

原创 MYSQL容器和HA方案

目的mysql 作为核心中间件, 对其进行容器化方案的评估。网路方案mysql 容器化, 首先要进行考虑的是网络方案, 网络方案决定了容器化mysql后的性能, 为了保证其性能损耗降低, 决定采用SR-IOV 网络方案。SR-IOV 技术是一种基于硬件的虚拟化解决方案,可以将当前万兆物理网卡虚拟化多个VF接口,每个VF接口都有单独的虚拟PCIe通道,这些虚拟的PCIe通道共用物理网卡的P...

2019-10-29 10:08:13 317

原创 宿主机调优方案

基础镜像CentOS 7.4.1708。以下优化默认都是在该操作系统基础镜像上执行。下载必要软件包(按需自行下载)如果安装操作系统的时候使用的最小化安装,有很多包没有安装,使用时发现好多命令没有如{vim、wget、tree…等},下面就安装命令,可以根据需求自行调整。yum -y install wget net-tools screen lsof tcpdump nc mt...

2019-10-29 09:48:10 947

原创 反向域名解析卡顿问题

问题影响核心域容器平台出现域名解析卡顿。问题分析域名解析超时的问题经过分析发现:系统节点异常重启,导致该主机上的kube-dns也重新创建。但重建kube-dns的resolv.conf配置文件有错,导致部分(共3个dns实例,其中1个实例配置错误)转发到该kube-dns实例上的请求出现卡顿。Kube-dns配置错误原因:kube-dns重启时会自动加载宿主机上的resolv.con...

2019-10-21 10:37:33 372

原创 灰度分流方案

页面场景主要划分成分流规则管理:分流规则会存储在数据库中, 提供增删改查接口。当该分流规则已被应用配置调用,则不允许删改。应用配置分流规则:维护ingress annotation的配置,保证页面配置的规则映射到ingressapiVersion: extensions/v1beta1kind: Ingressmetadata: name: gray-release anno...

2019-10-21 10:29:29 836

转载 operator开发流程

Operator 是 CoreOS 推出的旨在简化复杂有状态应用管理,它是一个感知应用状态的控制器,通过扩展 Kubernetes API 来自动创建、管理和配置应用实例。 Operator 基于 CRD 扩展资源对象,并通过控制器来保证应用处于预期状态。通过 Kubernetes API 观察集群的当前状态;分析当前状态与期望状态的差别;调用k8s API消除这些差别。为什么使用cr...

2019-10-19 10:38:34 1656

原创 ContainerDB 产品介绍

产品概述ContainerDB 是高性能的弹性数据库服务。具有基于负载的弹性扩容、兼容 MySQL 协议、故障自愈、无感知数据迁移、流式查询处理、路由规则透明、自助化服务等功能特性,重新定义了京东的数据库技术。ContainerDB 不仅极大地节省了数据库服务的资源成本,还实现了京东数据库服务的Always Online、数据保护等功能特性,进而极大地提升了运行于 ContainerDB...

2019-10-19 09:59:33 509

原创 容器内Java进程问题造成Pod重启的原因分析

重启原因容器健康监控探针每3S发送一次readiness、一次liveiness,3s超时,超时未响应再次重发,超过3次未响应,视为POD不健康,自动重启POD。Java应用单次FGC时间过长,当FGC时间出现超过6S时,会偶发极端情况3次拨测正好全部失败,导致POD重启;当GC时间超过9S时,三次拨测大概率全部失败,导致 POD重启。问题分析JVM启动会自动获取环境信息,根据CPU、内存、...

2019-10-19 09:48:51 3570

原创 网络结构对比

背景生产环境同时存在k8s集群的微服务与部署在虚拟机上的微服务,为了能够实现服务发现,需要做到集群内部使用和提供微服务的POD能够与K8S集群之外的主机网络互相可达。K8S下服务发现的问题在kubernetes集群里面,一般采用虚拟网络,不能直接与外部的网络进行直接通信。当在Pod里面注册微服务时,如果没有使用Node:Port暴露服务,Pod提供的服务不能被外部的访问。所以需要提供一种有...

2019-10-18 16:37:50 352

转载 Istio故障定位方法

请求转发流程微服务之间的流量经过服务网格接管后,在微服务之间引入了多个代理层,微服务之间的通信变得更为复杂了。下图分析了一个客户端请求的流量是如何在服务网格中进行路由的。备注:由于Istio Ingress Gateway的功能缺少API管理功能,因此下图采用了API Gateway + sidecar来作为Ingress,和原始的Istio Ingress有所不同,但流量转发逻辑类似。Is...

2019-10-18 10:57:15 839

转载 Sidecar自动注入原理

前言Kubernets 1.9版本引入了Admission Webhook(web 回调)扩展机制,通过Webhook,开发者可以非常灵活地对Kubernets API Server的功能进行扩展,在API Server创建资源时对资源进行验证或者修改。使用webhook的优势是不需要对API Server的源码进行修改和重新编译就可以扩展其功能。插入的逻辑实现为一个独立的web进程,通过参数...

2019-10-18 10:50:43 1583

转载 Envoy Proxy代码构建分析

Istio由控制面和数据面组成。其中Envoy是Istio在数据面缺省使用的转发代理,Istio利用Envoy的四层和七层代理功能对网格中微服务之间的调用流量进行转发。今天我们来分析一下Istio 使用到的Envoy构建流程。https://github.com/istio/proxy 这个库中包含了Istio对Envoy的扩展,包括用于对接Mixer的Filter和安全认证的Filter。但这...

2019-10-18 10:44:26 1000

转载 服务注册插件机制代码解析

Istio服务注册插件机制在Istio架构中,Pilot组件负责维护网格中的标准服务模型,该标准服务模型独立于各种底层平台,Pilot通过适配器和各底层平台对接,以使用底层平台中的服务数据填充此标准模型。例如Pilot中的Kubernetes适配器通过Kubernetes API Server到kubernetes中的Service以及对应的POD实例,将该数据被翻译为标准模型提供给Pilot...

2019-10-18 10:42:19 424

转载 服务网格入口网关的解决方案

采用API Gateway + Sidecar Proxy作为服务网格的流量入口在目前难以找到一个同时具备API Gateway和Isito Ingress能力的网关的情况下,一个可行的方案是使用API Gateway和Sidecar Proxy一起为服务网格提供外部流量入口。由于API Gateway已经具备七层网关的功能,Mesh Ingress中的Sidecar只需要提供VirtualS...

2019-10-18 10:14:34 403

转载 服务化应用对API Gateway的功能需求

应用对API Gateway的需求采用Gateway和VirtualService实现的Istio Ingress Gateway提供了网络入口处的基础通信功能,包括可靠的通信和灵活的路由规则。但对于一个服务化应用来说,网络入口除了基础的通讯功能之外,还有一些其他的应用层功能需求,例如:第三方系统对API的访问控制用户对系统的访问控制修改请求/返回数据服务API的生命周期管理服务访问...

2019-10-18 10:11:44 281

转载 采用Istio Gateway作为网络的流量入口

Istio GatewayIstio社区意识到了Ingress和Mesh内部配置割裂的问题,因此从0.8版本开始,社区采用了 Gateway 资源代替K8s Ingress来表示流量入口。Istio Gateway资源本身只能配置L4-L6的功能,例如暴露的端口,TLS设置等;但Gateway可以和绑定一个VirtualService,在VirtualService 中可以配置七层路由规则,这...

2019-10-18 10:08:58 769

转载 采用K8s Ingress作为网格的流量入口

如何为服务网格选择入口网关?在Istio服务网格中,通过为每个Service部署一个sidecar代理,Istio接管了Service之间的请求流量。控制面可以对网格中的所有sidecar代理进行统一配置,实现了对网格内部流量的路由控制,从而可以实现灰度发布,流量镜像,故障注入等服务管控功能。但是,Istio并没有为入口网关提供一个较为完善的解决方案。K8s Ingress在0.8版本以前,...

2019-10-18 10:06:38 1922

转载 外部通讯-Ingress

IngressLoadBalancer类型的Service提供的是四层负载均衡器,当只需要向外暴露一个服务的时候,采用这种方式是没有问题的。但当一个应用需要对外提供多个服务时,采用该方式则要求为每一个四层服务(IP+Port)都创建一个外部load balancer。一般来说,同一个应用的多个服务/资源会放在同一个域名下,在这种情况下,创建多个Load balancer是完全没有必要的,反而带...

2019-10-18 10:03:39 401

转载 外部通讯-LoadBalancer

LoadBalancerNodePort提供了一种从外部网络访问Kubernetes集群内部Service的方法,但该方法存在下面一些限制,导致这种方式主要适用于程序开发,不适合用于产品部署。Kubernetes cluster host的IP必须是一个well-known IP,即客户端必须知道该IP。但Cluster中的host是被作为资源池看待的,可以增加删除,每个host的IP一般也...

2019-10-18 09:33:18 1886

转载 外部通信-NodePort

如何从外部网络访问Kubernetes的Pod IP和Cluster IP都只能在集群内部访问,而我们通常需要从外部网络上访问集群中的某些服务,Kubernetes提供了下述几种方式来为集群提供外部流量入口。NodePortNodePort在集群中的主机节点上为Service提供一个代理端口,以允许从主机网络上对Service进行访问。Kubernetes官网文档只介绍了NodePort的功...

2019-10-18 09:27:57 11252

转载 内部通讯-Sidecar Proxy

Istio Sidecar ProxyCluster IP解决了服务之间相互访问的问题,但从上面Kube-proxy的三种模式可以看到,Cluster IP的方式只提供了服务发现和基本的LB功能。如果要为服务间的通信应用灵活的路由规则以及提供Metrics collection,distributed tracing等服务管控功能,就必须得依靠Istio提供的服务网格能力了。在Kubernet...

2019-10-18 09:22:35 1091

转载 内部通讯-ClusterIP

内部服务间的通信首先,我们来回顾一下Kubernetes集群内部各个服务之间相互访问的方法。Cluster IPKubernetes以Pod作为应用部署的最小单位。kubernetes会根据Pod的声明对其进行调度,包括创建、销毁、迁移、水平伸缩等,因此Pod 的IP地址不是固定的,不方便直接采用Pod IP对服务进行访问。为解决该问题,Kubernetes提供了Service资源,Ser...

2019-10-18 09:18:43 1999

转载 对Bookinfo进行端到端分析

Bookinfo 示例程序分析下面我们以Bookinfo为例对Istio中的流量管理实现机制,以及控制面和数据面的交互进行进一步分析。Bookinfo程序结构下图显示了Bookinfo示例程序中各个组件的IP地址,端口和调用关系,以用于后续的分析。xDS接口调试方法首先我们看看如何对xDS接口的相关数据进行查看和分析。Envoy v2接口采用了gRPC,由于gRPC是基于二进制的RPC...

2019-10-17 14:54:21 1010

转载 数据面标准接口

数据面标准API前面讲到,Pilot采用了一套标准的API来向数据面Sidecar提供服务发现,负载均衡池和路由表等流量管理的配置信息。该标准API的文档参见Envoy v2 API[5]。Data Plane API Protocol Buffer Definition[6])给出了v2 grpc接口相关的数据结构和接口定义。(备注:Istio早期采用了Envoy v1 API,目前的版本中...

2019-10-17 14:42:23 205

转载 Istio流量管理相关组件

Istio流量管理相关组件我们可以通过下图了解Istio流量管理涉及到的相关组件。虽然该图来自Istio Github old pilot repo, 但图中描述的组件及流程和目前Pilot的最新代码的架构基本是一致的。Pilot Design Overview (来自Istio old_pilot_repo[4])图例说明:图中红色的线表示控制流,黑色的线表示数据流。蓝色部分为和Pilo...

2019-10-17 14:40:47 218

转载 Istio流量管理高层架构

Istio作为一个service mesh开源项目,其中最重要的功能就是对网格中微服务之间的流量进行管理,包括服务发现,请求路由和服务间的可靠通信。Istio实现了service mesh的控制面,并整合Envoy开源项目作为数据面的sidecar,一起对流量进行控制。Istio体系中流量管理配置下发以及流量规则如何在数据面生效的机制相对比较复杂,通过官方文档容易管中窥豹,难以了解其实现原理。本...

2019-10-17 14:38:32 220

转载 应用场景-故障注入

对于一个大型微服务应用而言,系统的健壮性非常重要。在微服务系统中存在大量的服务实例,当部分服务实例出现问题时,微服务应用需要具有较高的容错性,通过重试,断路,自愈等手段保证系统能够继续对外正常提供服务。因此在应用发布到生产系统强需要对系统进行充分的健壮性测试。对微服务应用进行健壮性测试的一个最大的困难是如何对系统故障进行模拟。在一个部署了成百上千微服务的测试环境中,如果想通过对应用,主机或者交换...

2019-10-16 18:00:39 1702 2

转载 应用场景-断路器

在微服务架构中,存在着许许多多的服务单元,若一个服务出现故障,就会因依赖关系形成故障蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构就更加的不稳定。为了解决这样的问题,因此产生了断路器模式。断路器模式指,在某个服务发生故障时,断路器的故障监控向调用放返回一个及时的错误响应,而不是长时间的等待。这样就不会使得调用线程因调用故障被长时间占用,从而避免了故障在整个系统中的蔓延。Istio 实现断...

2019-10-16 17:59:47 736

转载 应用场景-灰度发布

当应用上线以后,运维面临的一大挑战是如何能够在不影响已上线业务的情况下进行升级。无论进行了多么完善的测试,都无法保证线下测试时发现所有潜在故障。在无法百分百避免版本升级故障的情况下,需要通过一种方式进行可控的版本发布,把故障影响控制在可以接受的范围内,并可以快速回退。可以通过灰度发布(又名金丝雀发布)来实现业务从老版本到新版本的平滑过渡,并避免升级过程中出现的问题对用户造成的影响。Istio通...

2019-10-16 17:58:42 1433 1

转载 应用场景-度量收集

Istio 实现度量收集的原理如下图所示:Envoy收集指标相关的原始数据,如请求的服务,HTTP状态码,调用时延等,这些收集到的指标数据被送到Mixer,通过Mixer Adapters 将指标信息转换后发送到后端的监控系统中。由于Mixer使用了插件机制,后端监控系统可以根据需要在运行期进行动态切换。...

2019-10-16 17:54:51 112

转载 应用场景-分布式调用跟踪

在微服务架构中,业务的调用链非常复杂,一个来自用户的请求可能涉及到几十个服务的协同处理。因此需要一个跟踪系统来记录和分析同一次请求在整个调用链上的相关事件,从而帮助研发和运维人员分析系统瓶颈,快速定位异常和优化调用链路。Istio通过在Envoy代理上收集调用相关数据,实现了对应用无侵入的分布式调用跟踪分析。 Istio实现分布式调用追踪的原理如下图所示:Envoy收集一个端到端调用中的各个...

2019-10-16 17:53:26 243 1

转载 Istio数据面

Istio数据面以“边车”(sidecar)的方式和微服务一起部署,为微服务提供安全、快速、可靠的服务间通讯。由于Istio的控制面和数据面以标准接口进行交互,因此数据可以有多种实现,Istio缺省使用了Envoy代理的扩展版本。Envoy是以C ++开发的高性能代理,用于调解服务网格中所有服务的所有入站和出站流量。Envoy的许多内置功能被Istio发扬光大,例如动态服务发现,负载均衡,TLS...

2019-10-16 17:51:24 580

转载 Istio控制面

Istio控制面板包括3个组件:Pilot, Mixer和Istio-Auth。PilotPilot维护了网格中的服务的标准模型,这个标准模型是独立于各种底层平台的。Pilot通过适配器和各底层平台对接,以填充此标准模型。例如Pilot中的Kubernetes适配器通过Kubernetes API服务器得到kubernetes中pod注册信息的更改,入口资源以及存储流量管理规则等信息,然后将...

2019-10-16 17:46:45 1483

转载 Istio服务网格

Istio是一个Service Mesh开源项目,是Google继Kubernetes之后的又一力作,主要参与的公司包括Google,IBM和Lyft。凭借kubernetes良好的架构设计及其强大的扩展性,Google围绕kubernetes打造一个生态系统。Kubernetes用于微服务的编排(编排是英文Orchestration的直译,用大白话说就是描述一组微服务之间的关联关系,并负责微服...

2019-10-16 17:44:19 248

转载 微服务架构的演进

作为一种架构模式,微服务将复杂系统切分为数十乃至上百个小服务,每个服务负责实现一个独立的业务逻辑。这些小服务易于被小型的软件工程师团队所理解和修改,并带>来了语言和框架选择灵活性,缩短应用开发上线时间,可根据不同的工作负载和资源要求对服务进行独立缩扩容等优势。另一方面,当应用被拆分为多个微服务进程后,进程内的方法调用变成了了进程间的远程调用。引入了对大量服务的连接、管理和监控的复杂性。...

2019-10-16 17:40:26 190

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除