关于容器技术:用这个开源项目网络小白也能搞定容器网络问题排查

Kubernetes 自身比较复杂,应用门槛较高,用户在开始容器化迁徙时常常遇到各种各样的问题,因为不足故障定位的技能和工具,用户经常产生挫败感,甚至放弃业务容器化。其中网络问题体现尤为突出,Kubernetes 网络虚拟化导致网络问题排查的难度微小。 KubeSkoop 是阿里云容器服务团队开源的 Kubernetes 容器网络诊断工具,反对支流的网络插件和云厂商的 Kubernetes 集群诊断。它正是为了升高网络问题排查难度,让没有网络常识的人也能够自动化地定位网络问题。 Kubernetes 容器网络诊断工具:https://github.com/alibaba/kubeskoopKubeSkoop 可能主动构建出给定源和目标地址在容器网络中的拜访门路,自动化地采集和剖析链路上每一个网络节点的配置,联合 eBPF 内核监控以及 IaaS 层的网络配置查看,定位出导致网络不通的根因,极大地升高了网络问题定位的工夫,即便没有任何网络技能的用户也能够应用。目前在阿里云容器服务的环境中,作为自运维工具解决了大量客户在大规模 Kubernetes 集群场景下遇到的网络问题。 本文将会对容器网络和传统定位伎俩带来的问题进行简略的介绍,以及对 KubeSkoop 的功能设计等方面进行总体讲解。 容器网络网络连通性-CNI容器网络是 Kubernetes 集群中及其重要的一部分,包含了形成集群网络连通性的 CNI 插件、Service 服务发现机制、NetworkPolicy 网络策略等。Kubernetes 集群网络保障了每个 Pod 领有本人独立的网络空间,并且可能与集群中的 Pod 和 Node 相互通信。 CNI 插件是形成集群容器网络中的外围,实现集群级别惟一的地址调配,将集群维度的网络买通。 不同的 CNI 插件,如 Flannel、Calico、Cilium、Terway 等,有其不同的网络实现,包含地址调配,网络虚拟化实现,网络连通性实现等。服务发现和网络策略除 CNI 插件外,Kubernetes 还提供了 Service 作为服务发现,以及 NetworkPolicy 作为网络策略能力。这些能力也是通过可替换的组件来实现的。 复杂性和网络问题定位因为概念繁多,以及插件实现抉择的丰富性,导致 Kubernetes 网络问题存在着相当的复杂性,包含: 逻辑概念的复杂性Ingress/Service/NetworkPolicy 配置灵便,可能导致配置谬误/规定抵触等问题。应用 ServiceMesh 或第三方 CNI 插件,带来更简单的网络策略和扩大能力。数据面实现的复杂性数据立体通过不同组件的多层解决,且存在多种实现。协定栈链路简单,波及到网卡驱动 /netfilter/route/bridge 等配置。不同云厂商的底层配置不同,平安组、路由表等配置简单。传统的容器网络问题定位伎俩,次要是通过抓包定位丢包点、压测复现、人工查配置等形式。存在着定位流程长、大量工夫开销、人员教训要求低等问题。 在日常的工作中,排查容器网络问题占用了相当大部分的精力。因而,咱们开发了 KubeSkoop 我的项目,来实现针对容器网络场景下问题的主动诊断系统。 KubeSkoop 性能在咱们的剖析中,常见的 Kubernetes 网络问题能够分为以下两类: ...

July 4, 2023 · 1 min · jiezi

关于容器技术:QCon高分演讲火山引擎容器技术在边缘计算场景下的应用实践与探索

近日,火山引擎边缘云原生团队的同学在QCon寰球软件开发大会上分享了火山引擎容器技术在边缘计算场景下的利用实际与摸索,并在一众AIGC、LLM等当下热门议题中怀才不遇,入选观众满意度投票中“叫好又叫座议题Top5”。以下是演讲全文:大家上午好! 我是来自火山引擎边缘云原生团队的李志明。明天给大家分享的议题是对于容器技术在边缘计算场景怎么去落地,以及咱们在哪些场景下做了实际。 首先做一下自我介绍。我本人始终在CDN和边缘计算行业从事技术研发和架构设计工作,集体比拟善于像比方Kubernetes、服务网格、容器网络相干的云原生技术,对于高性能的Nginx和高性能缓存服务器也比拟理解,目前次要是负责火山引擎边缘容器平台,以及边缘容器实例产品的研发落地。 明天我的分享议题次要从四个方面。第一个给大家介绍什么是边缘计算和边缘容器。而后就是给大家讲一下在边缘计算场景下,咱们落地边缘容器这样的云原生技术,面临着什么样的技术挑战,而后咱们在技术计划上是怎么去解决的。接下来也给大家分享一下咱们边缘容器技术在哪些内外部场景进行了落地,打造了什么样的产品技术能力。最初给大家分享咱们后续在云原生相干畛域会做哪些摸索。 01 边缘计算和边缘容器边缘计算次要就是在凑近客户的终端放一些边缘计算的算力资源,次要是给一些利用开发和服务商提供IaaS的计算存储网络的资源,升高客户的延时,升高客户的带宽。简略了解,绝对于核心云的产品,边缘计算次要宽泛散布在二、三、四线城市,它从资源散布上必定是比核心云散布得更广,更凑近客户。在规模上,它个别都是几台到几十台服务器,而后在一些区域核心上可能会有几百台服务器,就是规模必定比核心云更小。 边缘计算次要有三个方面的价值: 第一个,绝对于把服务部署在核心的场景,把服务部署在更凑近客户的端上可能大大降低客户拜访的提早。另外,比方提到像RTC、CDN、内容散发这样的一些场景,必定比间接去拜访客户核心要更短,响应时延个别都会在100毫秒以内。第二个就是带宽层面。传统的RTC或者一些服务间接回源到核心,它的回源带宽老本是比拟高的。这个时候当你把一些策略和执行的算法放到边缘上执行的话,能够大大减少客户的带宽,能够升高客户的老本。当然因为咱们边缘的带宽绝对于核心的BGP带宽必定也是比拟低的。另外,还有一些本地计算的场景,有些客户的数据有平安或者合规的要求,这种场景下是比拟适宜边缘计算这样一些场景的。介绍完边缘计算的介绍和边缘计算的价值,接下来重点介绍火山引擎边缘云的边缘容器。 什么是边缘容器呢?绝对于以后的核心容器,边缘容器散布于方才介绍的宽泛的边缘计算的节点,次要散布在二、三、四线这样的城市,依靠于像Kubernetes这样一些云原生的技术,给客户提供场景化的解决方案。 火山引擎边缘云的边缘容器次要是有以下的四个次要的个性: 资源笼罩广 绝对于核心容器,咱们的资源覆盖面必定会更广。因为宽泛散布在大量的边缘节点上,所以说咱们资源分布面更广,离客户更近。 疾速弹性交付 绝对于边缘虚机这样的产品,因为传统客户之前在核心云应用,比方像一些函数的服务或者RTC的服务,这些场景如果间接下沉到边缘,大部分的客户会面临一个问题就是如何去治理边缘的这些节点和机房,以及原来传统的公布零碎也是基于核心或者单机房去设计的,当服务下沉到边缘机房的时候,怎么去运维。所以说边缘容器第二个个性,就是绝对于边缘虚机的产品,可能提供疾速的弹性交付,客户不须要去感知广州有几个机房,深圳有几个机房,甚至华东区电信有几个机房,怎么去开明,怎么去保护。火山引擎会基于云原生的技术屏蔽底层的整体资源笼罩的差别,而后批量交付。举个简略的例子,广东电信的客户须要1000个几核几GB的算力资源,咱们就能够进行疾速交付,而不须要客户去针对于广东电信100个边缘节点一一去开明,咱们能够达到疾速交付能力。 全生命周期治理 很多客户,特地一些创新性场景,从核心下沉边缘,或者某些新业务场景是没有针对边缘场景去部署和运维的能力的。因为边缘机房太多了,节点也会面临裁撤、下线。所以说火山引擎边缘容器会屏蔽这些差别,给客户对立提供像边缘利用的部署、版本的治理,包含一些利用的迁徙等等一系列的Devops的全利用生命周期治理的能力。 全局布局调度 另绝对于一些核心容器的调度,个别都是基于Region的调度,而边缘的话,火山引擎有一个叫全局布局调度。因为咱们会把边缘所有的边缘机房的算力资源对立进行治理和管控,依照客户的算力需要来进行批量交付。比方客户说广东电信须要1000个,这个时候咱们就会看整个广东电信整体的算力散布状况,给客户进行批量交付,所以咱们有一个全局布局调度的技术能力。 02 火山引擎边缘容器技术挑战与应答火山引擎边缘容器技术挑战介绍完了边缘容器,来讲讲火山引擎边缘容器有哪些外围的产品技术挑战,重点介绍以下几个技术层面。 容器技术在边缘计算场景落地会面临什么样的技术挑战呢? 因为传统的就像Kubernetes这样的技术,个别会去治理一个机房或者是治理多个Region,这样是比拟常见的。然而边缘机房,第一个咱们叫资源扩散。因为边缘的IDC机房散布太多了,有几百个,甚至上千个IDC机房。而且不同的IDC机房物理环境、硬件环境,甚至服务器数目都不太一样,有的只有几台,有的有几百台。怎么基于Kubernetes正当地去治理不同的业务以及不同的资源,其实就是咱们会面临的第一个问题。 第二个,绝对于核心的一些机房,其实边缘的网络环境是比拟差的。像弱网、核心跟边缘断网、边缘机房裁撤割接,这样的状况是比拟频繁的。当客户的业务下沉到边缘的时候,特地是在边缘跟核心断网的时候,怎么解决客户边缘容器上的业务、保障不会呈现被驱赶这样的一些状况,这就是咱们面临的第二个问题,怎么去解决这样的问题。 第三个,咱们边缘的机房规模太小了,不可能去做资源分池解决;不可能一部分机器去生产虚机,一部分去生产容器。有些机房可能总共就是几台服务器。那么如何去实现虚机、容器的混合生产,混合调度,达到资源高密的生产和应用。这是咱们面临的第三个技术问题。 最初,因为边缘IDC机房太多,很多客户,比如说我这个利用,须要在广州电信1发1.0.0的版本,在广东电信2发1.0.2版本,不同的机房,要部署不同的版本。同时它在利用降级的时候,要实现灰度公布。同时还有一种状况,很多客户是多个利用组合部署才能够对外提供服务。比如说它在一个机房内同时要部署日志服务、监控服务,以及它本人的一些计算服务。如何去帮客户解决这种多利用的组合部署  以及多利用之间的版本灰度,其实也是咱们面临的另外一个技术问题。这些问题都是在单机房或者说单kubernetes场景下不会遇到的。 我接下来重点讲一下火山引擎容器团队针对这四个技术难点,是抉择什么样的技术计划解决的。 火山引擎边缘容器技术解决方案首先就是重点给大家介绍一下咱们整体火山容器平台的技术架构,就是边缘容器平台架构。 最底层咱们定义为整个IaaS、PaaS的资源层。在资源层面,边缘的资源笼罩差异性是十分多的,咱们有自建的IDC资源,甚至有一些CDN的自建机房资源,包含多云的虚机资源以及其余场景的一些异构资源、三方资源。这些资源,咱们会依照节点、属性、地位、区域,依照标签进行对立的治理,进行辨别和分类。 当资源被标准化之后,咱们会引入一层PaaS的资源管控层,这一层咱们重点构建了第一个能力,就是解决第一个问题:海量资源的纳管问题。整个技术其实咱们也是基于Kubernetes技术打造的。前面我会重点去解释一下咱们整个PaaS资源层,怎么基于Kubernetes进行设计。当咱们把整个资源都纳入Kubernetes体系之后,再上一层咱们就须要对这些边缘的资源进行编排、进行利用的治理、进行镜像的治理,这一层叫metakubernetes,就是咱们的管控集群,咱们叫PaaS管控层。这一层会对立给客户提供,比如说像一些边缘的Kubernetes集群的治理,像集群联邦这样的一些能力,以及比如说客户业务部署的时候怎么基于Kubernetes帮客户被动熔断业务,或者咱们平台本身导致的一些故障,可能主动去熔断,咱们叫风控,就是风控的能力建设。 此外,因为边缘的环境比拟差,当客户的容器大量降级的时候,怎么去解决一个镜像散发的问题。 针对于海量纳管的资源之后,咱们须要给客户提供调度以及高密的生产,咱们怎么去解决这种交融调度、交融生产的问题呢? 最初就是一些监控计费的通用能力。 当咱们整个PaaS管控层,整体建设了这些零碎之后,容器平台侧就会提供不同语义来应用整个火山引擎边缘计算的资源;比方基于利用维度的,客户齐全不去感知底层的资源差别,叫利用托管的模式。另外一种,用户可能只心愿应用容器算力资源,它有本人的公布零碎,咱们就能够间接交付边缘容器实例,就是相似于核心ECI的资源状态。此外,咱们也反对一种弹性的资源交付状态,比方依照分时、或者容器的负载主动扩缩容,咱们叫边缘Serverless这种状态。此外,有些用户曾经基于Kubernetes去建设运维公布平台了,他心愿基于Kubernetes的语义来应用容器资源,那么针对这种场景,咱们也会反对基于Kubernetes语义接口来应用边缘容器资源的能力。最上层就是咱们面对不同的业务场景,像一些点播、直播、RTC、动静减速、边缘函数、拨测、压测这样的场景,咱们基于PaaS整个服务层,针对不同用户提供不同的应用状态。这是咱们整个边缘容器的技术架构。 接下来重点讲讲针对于以上的技术问题,咱们到底怎么去设计和落地的。 边缘自治与资源纳管第一个问题是咱们怎么去解决边缘海量资源的纳管问题,以及像边缘这种弱网关系下,咱们怎么去解决断网状况下客户的pod不驱赶,达到边缘自治的能力。 针对第一个,因为边缘资源比拟扩散,其实咱们这边也是分两种场景进行解决的。第一种叫边缘计算的资源,就是说咱们自建IDC资源。咱们自建的IDC资源,相对而言是比较稳定的,而后基本上规模绝对比较稳定。这种状况下,因为它要去混合生产虚机和容器,在这种场景下,咱们采纳的是Kubernetes下沉的计划,在边缘机房外部内置一个Kubernetes集群。第二种就是绝对于一些单台服务器就是一个结点,或者是多云的一些异构机器,这种机器,它的网络环境不太规范,机型也不太规范,容易呈现一些硬件的故障。这样一些非凡的机器,咱们是采纳了一个叫边缘托管kubernetes的计划。 在这个时候,咱们在资源入库存的时候,咱们会针对不同的节点和机器进行标签治理,最上层的有一个叫异构资源纳管的容器管控平台。这个时候咱们主动会依据以后的一个节点的规模和机器的状态,依据主动布局的后果纳入到不同的像边缘托管的kubernetes集群或者说是节点外部的一个kubernetes集群。而咱们异构纳管平台,它就会主动去感知不同区域的资源散布状况,主动去管控边缘托管kubernetes集群,自适应的去纳管不同区域的资源。当初咱们落地个别都是依照大区维度去布局。一个边缘托管kubernetes,咱们大略会去纳管2000-3000台服务器。 通过这样的模式,从这里看到咱们这个架构是分布式的架构,当边缘机器越多的时候,咱们会主动布局出更多的kubernetes集群来纳管资源。这样其实是可能做到像边缘数万级别的机器,甚至数十万级别机器基于边缘的kubernetes进行纳管的。 当咱们解决了资源管理的问题之后,咱们必然要解决第二个问题。弱网环境下,咱们怎么去解决不会因为边缘跟核心的网络断连,导致用户的Workload或者pod被驱赶。在咱们这个计划外面就解决了这个问题。第一个,比如说像一些异构的资源池外面,咱们采纳的是边缘托管kubernetes的计划,边缘托管kubernetes这个计划,当呈现异构的机器跟核心的托管kubernetes断连的时候,它原生的一些机制是会把原先的一些Workload,包含一些要害的网络资源保护到边缘节点上。这个时候它并不会影响曾经失效的策略,从而也不会去驱赶在这些机器上的pod和要害的用户网络配置、存储的一些配置。 针对于边缘计算节点,就是咱们自建比较稳定的IDC机房,因为咱们采纳的是边缘kubernetes下沉的计划。这个计划外面,当核心跟边缘断网了之后,边缘的kubernetes,它原生就曾经缓存了原先核心曾经下发的各种Workload,各种的一些客户的网络配置,所以说它也是可能达到边缘自治的成果的。咱们次要是通过这样的一个技术架构来解决方才讲的面临的资源扩散治理以及像弱网环境下的资源管控问题、弱网环境下的边缘自治的问题。 混合调度&交融生产接下来次要讲一下第二个问题。方才讲边缘的机房很少,当然行业的解决方案也很多,有很多采纳分池的计划,咱们整体的技术架构都是基于Kubernetes来设计的。因为咱们须要达到高密生产,就是须要在一台机器上间接去交融生产容器和虚机。第二个,咱们须要在调度层面交融去调度容器和虚机。先讲第一个问题,咱们怎么去解决在一台服务器上交融去生产容器和虚机,同时在底层的网络和存储能力上是可能对立应用的。因为咱们整体的设计方案都是依照超交融这样的技术计划去设计。在虚机场景下,原生的Kubernetes是没法生产虚机的,咱们这里是引入了kubevirt这样一个技术架构。kubevirt这个技术架构外面,它是能够通过kubelet这样一个计划去拉起客户的虚机,这样咱们就能够把虚机的生产纳入到整个Kubernetes的体系外面。 第二个在容器场景,咱们须要在一台机上混合生产容器和虚机,就要解决一个平安的问题。在这外面咱们采纳的是平安容器的计划。平安容器当初倒退是比拟成熟的,就是间接基于Kubernetes能够生产。底层像咱们自研的VPC、基于DPDK自研的EVS网络、基于Ceph的块存储,或者基于SPDK的本地盘,因为平安容器和虚拟机底层采纳是对立虚拟化计划,所以咱们Iaas层的存储和网络能力是能够对立复用的。两种计算状态,像虚机和容器,底层的技术计划、实现体系是统一的,这里齐全能够进行复用,这样就能够达到咱们在一台物理机上去混合生产容器、虚机这样的能力。 当咱们达到了混合生产虚机和容器的技术能力之后,其实也面临着另外一个问题。举个例子,比如说我在广东电信1这个节点上,我总共就有10000核vcpu,这时候来了一个虚机大客户,他要8000核vcpu,来了一个容器客户,他要5000核vcpu,这个时候必然就会超过整个kubernetes能够调度的资源,其实就是超过了咱们整个资源的售卖状况。在这种状况下,如果间接调度到边缘的kubernetes集群,其实会呈现很多客户的虚机或者很多客户的容器呈现大量生产失败的状况。在这个状况下,咱们针对大客户,提出资源需要比拟多的时候,其实咱们在核心层面是做了对立调度的,咱们叫全局布局调度。 怎么去了解这个事件呢?当咱们要在某个IDC机房去给某个客户扩容资源的时候,咱们在调度体系外面能够通过肯定的资源经营策略来实现这样一个能力,咱们叫资源预占的计划。当这个节点,虚机须要8000核vcpu,然而客户又不肯定立马部署。在这个时候,在整个资源调度,在生产之前,就会针对这个节点把库存进行预占,咱们叫预占的计划。这个时候容器有一个客户来进行生产的时候,因为资源在核心层面曾经被预占掉了,所以说这个时候就会反馈失败,这样就能够解决当一个节点同时生产虚机和容器,资源没有做布局之前,导致大量客户生产失败的状况。咱们这个计划叫基于全局维度的资源预占。 利用生命周期治理除了方才解决问题之外,咱们面临另外一个问题,很多客户从核心部署到边缘的时候,其实是没有边缘的运维能力的。比如说咱们之前接了一些HttpDns的服务或者函数的场景,因为他们之前都是基于核心服务去部署的,只须要去治理一个Region或者两个Region,然而边缘的节点太多了,让客户间接去下沉保护,其实保护的复杂度十分高。另外因为边缘不同的机房,在能力上会存在肯定的差别,因为不同的机房服务器数目不一样,有的机房可能提供失常的7层LB,有的可能不提供7层LB,其实这个规范能力是不一样的,包含有的机房可能提供本地盘,有的机房只提供云盘。 因为咱们没法像核心那样每个机房都提供全套规范云产品能力,这种情景对于客户的运维复杂度是十分高的。就算他的业务想下沉边缘,对他原生的业务零碎革新也是十分大的。所以在这外面,客户就心愿咱们可能把边缘的资源这些能力进行一个高度的形象,他不须要去感知底层的差别,产品层面能够对立解决像边缘利用编排、针对集群的公布、针对集群的版本治理等问题。 在这个外面,咱们首先讲第一个,咱们怎么去解决利用的多功能编排以及利用的版本治理呢?针对不同的集群去治理客户不同的版本。这外面IDC1,客户须要公布V1.0.1版本,同时在IDC1上必定只提供了本地盘,在IDC2上提供了云盘,客户可能只有存储需要,他不想感知这些差别,同时客户又须要配套的LB、负载平衡的能力,甚至包含肯定服务发现能力。 这个外面咱们次要是引入了两层形象的概念。第一个叫利用集群,一个叫利用,就是咱们整体一个利用编排的体系设计是基于这两个维度在设计的,在利用集群外面有几个要害的语义,就是把咱们云产品的能力会交融到利用集群形容的语义外面。比如说网络的LB、ALB、Nat、PIP、存储的本地盘、云盘等,包含算力规格,针对集群级别,咱们形象进去了一个叫利用集群的概念。这个利用集群外面会把这些网络和存储能力交融进去。 这样的话,咱们针对于IDC1和IDC2做利用生产的时候,其实是打包生产的模式,当咱们要部署到IDC1的时候,咱们会把客户配套须要的LB、Workload、存储,对立会下发上来,而后在边缘IDC1上再进行真正的一个基于Kubernetes的生产,生产Pod的同时,而后把LB的配置生产进去,把存储的配置给它生产进去。 在这一层次要是在PaaS层实现。第二层形象,咱们叫利用(Application)。客户只须要针对利用去配置他的LB、配置他的Workload、配置他的EIP、配置他的存储。这样的话,当客户须要部署到IDC1、IDC2的时候,这个时候客户只须要在利用形容他针对于网络存储以及本人利用的形容。形容之后,咱们整个PaaS调度就会针对咱们的利用集群去打包部署到IDC1、IDC2,这样客户就不须要感知到底层不同网络、不同存储的状况。同时针对这个架构,咱们就能够实现客户针对不同集群的版本治理能力。比方刚刚讲的客户在利用外面就能够去形容,我须要在IDC1外面部署V1.0.1版本,我要在IDC2外面部署V1.0.2版本。当咱们PaaS平台打包部署到IDC1和IDC2的时候,这个时候咱们就会感知客户到抉择的对应版本,而后去部署对应的版本。通过这样一个利用集群以及面向客户的利用的设计概念,咱们解决了客户多集群的部署以及版本治理的问题。 其实还会面临另外一个问题,就是说很多客户业务部署到边缘的时候,不止有一个利用,会面临什么问题?其实他会部署多个利用,客户须要部署一个日志服务,同时要部署一个计算服务,还要部署一个监控服务。它只有多个服务同时在一个IDC上生产进去之后,才能够真正对外提供服务,这个叫多利用的编排。 在多利用的编排场景下,咱们这里引入了一个新的设计思路,叫主从利用的思路。当客户要抉择多利用编排的时候,他须要去抉择一个主利用(master application),当客户创立实现多个子利用之后,在部署之前须要去配置哪些子利用和主利用去绑定。在这个时候咱们整个PaaS调度体系外面就会去感知到这样的主利用跟子利用之间的绑定关系,在资源调度和业务部署的时候就会依照客户的绑定关系进行整体的一个资源调度以及整体利用的部署。 同时针对刚刚讲的,咱们基于利用集群,客户能够配置部署的版本,基于利用集群的版本治理也能够同时实现客户就算在多个利用绑定部署的状况下,也能够去实现不同的利用在不同的集群,部署不同的版本。次要就是通过利用集群、利用和主从利用,在咱们设计外面引入这样的几个设计思路,最终可能解决客户在应用边缘算力资源的时候面临的版本治理、利用治理的问题。 稳定性体系建设最初,给大家讲一下咱们整个边缘容器平台在稳定性上是怎么去设计和落地的。 稳定性设计次要是三块,监控、告警,还有当平台发现客户的业务呈现问题的时候,咱们要可能熔断。在监控、告警上,跟通用的Kubernetes计划差不多,咱们也是将边缘托管Kubernets集群以及边缘的kubernetes集群,像事件、一些日志、指标对立都收集到核心,再去构建咱们整个监控大盘,再基于咱们本人的告警核心,当发现客户的异样指标的时候,进行业务告警。比如说客户某个要害的网络资源被删除掉了,客户本人的利用被删除掉了,咱们会触发一些告警。 重点讲一下咱们的整个风控。什么叫风控呢?咱们做风控的实质起因,是因为很多客户上容器平台的时候,之前客户在虚机的运维模式下或者裸机的运维模式下不会面临虚机资源被批量删除的问题,因为是比较稳定的IaaS资源,它是不会呈现批量开释、批量销毁、批量宕机的状况的。然而当客户去应用容器的场景下,可能因为客户本人的误操作,或者容器平台本身的一些问题,导致客户的容器或者一些要害的资源被谬误的批量删除掉。 咱们为了解决这个问题,引入了一个风控熔断的设计思路。咱们这里实现的计划就是基于Kubernetes的webhook。基于webhook的这个架构体系进行设计的,把客户的事件进行对立的收集和解决,在策略层面,咱们引入了两个策略,一个叫动态策略,一个叫动静策略。动态策略比较简单,就是针对一些大客户或者一些要害的,比方像网络、存储,咱们会进入封禁,当发现客户做了这样一些删除操作,或者咱们本人的零碎呈现问题了,在执行删除之前,咱们会间接熔断,或者客户做了删除,咱们会间接给他返回失败,这样客户的操作就会失败,这时候客户就不会因为误操作呈现规模故障。 第二个工夫维度的,咱们叫动静策略。动静策略次要是做了基于工夫维度的管控策略。最终实现的成果就是客户能够配过来的某一个时间段,客户的容器或者某个要害的资源不容许被删除,比方客户配置过来5分钟不容许删除超过100个Pod,如果产生了超过100个Pod被删除的状况,就认为是客户本人误操作或者平台本身呈现了问题,这个时候容器平台就会被动触发熔断,并且触发告警,从而解决客户规模故障的问题。 03 边缘容器的利用摸索与实际讲了咱们整个稳定性计划之后,接下来重点给大家讲一下咱们在边缘的场景下,咱们怎么去落地的,有哪些典型的案例。 ...

June 12, 2023 · 1 min · jiezi

关于容器技术:快速理解容器技术的实现原理

Photo by Elaine Casap on Unsplash本文核心内容整顿自 Brian Holt 的 workshop 《Complete-Intro-Containers》 。与 Docker 相似的容器技术并不是操作系统与生俱来的能力,而是通过组合一些 Linux 个性,实现过程组隔离的一种技术。 本篇文章将从介绍容器技术的倒退开始,进而阐明哪些 Linux 个性组成了容器技术的外围局部。心愿您可能借由浏览本篇文章,对 Docker 等容器技术有更粗浅的意识。 1. 为什么咱们须要容器容器技术并不是凭空出现的,它起源自时代倒退中人们对于如何更高效地利用计算机资源的思考和工程实际,在本章中,我将遍历容器技术呈现之前的各时代,帮忙您了解容器技术到底解决了什么样的问题。 1.1 裸机时代互联网服务晚期,想要架设 Web 服务器,就须要租用某个中央的服务器设施,运行程序代码。只有有短缺且称职的人员保护,就能最大限度的施展服务器性能。 裸机时代的问题在于扩大服务极度不足灵活性:如果想要增加设施,就须要找服务器供应商(Dell 或 IBM)购买新的物理设施,并指派业余人员进行装置,调试,启动,这大略须要一两个月的工夫。 并且,当部署好一个服务器集群,操作系统与驱动的降级,硬件的替换与培修,网络问题的修复,线材的整顿,机房管理权限的设置,数据中心温度的管制以及电费与 IPS 费用的领取...等等这些都须要业余的团队去解决。 1.2 虚拟机时代于是咱们进入了虚拟机时代,虚拟机是介于用户与硬件设施之间的一层形象。一开始,相较于裸机时代,一台计算机服务于繁多的用户主体,当初一台计算机容许多个用户主体登录,应用计算资源运行彼此的服务。只有设施性能短缺,用户便能够在须要时疾速增加新服务。这使得咱们取得了一些服务扩大的灵活性。 但在这种模式下存在着一些问题: 任何用户都有权限获取其余用户服务存储的数据;用户能够通过投放 Fork Bomb(见下方阐明) 的形式,掠夺服务器资源;一台物理设施上的任何租户都可能无意间使整个服务器解体;为了解决这一问题,呈现了虚拟机技术:即当用户创立服务时,在计算机的主操作系统上装置新的操作系统调度硬件资源以达成数据隔离的指标。并且当一个服务解体时,最多导致服务所属的操作系统解体,服务器设施上的其余租户将不受影响。 虚拟机技术的弊病在于在主操作系统中运行其余操作系统所带来的性能损耗。但只有计算机领有短缺的算力和内存,这些性能损耗都能够被承受。 Fork Bomb 是一种通过一直生成子过程,以达到占用大量系统资源的目标,从而导致系统无奈失常工作,甚至进行响应的攻打伎俩。它通常通过在操作系统中创立大量过程,以耗费零碎内存和处理器资源,并导致系统解体。1.3 私有云时代通过 Microsoft Azure,Amazon Web Services 或阿里云等私有云服务提供商提供的虚拟机服务,用户不再须要治理低廉且简单的数据中心,只须要治理本人的应用程序。云服务厂商尽管不会帮忙用户更新操作系统,然而会定期更新服务器设施。 但在这种模式下,虚拟机提供商向用户提供的,实质上依然是计算机的硬件设施(CPU 和内存),用户依然须要领取调度,保护整个操作系统的开销(例如网络管理,装置与更新软件等),这又须要业余的技术人员负责。 如果可能帮忙用户节俭掉保护操作系统的开销,让应用程序间接运行,那就太棒了。这种需要催生了下个时代的到来。 1.4 容器时代容器技术为用户提供了许多虚拟机平安和资源管理的性能,但节俭掉了运行整个操作系统的老本。它通过以下三个 Linux 命令胜利将过程组之间彼此隔离: chroot:实现目录级别的资源隔离;unshare:实现过程级别的资源隔离;cgroup:限度隔离环境中可调度的资源大小;上面咱们将具体介绍这三个命令。 2. 实现容器技术的三个要害 Linux 命令2.1 chroot命令chroot 是一个 Linux 命令,容许为一个新过程创立根目录。当为一个容器设置一个新目录后,容器内的过程将无法访问到任何根目录外的数据,这就打消了数据泄露的安全隐患。 运行以下命令开始实际: docker run -it --name docker-host --rm --privileged ubuntu:bionic命令解析: ...

February 8, 2023 · 3 min · jiezi

关于容器技术:Uber的20万容器实践如何避免容器化环境中的-CPU-节流

本文译自 Avoiding CPU Throttling in a Containerized Environment。作者:Joakim Recht和Yury Vostrikov在 Uber,所有有状态的工作负载都运行在一个跨大型主机的通用容器化平台上。有状态的工作负载包含MySQL®、Apache Cassandra®、ElasticSearch®、Apache Kafka®、Apache HDFS™、Redis™、Docstore、Schemaless等,在很多状况下,这些工作负载位于同一台物理主机上。 凭借 65,000 个物理主机、240 万个内核和 200,000 个容器,进步利用率以降低成本是一项重要且继续的工作。但最近,因为 CPU限流,导致利用率晋升这件事没有那么顺利了。 事实证明,问题在于 Linux 内核如何为过程运行调配工夫。在这篇文章中,咱们将形容从 CPU 配额切换到cpusets(也称为 CPU pinning),如何使咱们可能以 P50 提早的轻微减少换取 P99 提早的显著降落。因为资源需要的变动较小,这反过来又使咱们可能将整个集群范畴内的外围调配缩小 11%。 Cgroups、配额和 CpusetsCPU 配额和 cpusets 是Linux内核的调度器性能。Linux内核通过cgroups实现资源隔离,所有容器平台均以此为根底。通常,一个容器映射到一个 cgroup,它管制着在容器中运行的任何过程的资源。 有两种类型的 cgroup(Linux 术语中的控制器)用于执行 CPU 隔离:CPU和cpuset 。它们都管制容许一组过程应用多少 CPU,但有两种不同的形式:别离通过 CPU 工夫配额和 CPU pinning。 CPU 配额CPU控制器应用配额来实现隔离。对于一个CPU 集,你指定要容许的 CPU 比例(外围)。应用以下公式将其转换为给定时间段(通常为 100 毫秒)的配额: 配额 = core_count 周期(quota = core_count period) 在下面的例子中,有一个须要 2 个内核的容器,这相当于每周期须要 200 毫秒的 CPU 工夫。 ...

August 11, 2022 · 1 min · jiezi

关于容器技术:阿里云肖源容器技术在大规模边缘场景下的商业实践

6月30日-7月2日,由中国电子技术标准化研究院主办、全国信标委云计算规范工作组、云计算规范与利用工业和信息化部重点实验室承办的第十一届中国云计算规范和利用大会在京召开。本次大会共开设了“智能云、云原生、企业上云、超交融、边缘云、云迁徙”共六大分论坛,齐聚产学研用多方专家,独特探讨云计算产业倒退方向和将来时机,展现云计算标准化工作成绩。 在“边缘云”分论坛上,阿里云智能边缘云技术专家肖源分享了《容器技术在大规模边缘场景下的商业实际》主题演讲,本文为整顿内容。 边缘云介绍边缘云的状态和价值以后客户面临多方面的挑战,例如自建交付周期长、资产重,边缘集群常态化裁撤、割接导致SLA难保障,单集群规模小、业务弹性差,属地性利用多导致集群保护老本高、难度大等等。边缘云面对以上挑战可能充分发挥对应价值:通过秒级算力交付实现效率晋升;边缘资源按量付费、弹性扩容降低成本;采纳云原生交付形式升高运维投入;提供海量资源、实现宽泛笼罩打造低时延、晋升用户体验。总的来说以后客户需要次要聚焦在两类场景: 云端算力下沉:原本在核心的零碎和利用下沉到边缘,能够无效升高到拜访核心的带宽老本,同时缩短业务拜访时延,终端算力上移:通过将散布在端上的算力上移到边,晋升业务的灵活性和可用的算力范畴阿里云边缘云根底能力 最上层的垂直场景为边缘云应用服务,包含了智慧城市、车联网、智能制作、场景互动、图像处理、内容散发、AR/VR、人脸识别等; 第二层边缘能力开放平台次要提供行业撑持服务,包含了固网交融、边缘云原生能力、框架与工具链、IoT服务、工业服务、电信网元服务等; 第三层是边缘通用平台服务,涵盖了容器云核心技术,包含EdgeMesh、利用治理、DevOps、可观测性、大数据、边缘AI; 中间层负责云端对立管控,实现容器云平台的资源纳管工作,包含分布式多云交融管控、全域交融调度、边缘资源对立管控、边缘镜像服务; 上层为计算、存储、网络、平安、节点自治等局部,例如对于边缘异构场景、边缘弱网环境等,阿里云边缘云通过自研网络计划与共享存储计划来应答解决; 底层为边缘云基础设施,包含分布式IDC、多云交融、一体机、MEC、边缘网关等局部。 阿里云边缘云技术特点异构交融广覆盖:提供异构分布式云网交融资源底座规范云原生兼容:反对现有云原生利用生态云边体验一致性:全域资源对立交付,保障云边应用体验一致性算力全域流动性:基于GSLB对立接入层的全域算力流量调度 聚焦边缘云容器平台技术边缘云容器平台的技术挑战边缘容器云平台面临的技术挑战次要是以下三个方面:集群小而多:整体体现为集群小而多的状态,资源管控、调度都会面临较大的挑战。环境简单:边缘设施环境与数据中心环境相比较为顽劣,存在弱网、断网等一系列问题,给云边、边边协同能力带来较大的挑战。异构:出于老本、业务非凡需要等起因,计算、网络、存储等方面在边缘环境下都存在着异构的状况,给云化纳管带来较大挑战。 边缘云容器平台技术架构 最上层为边缘能力凋谢层,包含OpenAPI、工具链、能力开放平台; 中间层为边缘云平台服务,最要害的就是边缘利用治理模块,用于实现利用部署和资源调度,在客户提出算力需要后,边缘云服务平台通过边缘交融调度来帮忙客户申请资源或是抉择部署节点。通过利用K8S集群治理形式,联合边缘工作负载、镜像服务和服务网格、云边协同通道等模块,独特提供稳固的边缘云容器服务; 最底层为边缘云基础设施,资源建设和运维平台的根底上,边缘云构建了异构资源的云化纳管能力,向下管控和接入不同类型的资源,为下层边缘云平台服务所用。 基于“核心-边缘”实现利用的劣势 基于“核心-边缘”实现利用的劣势次要体现在以下三个方面: 分布式部署形式,有效应对高并发,卸载核心服务器负荷;流量边缘收敛,应答大带宽,带宽老本升高30%;边缘就近解决,边缘侧延时管制在10ms以内。商业实际案例介绍随着边缘云越来越被社区、被各种产业参与方从新熟识,同时云网边端架构的遍及与算力需要一直的精细化。大家开始从新扫视和找寻更优雅更正当的架构模式。更多的场景开始推动”云端算力下沉,终端算力上移“的策略。以谋求老本、效率、灵活性方面的最优化,接下来为大家介绍利用边缘云容器平台两个典型的商业实际案例。 云游戏产品实际案例背景云游戏概念近几年异军突起,阿里云边缘云游戏产品则将概念转换为产品进行了落地实际,基于边缘容器云技术底座,为客户交付高质量且稳固的云游戏实例。 价值对立管控:从上层的ARM阵列服务器到下层容器利用均通过容器云平台进行管控,全流程服务保障,确保云游戏实例高效率生产;标准化交付:基于边缘容器利用治理能力,通过容器化形式打包所有云游戏实例运行时以及配置依赖,以规范容器利用形式交付,进步交付效率;降本提效:通过容器利用实例编排能力,繁多板卡运行多个安卓容器,晋升效率升高资源老本。 云游戏产品场景流程如下图所示: 云游戏场景核心技术点异构资源纳管 ARM阵列接入/运维/管控依据集群水位,网络品质等指标实现智能接入边缘利用治理 自研workload,反对pod/node纬度独立管控多集群治理&交融调度 多租隔离实例漂移/智能容灾基于ARM环境的自研容器网络&容器存储流量计算产品实际案例背景流量计算产品是阿里云边缘容器云的一个典型落地案例,对CDN产品退出了可编程的能力,从而容许客户在全网流量散发的根底上应用全网算力资源,在就近地位接入计算服务,最大化施展流量的业务价值。 价值加强流量价值:在传统流量散发业务上减少算力散发能力,加强业务流量价值;边缘计算典型场景:基于阿里云海量边缘算力,在任意地位随用随取,加重终端压力;大数据及AI:在大流量大数据场景下提供了可编程能力,为大数据及AI计算提供根底。流量计算产品场景流程如下图所示: 流量计算场景核心技术点边缘服务网格 服务发现/服务编排智能路由/多协定接入中间件服务化(DAPR)边缘容器网络 网络多租隔离/智能策略计量计费/流量管制

August 3, 2022 · 1 min · jiezi

关于容器技术:玩火的容器内存控制-CGroup-容器基础拾遗-Part-1

本文来自:玩火的容器内存管制 CGroup - 容器根底拾遗 Part 1 。如图片不清,请回到原文。 引 咱们在谈容器内存时,到底在谈什么?CGroup 内存阐明 根底概念 Pageanonymous pagesLRU listLRU list 组CGroup 概述 主记账范畴内核内存记账范畴内存回收状态文件 memory.statmemory.usage_in_bytesmemory.numa_statmemory.failcnt管制与事件告诉 强制回收内存基于内存阈值水位的告诉不要 OOM Kill,只是暂停监控与指标 常被误会的 K8s 指标 container_memory_usage_bytescontainer_memory_working_set_byteskubectl top什么 metric 才是 OOM Kill 相干内存限度对 IO 性能的影响理解内核数据结构Page Cache 占用剖析工具上文未提到的有用的参考引容器内存限度是个矛盾而重要的抉择,给多了浪费资源,给少了服务随机解体。 CGroup 内存管制是容器资源管制的外围。她是个法则严明的看守者,在利用超限时狠心地 OOM Klll。她同时也有宽容的一面,在利用资源有余时,调配和开释 Cache 给利用应用。而其心田的记账算法却回味无穷。要察看和监控她的状态和行为,更是千条万绪。本文尝试用作剖析和梳理。 看完下面的看守者的比喻,如果你想到身边的那位,就与我无关了。在去年,我写了一篇:《把大象装入货柜里——Java容器内存拆解》其中简略提到了 CGroup 内存管制 和 Java 的关系。而最近在工作上又遇到到容器的内存问题,于是想比拟深刻和系统地去理解一下这个天坑。每个做容器化(上云)都必须面对,但最想回避的大坑。 咱们在谈容器内存时,到底在谈什么?先列几个问题: 容器内存应用,只是过程用户态应用的内存?如果是,包含哪些?如果包含内核态的内存,有哪些内核态内存?所有内存都是强占用的吗?还是能够由内核必要时伸缩和开释?在监控到个别指标靠近甚至超过下限时,肯定会 OOM Kill 吗?本文尝试剖析下面问题,<mark>并挖掘 CGroup 背地鲜为人知的秘技 ✨ 帮忙准确剖析 OOM Kill 问题</mark>。同时说说容器内存的估算与监控上的坑。 CGroup 内存阐明根底概念根底概念这一节有点干燥和 TL;DR,不喜可跳过。 Page操作系统为进步治理内存的效率,是以 Page 为单位治理内存的,个别一个 Page 是 4kb: ...

July 12, 2022 · 11 min · jiezi

关于容器技术:docker的概念原理和docker起步快的原因

本文将分为3局部解释docker的概念,原理,和docker起步快的起因 docker的概念 Docker是一个开源的应用程序容器引擎,它容许开发人员将他们的应用程序和依赖包打包到一个可移植的容器中,而后公布到任何风行的Linux机器上,并且还实现了虚拟化。容器是齐全沙箱化的,它们之间没有接口。 Docker技术的三个外围概念是图像、容器和仓库。 Docker起步快的起因,为什么Docker很轻? 置信你会有这样的纳闷:为什么Docker起步快?如何与主机共享内核? 当咱们要求Docker运行容器时,Docker会在计算机上设置一个资源隔离环境。而后,打包的应用程序和相干文件被复制到Namespace中的文件系统,环境的配置就实现了。之后,Docker将执行咱们预先指定的命令并运行应用程序。 图像不蕴含任何动态数据,其内容在构建后不会扭转。 Docker的外围概念 1.建造、装运和运行(建造、运输和运行); 2.一次构建,随处运行(一次构建,随处运行); 3.Docker自身不是一个容器,它是一个创立容器的工具和一个应用程序容器引擎; 4.Docker有:镜像、容器和仓库存储库; 5.Docker技术应用Linux内核和内核函数(如Cgroups和名称空间)来拆散过程,这样每个过程就能够彼此独立运行。 6.因为Namespace和Cgroups函数只在Linux上可用,所以容器不能在其余操作系统上运行。那么Docker是如何在macOS或者Windows上运行的呢?Docker实际上应用了一个技巧,在非Linux操作系统上装置Linux虚拟机,而后在虚拟机中运行容器。 7.映像是一个可执行包,其中蕴含运行应用程序所需的代码、运行时、库、环境变量和配置文件,容器是映像的运行时实例。 对于Docker原理的更多信息,能够查看灵雀云的技术博客

August 25, 2021 · 1 min · jiezi

关于容器技术:腾讯云TKE基于-Cilium-统一混合云容器网络上

作者魏后民,腾讯云后盾开发工程师,关注容器、Kubernetes、Cilium等开源社区,负责腾讯云 TKE 混合云容器网络等相干工作。 赵奇圆,腾讯云高级工程师,次要负责腾讯云容器网络设计和研发工作。 前言混合云 并不是一个陈腐的概念,但随着容器技术的倒退,混合云与容器的联合正在失去越来越多的关注。通过容器等云原生技术,能够屏蔽混合云异构集群底层计算资源基础设施的差别,实现多云场景、IDC 场景乃至边缘等场景的对立。混合云将不再是私有云和公有云的简略联合,而是计算负载无处不在的分布式云,能够充分发挥其在资源扩容、多活容灾、多集群混合部署等场景的劣势。 腾讯云 TKE 容器服务推出私有星散群增加第三方 IDC 计算节点服务,该服务能够让客户复用 IDC 计算资源,免去在本地搭建、运维 Kubernetes 集群的老本,最大化进步计算资源使用率。 在这个计划的底层实现中,买通 IDC 和私有云之间的网络是重要的一环。一个 Kubernetes 集群中可能蕴含泛滥不同网络环境的计算节点,比方 IDC 网络环境和私有云 VPC 网络环境的计算节点。为了屏蔽底层不同网络环境的差别,TKE 提出了混合云容器网络计划,在容器层面看到的是对立的网络立体,使得 Pod 无需感知其是运行在 IDC 的计算节点还是私有云的计算节点。 TKE 混合云容器网络同时反对基于 VxLAN 隧道模式的 Overlay 网络和基于间接路由的 Underlay 网络。当客户不心愿扭转其 IDC 根底网络设施时,能够应用 Overlay 网络;当客户对于混合云容器网络的性能有很高的要求时,能够应用基于间接路由的 Underlay 网络。本文将详述混合云中容器网络面临的挑战与解决方案,并介绍 TKE 混合云容器 Overlay 网络的实现。接下来还会有文章独自介绍 TKE 混合云容器 Underlay 网络的实现,敬请期待。 混合云容器网络面临的挑战在混合云场景下,一个 Kubernetes 集群的各个组件可能散布在不同的网络立体: Master Network:运行着 ApiServer 等管制面组件的网络立体VPC Network:蕴含有 TKE 私有星散群计算节点的网络立体IDC Network:蕴含有客户 IDC 计算节点的网络立体混合云简单的场景下,如何买通不同网络立体的链路,对容器网络设计提出了挑战: VPC Network 和 IDC Network 相互拜访混合云场景下,一个 Kubernetes 集群可能既蕴含 VPC Network 下的私有云计算节点,也蕴含 IDC Network 下的计算节点。买通这些处于不同网络环境下的节点网络,是下层容器网络互通的根底。 ...

July 6, 2021 · 3 min · jiezi

关于容器技术:信也容器云揭秘03静态IP的秘密

家喻户晓,K8S的POD是不须要固定IP的,因为固定IP 会带来一些扩展性的问题,然而动态IP在平安ACL,业务管制方面有不少独到的长处,本文就是在揭示新也云如何在K8S上实现动态IP这个能力的。全方面满足业务须要。 一、Kubernetes 网络接口CNI插件的工作原理首先从Kubernetes网络接口(CNI) 说起,containernetworking/cni: Container Network Interface - networking for Linux containers (github.com) CNI(Container Network Interface)是 CNCF 旗下的一个我的项目,由一组用于配置 Linux 容器的网络接口的标准和库组成,同时还蕴含了一些插件。CNI 仅关怀容器创立时的网络调配,和当容器被删除时开释网络资源。 CNI 插件就是一个执行程序,容器启动时,它被调用,而后返回一个规范的JSON,通知容器该怎么设置本人的网络。 同样被销毁的时候,它也被调用一次,返回一个JSON,通知容器如何销毁本人的网络。这就是CNI 插件的工作形式。所以咱们须要做的就是理解CNI插件的工作。 二、CNI插件接口办法CNI插件的接口办法个别包含: ADD CHECK DEL VERSION 理论应用中,将一个容器增加进一个网络,调用的是ADD接口办法。将一个容器从网络中删除,则是调用DEL接口办法 在 plugins/plugins/main/macvlan at master · containernetworking/plugins (github.com) 我的项目 咱们能找到很多CNI 插件的源码,咱们只须要简略的批改一下就能够了。 三、原理透析默认装置插件后,简略关上CNI的配置 /etc/cni/net.d 咱们能大略看到这样的配置文件。 这里调配了 这台物理机上能够应用的IP段,IP分配模式等等信息。这些配置管制了Macvlan插件的工作。工作的时候,这个配置会作为参数被传入插件,从这里咱们会发现,咱们将应用host-local 模式调配IP。 通过浏览代码,咱们能够大略理解到默认的工作模式是这样 一台物理机上能够调配的IP 被寄存在本地文件里的,每次启动容器的时候,咱们就从文件里选一个,这样大家并不会抵触。然而这有个前提 那就是每台物理机上的IP都是互相隔离的,这样才不会抵触。如果要做动态IP, 这意味着随着调度算法的调配,一个IP可能呈现在不同的物理机上?这样的话,咱们怎么解决抵触呢? 咱们解决的方法是把IP 调配中心化,将IP的调配放到 公布零碎里,这样的话,咱们就能够让任何一个容器都能有咱们想让它领有的IP。大略的流程 是这样, 从流程上看,咱们把IP调配这个局部的性能从各个节点,自主调配的模式,收口到了 公布零碎上,这样能做到对立治理,非常灵活。 在代码上看就很简略了,Macvlan 的插件是Go 语言所写,咱们只须要简略加一个利用Http Client 代码,用它去获取容器的标签就能够了。咱们曾经把这部分开源啦。请间接去 https://github.com/ppdaicorp/... 看看吧。 ...

May 20, 2021 · 1 min · jiezi

关于容器技术:干货丨Docker容器九类常见故障排查及处理

-本文转自@TWT社区。【前言】至多,以Docker和kubernetes为代表的容器技术突飞猛进,但咱们在容器的应用过程中,也会碰到各种损坏和难题。出有针对性的阐明和解决方案,心愿能够帮忙到大家去疾速定位和解决相似问题故障。具备超过十年的互联网运维及五年以上团队治理教训,多年容器云的运维,尤其是在Docker和kubernetes畛域十分精通。 Docker是一种绝对应用较简略的容器,咱们能够通过以下几种形式获取信息:1,通过docker run执行命令,或者返回信息2,通过docker logs去获取日志,做有针对性的筛选3,通过systemctl status docker查看docker服务状态4,通过journalctl -u docker.service查看日志以下是整顿的docker容器类问题故障,分为9个类 一,启动类故障1,docker:无奈通过unix:///var/run/docker.sock连贯到Docker守护程序。泊坞窗守护程序正在运行吗?起因:Docker未失常启动解决形式:systemctl启动docker2,无奈创立Unix套接字/var/run/docker.sock:是目录起因:docker.sock不能创立解决形式:rm -rf /var/run/docker.sock而后重新启动docker3,docker.service的作业失败。无奈启动Docker应用程序 起因:Selinux引起解决形式:/ etc / sysconfig / selinux,将selinux值替换为禁用重启docker解决4,泊坞窗:来自守护程序的谬误响应:/ var / lib / docker / overlay / XXXXXXXXXXXXXXXXXXXXXXXXXX:无此类文件或目录。起因:docker没有指定目录或文件解决形式:systemctl进行dockerrm -rf / var / lib / docker / *systemctl启动docker重启run重新启动容器5,泊坞窗:来自守护程序的谬误响应:抵触。容器名称“ XXX”已被容器“ XXX”应用。您必须删除(或重命名)该容器能力重用该名称。起因:码头工人名字重名解决形式:改名容器或者删除重建容器6,谬误:连贯激活失败:找不到适宜此连贯的设施起因:网卡配置问题解决形式:重启网卡7,零碎重启后docker无奈启动报错为:docker0:iptables:该名称没有链/指标/匹配起因:docker服务iptables问题解决形式:重启docker服务零碎重启docker8,启动守护程序时出错:初始化graphdriver时出错:不反对驱动程序应用overlay2存储驱动启动docker daemon报错起因:daemon经济配置解决形式:增加配置:/etc/docker/daemon.json{“存储驱动器”:“ overlay2”,“存储选项”:[“ overlay2.override_kernel_check = true”]}9,无奈启动docker.service:单位docker.service被屏蔽。未知起因:docker被遮罩解决形式:systemctl勾销屏蔽docker.servicesystemctl勾销屏蔽docker.socketsystemctl启动docker.service10,无奈启动docker.service:单元未正确加载:参数有效。 未知起因:docker服务无奈失常加载解决形式:卸载docker,删除docker.service重新安装docker11,docker-compose启动容器时报错:/usr/lib/python2.7/site-packages/requests/init.py:80:RequestsDependencyWarning:urllib3(1.22)或chardet(2.2.1)与反对的版本不匹配!RequestsDependencyWarning)未知起因:pip相应组件版本不反对解决形式:pip卸载urllib3pip卸载chardet点装置申请12,docker容器重启故障强杀docker过程后,重启docker。docker中的容器无奈启动并报错docker restart XXXXXXX来自守护程序的谬误响应:无奈重新启动容器XXXXXXX:容器“ XXXXXXXXXXXXXXXX”:已存在起因:旧容器未平安退出解决形式:docker-containerd-ctr --address /run/docker/containerd/docker-containerd.sock --namespace c rm <容器hash_id>码头工人开始容器13,docker重启谬误-重启命令始终卡住systemctl重新启动docker卡住未知起因:可能是启动的容器数量过多,或者磁盘IO问题解决形式:systemctl启动docker-cleanup.servicesystemctl启动docker 二,权限问题报错14,尝试连贯到unix:///var/run/docker.sock的Docker守护程序套接字时取得的权限被回绝解决形式:查看/var/run/docker.sock其中用户组将用户重新加入docker组中,usermod -aG docker $ {USER}15,在步骤GROUP中应用chown socket:没有此类过程 起因:docker无奈找到Group组信息,docker组有可能被误删除,解决形式:groupadd泊坞窗16,公布http:///var/run/docker.sock/v1.XXX / auth:拨打unix /var/run/docker.sock:权限被回绝。您是否要连贯到没有TLS的启用TLS的守护程序?起因:非Root用户治理Docker时,权限有余解决形式:groupadd泊坞窗usermod -a -G docker用户17,码头工人犯错误解决tar文件时出错(退出状态1):意外的EOF起因:可能是权限问题引起解决形式:chmod + x加一个执行权限 三,总体和仓库问题报错18,获取https://registry-1.docker.io/...起因:Docker仓库无法访问解决形式:批改Docker仓库源为国内或者自建的仓库源批改/etc/docker/daemon.json19,推出本地可行性报错推送指向存储库[XXXX]获取https:// xxx / v1 / _ping:http:服务器向HTTPS客户端提供了HTTP响应起因:docker Registry未采纳https服务所致解决形式:/etc/docker/daemon.json文件写入:{“不平安的注册表”:[“”]}20,/ usr / bin / docker-current:来自守护程序的谬误响应:oci运行时谬误:container_linux.go:启动容器过程导致“ exec:\” / bin / bash \”:在$ PATH中找不到可执行文件”。起因:Docker自身的固有问题或Docker引擎版本比拟低导致解决形式:能够降级Docker版本服务21,精心设计,执行chown -R十分慢起因:Docker应用写时复制策略,所以chown命令执行时,将下层正本文件全副复制到以后层,而后再批改权限,再写入文件系统。解决形式:不应该应用chown -R类别大批量批改文件的命令22,docker build造就的的时候报错:来自syslogd内核的音讯:unregister_netdevice:期待lo开释。应用次数= 1起因:docker engine版本过高解决形式:docker引擎版本须要和docker外部附加的内核版本匹配23,泊坞窗:来自守护程序的谬误响应:容器:容器未在指定的超时之前启动。ERRO[0133]从守护程序获取事件的谬误:上下文已勾销起因:批改完docker root dir,重启后,下载多个报错解决形式:重启docker服务或者重启服务器 ...

May 14, 2021 · 2 min · jiezi

关于容器技术:云杉网络发布DeepFlow-5G核心网网络功能服务监控方案

5G将开启产业互联网改革的新篇章,推动5G交融利用倒退是业内共识。GTI最新公布的《5G智能化网络白皮书》强调,网络智能化是5G网络高效高质建设部署和经营不可或缺的能力。如何为用户提供更高质量、更有保障的通信服务,成为运营商乃至整个社会信息化倒退的重要课题。 5G核心网运维的新挑战5G核心网(_5G Core_)是电信运营商5G建设的重要组成部分,采纳全新技术,在实现网络部署、网络性能、新业务发展的同时,监控保障也面临全新挑战。在4G核心网(_EPC,Evolved Packet Core_)中,网元由专有设施承载,硬件属性较强。而在5G核心网环境中采纳基于服务架构(_SBA,Service Based Architecture_),融入云原生、微服务等设计思维, 以软件化,模块化、服务化的形式构建核心网。对于全新核心网的运维保障,面临如下挑战: 网络性能解耦使监控对象数量激增根据3GPP定义,5G核心网的各网络性能(_NF,Network Function_)在性能级别上解耦,拆分出若干个独立的网络性能服务(_NFS,Network Function Service_),这些网络性能独立运行,提供标准化服务接口,通过互相调用拜访实现网络性能。在5G核心网计划中,虚拟化、云原生技术的融入,使通用服务器取代专有硬件设施,与此同时虚构网元,虚拟机、容器POD的数量飞速增长,每个工作负载同时提供多个IPv4、IPv6工作立体。 相较4G EPC,因为泛滥方面演进叠加在一起,在5G核心网SBA架构中虚拟化后的NFS实例数量以2个以上的数量级增长,须要监控的对象数量微小是5G核心网保障侧第一个挑战。 服务自动化减少了网络追踪的难度通过网络性能仓储(_NRF,NF Repository Function_),5G 核心网的各类网络性能服务得以自动化治理,实现服务的主动发现以及注册、更新、状态检测等,防止服务拜访中进行大量手动配置工作;集中控制面能够将大量跨区域的信令交互变成数据中心外部流量,优化信令解决时延;依据业务利用的变动,按需疾速扩缩网络性能和服务,进步网络的业务响应速度。自动化治理在生产侧晋升了管理效率,同时在核心网保障侧减少了动态性强、难以跟踪的新挑战。 门路优化与交互解耦贬低了监控复杂度4G核心网的网元之间的通信遵循请求者和响应者的点对点模式,是一种互相耦合的传统模式。在 5G 核心网服务化架构下,各网络性能服务之间能够依据需要按需通信。5G 核心网架构下的网络性能服务间通信机制进一步解耦为生产者和消费者模式,具备灵便可编排、解耦、凋谢等长处,是 5G 时代迅速满足垂直行业需要的一个重要根底能力。各网络性能在理论利用过程中,防止了不必要的网络直达,但服务间的调用依赖,拜访追踪,性能剖析,故障定位等也成为运维保障侧的新挑战。 DeepFlow 5G核心网网络性能服务监控计划实际DeepFlow是一款面向5G核心网,基于对服务NFS间的通信拜访流量进行获取剖析,以保障核心网稳固运行的软件产品。在整体计划中,可按解决逻辑分为流量获取、数据散发传输、诊断剖析三大部分,通过流量采集预处理形象层,提供流量采集及预处理的北向治理接口,使整个监控平台具备可扩大的根底数据获取能力。 通常5G核心网环境中,次要波及到KVM虚拟机与容器POD的网络流量获取。DeepFlow 5G核心网网络性能服务监控计划反对IPv4、IPv6协定环境,紧密结合HTTP v2协定,实现服务间关联依赖监控。本文基于运营商理论5GC运行环境,化繁为简并以Free5GC环境为根底进行介绍。 What is free5GC?The free5GC is an open-source project for 5th generation (5G) mobile core networks. The ultimate goal of this project is to implement the 5G core network (5GC) defined in 3GPP Release 15 (R15) and beyond.Free5GC是5G核心网开源软件我的项目,总体架构基于3GPP规范、遵循SBA框架,采纳虚拟化形式实现网络性能,可运行5G核心网的规范服务,并且能够模仿相应工作流程。在理论5G环境中,少数厂商曾经采纳容器技术承载网络性能服务。在本文中,采纳虚拟机运行容器,创立Kubernetes集群, 搭建5G核心网验证环境,使能各网络性能。通过云杉网络的DeepFlow平台实现对各网络服务的监控保障。实际过程中部署的组件包含控制器、采集器以及数据节点。 由大到小追踪网络服务在5G核心网的监控实际中,由大到小,逐级有序地展现服务运行状态及关联关系。通常依据工作流程分为三大范畴,较大范畴以数据中心所属区域或资源池划分,其次为网络性能或服务类型,比方AMF、UDM、SMF等,最初将集中在IT单元,比方容器POD、宿主机、IP等。DeepFlow平台依照三类范畴由大到小的操作划分,为核心网所波及到的简单网络提供残缺的、逐级的监控跟踪。下图出现的是各类型网络性能服务运行及调用关系全景视图,将服务接口(_SBI,service-based interface_)中的网络各性能间的调用通信,以及性能指标进行主动绘制并出现。 ...

March 4, 2021 · 1 min · jiezi

关于容器技术:企业级云原生TKEStack-腾讯云原生开源实践之路

导语丨TKEStack 是腾讯开源的一款集强健性和易用性于一身的企业级容器编排引擎,是凋谢原子开源基金会的孵化我的项目之一。本文是对 TKEStack 开源我的项目负责人汝英哲、TKEStack 高级产品经理何鹏飞在云+社区沙龙online的分享整顿,介绍 TKEStack 的开源方法论,心愿与大家一起交换。点击此链接查看残缺直播回放~ 一、TKEStack 简介TKEStack 是腾讯云开源的容器平台,很多小伙伴们问:有了 Kuberentes 为何还要用 TKEStack?其实 Kuberentes 作为能力平台还有很多欠缺。比方它没有UI、镜像仓库、权限治理、日志、监控等根本运维能力,单把 Kuberentes 作为一个业务平台还是很薄弱的,而容器平台补齐了以上这些性能点,把 K8S 封装成了残缺的业务平台。 TKEStack 的开源历程腾讯很早就开始做容器相干的计算平台了。2009 年吴军博士从谷歌来到腾讯,便借鉴了谷歌做出了腾讯自研的业务平台 T-Borg。到了 2011~2013 年左右开始用社区成熟的公认的技术做业务平台。过后有一次重要的技术方向转变,转向应用业界支流技术计划后,Torca 转向专门做大数据业务平台,于是有了HOT(hadoop on torca)。到了 2014 年,Docker 技术也体现了威力,咱们十分看好 Docker、Kubernetes 技术,于是迅速进行了切换,并且着手开始做通用的业务平台。 2014 年也有了全新的产品 GaiaStack 用来反对腾讯外部业务,2019 年腾讯做了业务整合,有多条业务线的合并,Kuberentes 和私有云业务团队单干推出了 TKEStack 的容器平台,整合了 Kuberentes 的技术能力。Gaiastack和TKE的技术联合造成了 TKEStack 这个产品,并在 2019 年正式开源。 往年,又有一个十分重要的工夫节点,就是上个月 TKEStack 正式退出了凋谢原子开源基金会。 二、产品定位与方向1. 容器是云原生的事实底座在介绍整个产品的定位和方向之前,首先要提一下目前最炽热的技术方向 —— 云原生。 云原生是利用私有云、公有云和混合云构建和运行可拓展弹性的利用。容器基本上是整个云原生技术栈的底座角色,CNCF 官网来看容器族的产品中曾经有大量产品和厂商参加其中,基本上是百花齐放的态势。 泛滥产品中,真正耳熟能详的产品次要有两个,别离是 openshift 和 rancher,它们是容器开源界的标杆。 首先是红帽的 openshift,大家从 K8S 的代码奉献能够得悉,红帽 K8S 代码贡献率仅次于 google 排第二,技术能力十分强,产品也十分的欠缺,并且很早便开始做开源产品了。另一个是 rancher,往年被 suse 收买,产品体验十分好。 ...

December 7, 2020 · 2 min · jiezi

关于容器技术:用尽每一寸GPU阿里云cGPU容器技术白皮书重磅发布

简介: 云原生曾经成为业内云服务的一个趋势。在云原生上反对异构计算有助于晋升CPU的利用率。一文剖析业内支流GPU共享计划,并通知你阿里云cGPU牛在哪里!阿里云异构计算推出的cGPU(container GPU)容器技术,翻新地提出了一种不同于以往的GPU容器计划,克服了业内支流计划的一些常见的缺点,在保障性能的前提下,做到了容器之间的GPU显存隔离和工作隔离,为客户充分利用GPU硬件资源进行训练和推理提供的无效保障。 作者:阿里云异构计算高级技术专家 何旻 背景云原生曾经成为业内云服务的一个趋势。在云原生上反对异构计算,这个性能在规范的Docker上曾经能够很好的反对了。为了进一步提高GPU的利用率、防止算力节约,须要在单个GPU上能够运行多个容器,并且在多个容器间隔离GPU利用,这在规范的Docker上是无奈做到的。为了满足这一需要,业界也做了很多摸索。NVIDIA vGPU, NVIDIA MPS, 基于rCUDA的计划等,都为用户更小颗粒度的应用GPU提供了可能。 近日,阿里云异构计算推出的cGPU(container GPU)容器技术,翻新地提出了一种不同于以往的GPU容器计划,克服了业内支流计划的一些常见的缺点,在保障性能的前提下,做到了容器之间的GPU显存隔离和工作隔离,为客户充分利用GPU硬件资源进行训练和推理提供的无效保障。 业内罕用计划简介在介绍阿里云异构计算cGPU计算技术前,咱们先看看业内有哪些GPU共享计划吧: NVIDIA MPS NVIDIA MPS (NVIDIA Multi-Process Service)是NVIDIA公司为了进行GPU共享而推出的一套计划,由多个CUDA程序共享同一个GPU context,从而达到多个CUDA程序共享GPU的目标。同时,在Volta GPU上,用户也能够通过CUDA_MPS_ACTIVE_THREAD_PERCENTAGE变量设定每个CUDA程序占用的GPU算力的比例。 然而因为多个CUDA程序共享了同一个GPU context,这样引入的问题就是:当一个CUDA程序解体或者是触发GPU谬误的时候,其余所有CUDA程序的工作都无奈继续执行上来了,而这对于容器服务是灾难性的问题。 NVIDIA vGPU NVIDIA vGPU计划是GPU虚拟化的计划,能够对多用户的强GPU隔离计划。它次要利用于虚拟化平台中,每个vGPU的显存和算力都是固定的,无奈灵便配置;另外vGPU的应用须要额定从NVIDIA公司购买license,这里咱们就不再具体探讨。 rCUDA相似计划 业内还有一种罕用计划是通过替换CUDA库实现API层面的转发,而后通过批改显存调配,工作提交等API函数来达到多个容器共享GPU的目标。这种计划的毛病是须要对动态链接的程序从新编译,同时在CUDA库降级的时候也须要进行批改来适配新版本。 阿里云cGPU容器技术 阿里云异构计算GPU团队推出了cGPU计划,相比其余计划,这是一个颠覆性的翻新:通过一个内核驱动,为容器提供了虚构的GPU设施,从而实现了显存和算力的隔离;通过用户态轻量的运行库,来对容器内的虚构GPU设施进行配置。阿里云异构计算cGPU在做到算力调度与显存隔离的同时,也做到了无需替换CUDA动态库或动静库;无需从新编译CUDA利用;CUDA,cuDNN等版本随时降级无需适配等个性。 图1. cGPU容器架构图 cGPU内核驱动为一个自主研发的宿主机内核驱动。它的长处在于:• 适配开源规范的Kubernetes和NVIDIA Docker计划;• 用户侧通明。AI利用无需重编译,执行无需CUDA库替换;• 针对NVIDIA GPU设施的底层操作更加稳固和收敛;• 同时反对GPU的显存和算力隔离。 应用形式 1 利用阿里云容器服务 阿里云容器服务曾经反对cGPU容器组件了,通过登录容器服务 Kubernetes 版控制台,只须要简略的点击几下,为容器节点打标,就能够利用cGPU容器隔离,最大化的利用GPU的硬件能力了。同时,还能够通过Prometheus的监控能力查看每个cGPU容器内的显存用量,在享受低成本的同时,保障了利用的可靠性。 疾速部署和应用的形式,能够参见阿里云开发者社区的文章:https://developer.aliyun.com/article/762973更具体的应用文档,能够参考阿里云的帮忙文档:https://help.aliyun.com/document_detail/163994.html 2 在阿里云GPU实例上应用cGPU容器 为了更灵便的反对各种客户的须要,咱们也凋谢了阿里云GPU实例上应用cGPU容器的能力。cGPU依赖 Docker 和 NVIDIA Docker,在应用cGPU前,请确保环境能够失常创立带GPU的容器服务。 装置:下载cGPU 安装包:wget http://cgpu.oss-cn-hangzhou.aliyuncs.com/cgpu-0.8.tar.gz 解压后执行 sh install.sh 命令装置。装置后应用lsmod | grep cgpu 命令验证是否依照胜利:lsmod | grep cgpucgpu_km 71355 0 ...

September 14, 2020 · 1 min · jiezi