版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
像这样的两条命令,就是用DockerSwarm启动了两个Nginx容器实例。其中,第一条那么,像上面这样的创建和更新两个Nginx容器的操作,在Kubernetes里又该怎么做呢?DeploymentYAMLapiVersion:kind:name:nginx-app:replicas:app:-name:image:-containerPort:kubectlcreateKubernetesDeployment代码1$kubectlcreate-fNginxPodPodNginxkubectlsetimagekubectleditKubernetesAPIYAML文件来完成这个操作呢?这样我的改动就会体现在这个本地YAML文件里了。YAMLPodNginx1.7.9,如代码-name:image:而接下来,我们就可以执行一句kubectlrece操作,来完成这个Deployment的更新代码1$kubectlrece-f对于上面这种先kubectlcreate,再rece的操作,我们称为命令式配置文件操作不过,它是把Docker命令行里的参数,写在了配置文件里而已。那么,到底什么才是“式API”呢?答案是,kubectlapply命令。面的文章中,我曾经提到过这个kubectlapply命令,并推荐你使用它来代替kubectlcreate(12kubectlapply代码1$kubectlapply-f这样,NginxDeploymentkubectlcreate然后,我再修改一下nginx.yaml里定义的镜像:代代-name: image:在修改完这个YAML文件之后,我不再使用kubectlrece命令进行更新,而是继续执行一条kubectlapply命令,即:代码1$kubectlapply-f这时,KubernetesDeployment可是,它跟kubectlrece命令有什么本质区别吗?对象,替换原有的API对象;而kubectlapply,则是执行了一个对原有API对象的PATCH类似地,kubectlsetimagekubectleditAPIapply),一次能处理多个写操作,并且具备Merge能力。件事情,Kubernetes需要的步骤往往要比其他项目多不少。接下来,我就以Istio项目为例,来为你讲解一下式API在实际使用时的重要意义在2017年5月,、IBM和Lyft公司,共同宣布了Istio开源项目的诞生。很快,这个ServiceMeshIstioKubernetes每一个应用Pod里的Envoy容器。这个Envoy项目是Lyft公司推出的一个高性能C++网络,也是Lyft公司对Istio项目的而Istio项目,则把这个服务以sidecar容器的方式,运行在了每一个被治理的应用Pod能够通过配置Pod里的iptables规则,把整个Pod的进出流量接管下来。 ne)里的Pilot组件,就能够通过调用每个Envoy容器API,对这个Envoy进行配置,从而实现微服务治理假设这个Istio架构图左边的Pod是已经在运行的应用,而右边的Pod则是我们刚刚上线的应用的新版本。这时候,PilotPodEnvoy90配给旧版本的应用,将10%的流量分配给新版本应用,并且,还可以在后续的过程中随时调可以调节这个流量从Envoy的配置,用户和应用都是完全“无感”的AdmissionControl。在KubernetesPod或者任何一个API对象被提交给APIServer之后,总有一KubernetesPod加上某些(Labels)。AdmissionControllerAPIServerAPI对象创建之后会被立刻调用到。但这就意味着,如果你现在想要添加一些自己的规则到AdmissionController,就会比较困APIServerIstioDynamicAdmissionControl,也叫作:Initializer现在,我给你举个例子。比如,我有如下所示的一个应用代码代码123456789apiVersion:kind:Podname:myapp-podapp:myapp-name:myapp-image:command:['sh','-c',oKubernetes!&&sleep接下来,IstioPodYAMLKubernetesAPIEnvoy代码代码apiVersion:kind:name:myapp-556789app:myapp-name:myapp-image:command:['sh','-c',oKubernetes!&&sleep-name: command:["/usr/local/bin/envoy"]IstioPodmyapp-container多出了一个叫作envoy的容器,它就是Istio要使用的Envoy。首先,IstioEnvoyConfigMapKubernetes中。这个ConfigMap(名叫:envoy-initializer)的定义如下所示:代码代码123456789apiVersion:kind:ConfigMapname:envoy-initializerconfig:|-name: command:["/usr/local/bin/envoy"]"--modeserve"protocol:cpu:"1000m"memory:"512Mi"cpu:"100m"memory:-name:envoy-mountPath:-name:envoy-confname:相信你已经注意到了,这个ConfigMap的data部分,正是一个Pod对象的一部分定义。其中,我们可以看到Envoy容器对应的containers字段,以及一个用来Envoy配置文件的volumes字段。不难想到,Initializer要做的工作,就是把这部分Envoy相关的字段,自动添加到用户提交的PodAPIPodcontainersvolumes以Kubernetes在处理这样的更新请求时,就必须使用类似于gitmerge这样的操作,才能将InitializerPodPATCHAPIPATCHAPI,正是式API最主要的能力接下来,IstioInitializerPodKubernetesPod代码代码123456789apiVersion:kind:Podapp:envoy-initializername:envoy-initializer-name:envoy-image:envoy-:envoy-initializerenvoy-initializer:0.0.1好的“自定义控制器”(CustomController),我将会在下一篇文章中讲解它的编写方法。而我曾在第16篇文章《编排其实很简单:谈谈“控制器”模型》中和你过,一个状态”,则是:这个Pod里被添加了Envoy容器的定义。我还是用一段代码代码123456789for//获取新创建的pod//Diffif!isInitialized(pod)}}API(doSomething)initializer这个ConfigMap里的数据(即:它的data字段的值)。InitializerAPIServer代码代码123funcdoSomething(pod)cm.Get(ConfigMap,"envoy-}然后,把这个ConfigMap里的containers和volumes字段,直接添加进一个空的代码代码1234567funcdoSomething(pod)cm.Get(ConfigMap,"envoy-newPod:=newPod.Spec.Containers=cm.ContainersnewPod.Spec.Volumes=cm.Volumes}KubernetesAPIPod生成一个TwoWayMergePatch:代码代码1funcdoSomething(pod)//发起PATCH请求,修改这个pod.Patch(pod.Name,}23456723456789cm.Get(ConfigMap,"envoy-newPod:=newPod.Spec.Containers=cm.ContainersnewPod.Spec.Volumes=cm.Volumes//生成patchpatchBytes:=strategicpatch.CreateTwoWayMergePatch(pod,Kubernetes ,发起一个PATCH请求PodEnvoy代码代码123456789kind:name:envoy-config//这个名字必须至少包括两个-name:-""//,""就是coreAPIGroupKubernetesPodInitialize负责这个操作的Initializer,名叫:envoy-initializer。InitializerConfigurationKubernetesInitializer在所有新创建的Pod的Metadata上,格式如下所示:代码代码apiVersion:kind:-name:name:myapp-app:MetadataMetadataInitializerPod始化操作的重要依据(也就是前面伪代码中isInitialized()方法的含义)。这也就意味着,当你在Initializer里完成了要做的操作后,一定要记得将这个PodAnnotation段,从而要使用某个Initializer:代码代码123456apiVersion:kind:Pod在这个Pod里,我们添加了一个Annotation,写明:envoy-initializer了。的,就是由无数个运行在应用Pod中的Envoy容器组成的服务网格。这也正是ServiceMesh的含义。备注:如果你对这个Demo感,可以在这个 码和文档。这个Demo,是我fork自KelseyHightower的一个同名的Demo而这个机制得以实现的原理,正是借助了Kubernetes能够对API对象进行更新的能力,这也正是Kubernetes“式API”的独特之处:其次,“式API”允许有多个API写端,以PATCH的方式对API对象进行修改,而无需关心本地原始YAML文件的内容。sidecarInitializerIstio目的设计与实现,其实都依托于Kubernetes的式API和它所提供的各种编排能力。可以说,Istio是在Kubernetes项目使用上的一位“集大成者”。IstioKubernetes43APIAPI”有多成功。这,既是Cloud喜闻乐见的事情,也是Istio项目一推出就被公司和整个技术圈儿热捧的重要原因。程。它遵循的,正是标准的“Kubernetes编程范式”,即:KubernetesAPI在今天这篇文章中,我为你重点讲解了Kubernetes式API的含义。并且,通过对Istio项目的剖析,我为你说明了它使用Kubernetes的Initializer特性,完成Envoy容器“自动注是你从一个Kubernetes用户,到Kubernetes玩家的晋级。而,如何理解“KubernetesKubernetesAPIKubernetes毕竟,无论是从技术实现还是在社区运作上,Istio与Kubernetes项目之间都是紧密的、唇齿路,恐怕会更加重重。ServiceMesh体系的 精选留
evoterododInitializer提交patch修改Pod对象,Kubernetes发现Pod更新,然后以“滚动升级”的方式更作者回pererterdopod 居然看一遍就记住了这节课的原 Apereretcd状A,改 ‘’‘有个疑问:name为envoy的configmap是在哪里定义的呢了?’‘’configmap模板中的metadata-name是envoy-initializer,但是在下面的containervolum作者回cogpevobectlcretecogpevoyroeevo.on evo这gxreodorer作者回这确实是一个因兵 针对磊哥的思考题,Envoy的文档有相关文章分析: 比如完备的Http/2支持、高级负载均衡、可插入式架构、详细的统计分析等,可见Envoy这作者回文档其实不好意思说的太直接,所以,还不在点子 磊哥竟然穿插了istio的讲解,后续有没有计划讲讲knative作者回knative没啥特别的,暂时就不给篇 作者回见service部分的讲 之前一直用nginx和 ,没用过envoy查了下官网,看envoy的特性之一是“smallmemoryfootprint”,这个特征特别适envoy作为sidecar的角色注入到每个pod中(类似的用汇编写的pause容器一样的底层容器作者回这个只是次要因 请教老师,Initializer和Preset都能注入POD配置,那么这两种方法的适用场景有何不同作者回preetterter小宇 最后的问题,envoy的优势之一是可以做服务发现和主动的健康检 evodecr流.^作者回可以尝试了解一下envoy的虎虎 kubectlapply是通过mvcc实现的并发写
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电信行业薪资调研报告
- 旅游行业前台接待工作总结
- 二年级班主任期中工作总结温馨关怀成长陪伴
- 秘书工作的职业素养培养计划
- 公园服务员工作内容
- 银行柜员服务工作评价
- 2024年笋的秘密教案8篇
- 出卖房屋合同(2篇)
- 第17课 二战后资本主义的新变化(分层作业)(原卷版)
- 第2单元 古代欧洲文明(A卷·知识通关练)(原卷版)
- 水利二级建造师继续教育试题及答案(江西)
- 银行资产保全个人年度工作总结(4篇)
- 天津市中小学生思想品德发展水平评价指标(小学中高年级学段)
- 三年级班队会课程纲要
- 慢病管理服务电话回访话术
- GB/T 1741-2020漆膜耐霉菌性测定法
- 400V开关柜操作及维护手册(双语)
- 教师业务档案(表格模板)
- 招标项目评分表
- 政治学原理-【综合版】-复旦大学
- 全国应急管理普法知识竞赛题库及答案
评论
0/150
提交评论