- 博客(93)
- 收藏
- 关注

原创 【汇总贴】Kubernetes基础知识目录
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到
2020-11-27 16:08:54
118
原创 Label:组织Pod的利器
为什么需要Label当资源变得非常多的时候,如何分类管理就非常重要了,Kubernetes提供了一种机制来为资源分类,那就是Label(标签)。Label非常简单,但是却很强大,Kubernetes中几乎所有资源都可以用Label来组织。Label的具体形式是key-value的标记对,可以在创建资源的时候设置,也可以在后期添加和修改。以Pod为例,当Pod变得多起来后,就显得杂乱且难以管理,如下图所示。图1 没有分类组织的Pod如果我们为Pod打上不同标签,那情况就完全不同了,如下图所示。图
2020-11-30 09:05:18
329
原创 Namespace:资源分组
为什么需要NamespaceLabel虽然好,但只用Label的话,那Label会非常多,有时候会有重叠,而且每次查询之类的动作都带一堆Label非常不方便。Kubernetes提供了Namespace来做资源组织和划分,使用多Namespace可以将包含很多组件的系统分成不同的组。Namespace也可以用来做多租户划分,这样多个团队可以共用一个集群,使用的资源用Namespace划分开。不同的Namespace下面可以有相同的名字,Kubernetes中大部分资源可以用Namespace划分,不过有
2020-11-30 09:05:08
397
原创 Deployment
什么是Deployment在Pod:Kubernetes中的最小调度对象这个章节介绍了Pod,Pod是Kubernetes创建或部署的最小单位,但是Pod是被设计为相对短暂的一次性实体,Pod可以被驱逐(当节点资源不足时)、随着集群的节点崩溃而消失。Kubernetes提供了Controller(控制器)来管理Pod,Controller可以创建和管理多个Pod,提供副本管理、滚动升级和自愈能力,其中最为常用的就是Deployment。图1 Deployment一个Deployment可以包含一个或
2020-11-30 09:04:57
782
原创 StatefulSet
为什么需要StatefulSet在Deployment中讲到了Deployment,Deployment控制器下的Pod都有个共同特点,那就是每个Pod除了名称和IP地址不同,其余完全相同。需要的时候,Deployment可以通过Pod模板创建新的Pod;不需要的时候,Deployment就可以删除任意一个Pod。但是在某些场景下,这并不满足需求,比如有些分布式的场景,要求每个Pod都有自己单独的状态时,比如分布式数据库,每个Pod要求有单独的存储,这时Deployment就不能满足需求了。详细分析下
2020-11-30 09:04:47
390
原创 Job和CronJob
Job和CronJob是负责批量处理短暂的一次性任务(short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。Job:是Kubernetes用来控制批处理型任务的资源对象。批处理业务与长期伺服业务(Deployment、Statefulset)的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出(Pod自动删除)。CronJob:是基于时间的Job,就类似
2020-11-28 20:03:08
552
原创 DaemonSet
DaemonSet 是这样一种对象(守护进程),它在集群的每个节点上运行一个 Pod,且保证只有一个 Pod,这非常适合一些系统层面的应用,例如日志收集、资源监控等,这类应用需要每个节点都运行,且不需要太多实例,一个比较好的例子就是Kubernetes的kube-proxy。DaemonSet跟节点相关,如果节点异常,也不会在其他节点重新创建。图1 DaemonSet下面是一个DaemonSet的示例。apiVersion: apps/v1kind: DaemonSetmetadata:
2020-11-28 20:02:58
277
原创 亲和与反亲和调度
在DaemonSet中讲到使用nodeSelector选择Pod要部署的节点,其实Kubernetes还支持更精细、更灵活的调度机制,那就是亲和(affinity)与反亲和(anti-affinity)调度。Kubernetes支持节点和Pod两个层级的亲和与反亲和。通过配置亲和与反亲和规则,可以允许您指定硬性限制或者偏好,例如将前台Pod和后台Pod部署在一起、某类应用部署到某些特定的节点、不同应用部署到不同的节点等等。Node Affinity(节点亲和)您肯定也猜到了亲和性规则的基础肯定也是标签
2020-11-28 20:02:48
934
原创 ConfigMap
ConfigMap是一种用于存储应用所需配置信息的资源类型,用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。通过ConfigMap可以方便的做到配置解耦,使得不同环境有不同的配置。相比环境变量,Pod中引用的ConfigMap可以做到实时更新,当您更新ConfigMap的数据后,Pod中引用的ConfigMap会同步刷新。创建ConfigMap下面示例创建了一个名为configmap-test的ConfigMap,ConfigMap的配置数据在data字段下定义。apiVer
2020-11-28 20:02:38
295
原创 Secret
Secret是一种加密存储的资源对象,您可以将认证信息、证书、私钥等保存在Secret中,而不需要把这些敏感数据暴露到镜像或者Pod定义中,从而更加安全和灵活。Secret与ConfigMap非常像,都是key-value键值对形式,使用方式也相同,不同的是Secret会加密存储,所以适用于存储敏感信息。Base64编码Secret与ConfigMap相同,是以键值对形式保存数据,所不同的是在创建时,Secret的Value必须使用Base64编码。对字符串进行Base64编码,可以直接使用“ech
2020-11-28 20:02:28
512
原创 容器网络
Kubernetes本身并不负责网络通信,Kubernetes提供了容器网络接口CNI(Container Network Interface),具体的网络通信交给CNI插件来负责,开源的CNI插件非常多,像Flannel、Calico等,华为云CCE也专门为Kubernetes定制了CNI插件,使得Kubernetes可以使用华为云VPC网络。Kubernetes虽然不负责网络,但要求集群中的Pod能够互相通信,且Pod必须通过非NAT网络连接,即收到的数据包的源IP就是发送数据包Pod的IP。同时Po
2020-11-28 20:02:17
363
原创 Service
直接访问Pod的问题Pod创建完成后,如何访问Pod呢?直接访问Pod会有如下几个问题:Pod会随时被Deployment这样的控制器删除重建,那访问Pod的结果就会变得不可预知。Pod的IP地址是在Pod启动后才被分配,在启动前并不知道Pod的IP地址。应用往往都是由多个运行相同镜像的一组Pod组成,逐个访问Pod也变得不现实。举个例子,假设有这样一个应用程序,使用Deployment创建了前台和后台,前台会调用后台做一些计算处理,如图1所示。后台运行了3个Pod,这些Pod是相互独立且可被
2020-11-28 20:02:06
317
原创 Ingress
为什么需要IngressService是基于四层TCP和UDP协议转发的,而Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分,如下图所示。图1 Ingress-ServiceIngress工作机制要想使用Ingress功能,必须在Kubernetes集群上安装Ingress Controller。Ingress Controller有很多种实现,最常见的就是Kubernetes官方维护的NGINX Ingress Controller;不同厂商通常有自
2020-11-28 20:01:57
533
原创 就绪探针(Readiness Probe)
一个新Pod创建后,Service就能立即选择到它,并会把请求转发给Pod,那问题就来了,通常一个Pod启动是需要时间的,如果Pod还没准备好(可能需要时间来加载配置或数据,或者可能需要执行一个预热程序之类),这时把请求转给Pod的话,Pod也无法处理,造成请求失败。Kubernetes解决这个问题的方法就是给Pod加一个业务就绪探针Readiness Probe,当检测到Pod就绪后才允许Service将请求转给Pod。Readiness Probe同样是周期性的检测Pod,然后根据响应来判断Pod是
2020-11-28 20:01:46
12766
原创 NetworkPolicy
NetworkPolicy是Kubernetes设计用来限制Pod访问的对象,通过设置NetworkPolicy策略,可以允许Pod被哪些地址访问(即入规则)、或Pod访问哪些地址(即出规则)。这相当于从应用的层面构建了一道防火墙,进一步保证了网络安全。NetworkPolicy支持的能力取决于集群的网络插件的能力,如CCE的集群只支持设置Pod的入规则。默认情况下,如果命名空间中不存在任何策略,则所有进出该命名空间中的Pod的流量都被允许。NetworkPolicy的规则可以选择如下3种:nam
2020-11-28 20:01:27
808
原创 Volume
容器中的文件在磁盘上是临时存放的,当容器重建时,容器中的文件将会丢失,另外当在一个Pod中同时运行多个容器时,常常需要在这些容器之间共享文件,这也是容器不好解决的问题。 Kubernetes抽象出了Volume来解决这两个问题,也就是存储卷,Kubernetes的Volume是Pod的一部分,Volume不是单独的对象,不能独立创建,只能在Pod中定义。Pod中的所有容器都可以访问Volume,但必须要挂载,且可以挂载到容器中任何目录。实际中使用容器存储如下图所示,将容器的内容挂载到Volume中,通过
2020-11-27 16:11:32
406
原创 PV、PVC和StorageClass
上一章节介绍的HostPath是一种持久化存储,但是HostPath的内容是存储在节点上,导致只适合读取。如果要求Pod重新调度后仍然能使用之前读写过的数据,就只能使用网络存储了,网络存储种类非常多且有不同的使用方法,通常一个云服务提供商至少有块存储、文件存储、对象存储三种,如华为云的EVS、SFS和OBS。Kubernetes解决这个问题的方式是抽象了PV(PersistentVolume)和PVC(PersistentVolumeClaim)来解耦这个问题,从而让使用者不用关心具体的基础设施,当需要存
2020-11-27 16:11:23
1082
原创 ServiceAccount
Kubernetes中所有的访问,无论外部内部,都会通过API Server处理,访问Kubernetes资源前需要经过认证与授权。Authentication:用于识别用户身份的认证,Kubernetes分外部服务账号和内部服务账号,采取不同的认证机制,具体请参见认证与ServiceAccount。Authorization:用于控制用户对资源访问的授权,对访问的授权目前主要使用RBAC机制,将在RBAC介绍。图1 API Server的认证授权认证与ServiceAccountKuber
2020-11-27 16:11:14
748
原创 存活探针(Liveness Probe)
存活探针Kubernetes提供了自愈的能力,具体就是能感知到容器崩溃,然后能够重启这个容器。但是有时候例如Java程序内存泄漏了,程序无法正常工作,但是JVM进程却是一直运行的,对于这种应用本身业务出了问题的情况,Kubernetes提供了Liveness Probe机制,通过检测容器响应是否正常来决定是否重启,这是一种很好的健康检查机制。毫无疑问,每个Pod最好都定义Liveness Probe,否则Kubernetes无法感知Pod是否正常运行。Kubernetes支持如下三种探测机制。HT
2020-11-27 16:10:41
4324
原创 Pod:Kubernetes中的最小调度对象
什么是PodPod是Kubernetes创建或部署的最小单位。一个Pod封装一个或多个容器(container)、存储资源(volume)、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod使用主要分为两种方式:Pod中运行一个容器。这是Kubernetes最常见的用法,您可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。Pod中运行多个需要耦合在一起工作、需要共享资源的容器。通常这种场景下应用包含一个主容器和几个辅助容器(SideCar Contain
2020-11-27 16:10:32
785
原创 Kubernetes
Kubernetes是什么Kubernetes是一个很容易地部署和管理容器化的应用软件系统,使用Kubernetes能够方便对容器进行调度和编排。对应用开发者而言,可以把Kubernetes看成一个集群操作系统。Kubernetes提供服务发现、伸缩、负载均衡、自愈甚至选举等功能,让开发者从基础设施相关配置等解脱出来。Kubernetes可以把大量的服务器看做一台巨大的服务器,在一台大服务器上面运行应用程序。无论Kubernetes的集群有多少台服务器,在Kubernetes上部署应用程序的方法永远一
2020-11-27 16:10:21
464
1
原创 容器
容器与Docker容器技术起源于Linux,是一种内核虚拟化技术,提供轻量级的虚拟化,以便隔离进程和资源。尽管容器技术已经出现很久,却是随着Docker的出现而变得广为人知。Docker是第一个使容器能在不同机器之间移植的系统。它不仅简化了打包应用的流程,也简化了打包应用的库和依赖,甚至整个操作系统的文件系统能被打包成一个简单的可移植的包,这个包可以被用来在任何其他运行Docker的机器上使用。容器和虚拟机具有相似的资源隔离和分配方式,容器虚拟化了操作系统而不是硬件,更加便携和高效。图1 容器 vs
2020-11-27 16:10:11
183
原创 RBAC
RBAC资源Kubernetes中完成授权工作的就是RBAC机制,RBAC授权规则是通过四种资源来进行配置。Role:角色,其实是定义一组对Kubernetes资源(NameSpace级别)的访问规则。RoleBinding:角色绑定,定义了用户和角色的关系。ClusterRole:集群角色,其实是定义一组对Kubernetes资源(集群级别)的访问规则。ClusterRoleBinding:集群角色绑定,定义了用户和集群角色的关系。Role和ClusterRole指定了可以对哪些资源做哪些
2020-11-27 16:09:49
166
原创 弹性伸缩
在Pod的编排与调度章节介绍了Deployment这类控制器来控制Pod的副本数量,通过调整replicas的大小就可以达到给应用手动扩缩容的目的。但是在某些实际场景下,手动调整一是繁琐,二是速度没有那么快,尤其是在应对流量洪峰需要快速弹性时无法做出快速反应。Kubernetes支持Pod和集群节点的自动弹性伸缩,通过设置弹性伸缩规则,当外部条件(如CPU使用率)达到一定条件时,根据规则自动伸缩Pod和集群节点。Prometheus与Metrics Server想要做到自动弹性伸缩,先决条件就是能感知
2020-11-27 16:09:31
918
转载 华为云PaaS首席科学家:Cloud Native +AI,企业数字化转型的最佳拍档
近日,在2019华为全球分析师大会期间,华为云PaaS首席科学家熊英博士在+智能,见未来(华为云&大数据)的分论坛上,从云计算行业发展谈起,深入云原生发展趋势,对华为云智能应用平台做了深度解读。熊英博士为大家分享了云原生技术和平台发展的新趋势,重点介绍了华为云智能应用平台。熊英博士提出云原生技术使能企业数字化转型的三个关键点:多云解决方案、泛在的容器和智能边缘。IT投资投资趋势数字...
2019-04-23 15:23:03
386
原创 【独家】K8S漏洞报告 | 近期bug fix解读
安全漏洞CVE-2019-3874分析Kubernetes近期重要bug fix分析Kubernetes v1.13.5 bug fix数据分析——本周更新内容安全漏洞CVE-2019-3874分析3月21日,Kubernetes社区通过Google Group频道Kubernetes developer/contributor discussion发布了安全漏洞CVE-2019-387...
2019-04-19 09:48:58
248
原创 【独家】K8S漏洞报告 | CVE-2019-1002101解读
kubectl cp漏洞CVE-2019-1002101分析Kube-proxy IPVS添加flag ipvs-strict-arp近期bug fix数据分析——本期更新内容kubectl cp漏洞近期kubernetes的kubectl cp命令发现安全问题(CVE-2019-1002101),该问题严重程度比较高,建议将kubectl升级到Kubernetes 1.11.9,1.1...
2019-04-17 17:40:33
1014
转载 如何顺利完成Kubernetes源码编译?
为什么要编译源码 ?Kubernetes是一个非常棒的容器集群管理平台。通常情况下,我们并不需要修改K8S代码即可直接使用。但如果,我们在环境中发现了某个问题/缺陷,或按照特定业务需求需要修改K8S代码时,如定制Kubelet的StopContainer 逻辑、kube-scheduler的pod调度逻辑等。为了让修改生效,那么就需要编译K8S代码了。Kubernetes源码编译,大致分为本地...
2019-04-16 11:08:50
416
原创 关于Istio 1.1,你所不知道的细节
本文整理自Istio社区成员Star在Cloud Native Days China 2019 北京站的现场分享第1则主角 IstioIstio作为service mesh领域的明星项目,从2016年发布到现在热度不断攀升。Istio & Envoy Github Star Growth官网中Istio1.1的架构图除了数据面的Envoy和控制面的Pilot,Mixer,Ci...
2019-04-12 09:25:28
149
原创 容器化之路:谁偷走了我的构建时间
随着全面云时代到来,很多公司都走上了容器化道路,老刘所在的公司也不例外。作为一家初创型的互联网公司,容器化的确带来了很多便捷,也降低了公司成本,不过老刘却有一个苦恼,以前每天和他一起下班的小王自从公司上云以后每天都比他早下班一个小时,大家手头上的活都差不多,讲道理不应该呀,经过多番试探、跟踪、调查,终于让老刘发现了秘密的所在。作为一个开发,每天总少不了要出N个测试版本进行调试,容器化以后每次出版...
2019-04-11 14:48:22
180
转载 Kubernetes高级调度- Taint和Toleration、Node Affinity分析
此文分享了污点和Node Affinity实际使用过程中的细节、坑和思维误区。同时整理且回答了诸多细节问题,尤其那些在官方文档中不曾提及的细节。阅读提示:文中的节点指Node(避免Pod和Node同时出现在一小段文字中,所以Node以节点汉字表述)Taint和Toleration污点的理论支撑1.1 污点设置有哪些影响效果使用效果(Effect):PreferNoSchedule:...
2019-04-10 17:55:15
1251
原创 Kubernetes+Federation打造跨多云管理服务
Kubernetes日渐普及,在公有云、私有云等多个环境中部署kubernetes集群已是常规做法,而随着环境的复杂多样和集群数量增长,如何高效地管理这些集群成为新的问题。于是跨多云管理服务应运而生。华为云高级工程师Fisher在Cloud Native Days China 2019杭州站发表了名为《Kubernetes+Federation打造跨多云管理服务》的议题,介绍了基于Federat...
2019-04-09 18:12:23
451
原创 idou老师教你学istio 31:Istio-proxy的report流程
Istio-proxy的report主要是将envoy采集到的连接attributes的信息上报给控制面的mixer,它的入口在request_handler_impl.cc文件中,这里需要打开enable_mixer_report开关,提取出report_data中的attribute信息,调用SendReport发送出去。SendReport的实现在client_context_base....
2019-04-08 13:18:03
212
原创 idou老师教你学istio30:Mixer Redis Quota Adapter 实现和机制
配置1.1参数1.2 Params.Quota1.3Params.Override1.4Params.QuotaAlgorithm速率限制的算法:Fixed Window 算法每个时间间隔对应一个计数器,每当有请求到来,如果此时计数器未达到配额的限定值,则计数器加 1,否则拒绝服务。当进入下一个时间间隔时,计数器失效被重置。该算法的缺点在于不能保证在任意的时间间隔内,速率都被...
2019-04-04 17:30:22
234
原创 Kubernetes日志采集
Kubernetes日志打印方式标准输出docker标准输出日志stdout和stderr,使用docker logs或者kubectl logs查看最新的日志(tail)。 如果想看到更多的日志,在宿主机目录/var/lib/docker/containers可以找到对应的全部日志。标准输出是k8s社区推荐的日志输出方式。日志文件下面将从路径、挂载两方面介绍。默认路径如何使用log4...
2019-04-03 15:06:55
1470
原创 The New Stack:KubeEdge将Kubernetes的能力延伸至边缘
3月29日,权威技术分析网站The New Stack在Edge/IoT专栏发表了关于边缘计算项目KubeEdge的最新调研报告。原文观点如下:https://github.com/kubeedge/kubeedge云原生计算和边缘计算代表了两个独立并且重要的现代基础设施方向。云原生计算是云计算的第二波浪潮,它提供了对云的最佳投资回报。而边缘计算充当云和物联网(IoT)设备之间的管道,为数以...
2019-04-02 18:58:59
343
转载 Kubernetes集群调度器原理剖析及思考
导读云环境或者计算仓库级别(将整个数据中心当做单个计算池)的集群管理系统通常会定义出工作负载的规范,并使用调度器将工作负载放置到集群恰当的位置。好的调度器可以让集群的工作处理更高效,同时提高资源利用率,节省能源开销。通用调度器,如Kubernetes原生调度器Scheduler实现了根据特定的调度算法和策略将pod调度到指定的计算节点(Node)上。但实际上设计大规模共享集群的调度器并不是一件...
2019-04-01 15:12:31
195
原创 行业数字化转型攻略:华为云智能应用平台3.0解读
刚刚过去的华为生态合作伙伴大会2019,华为云提出:由“三引擎”驱动全行业数字化转型与智能升级。其中“智能应用平台”作为重要引擎之一,致力于提供以应用为中心的端边云全栈服务,让企业应用上云更简单,数字化转型更智能。在大会期间,华为云BU PaaS产品部总经理廖振钦正式发布了“华为云智能应用平台3.0”,并现场展示全球首个容器多云&混合云解决方案。华为云发布“华为云智能应用平台3.0...
2019-03-28 09:12:41
438
原创 Kubernetes 1.14发布:对Windows节点的生产级支持、Kubectl更新与持久本地卷通用版本已全面到来
今天,我们高兴地宣布Kubernetes 1.14版本的正式亮相,这亦是我们在2019年当中进行的首次发布!Kubernetes 1.14版本由31项增强功能组成,具体包括:10项稳定版功能,12项beta测试功能,以及7项全新功能。此次版本的核心主题在于可扩展性,以及在Kubernetes上支持更多工作负载。本轮共有三项主要功能迎来通用版本,另有一项重要安全功能步入beta测试阶段。与此前发...
2019-03-27 09:05:15
122
原创 华为云全球首发容器多云和混合云解决方案,实现容器应用轻松跨云
3月22日,在华为中国生态伙伴大会上,华为云全球首发商用级容器多云和混合云解决方案,为用户提供容器集群及云原生应用的跨云管理能力,解决云服务平台供应商锁定和单云场景的低可靠风险,让用户的选择更加灵活,云原生业务更加稳定可靠。华为云BU PaaS产品部总经理廖振钦现场发布MCP现场通过模拟网上购物过程中,某云上集群宕机的场景,完整的演示了从用户体验到服务异常检测、后台应用服务自动迁移的完整过程...
2019-03-26 10:03:37
333
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人