摘要:
vrp是Versatile Routing Platform的缩写,翻译成中文就是通用路由平台,该平台是华为公司具有完全自主知识产权的网络操作系统。可以运行在多种硬件平台之上。拥有一致的网络界面、用户界面和管理界面,提供了灵活丰富的应用解决方案,集成了路由交换技术、QoS技术、安全技术和IP语音技术等数据通信功能。 阅读全文
摘要:
etcd是一个高可用的分布式键值数据库,可用于服务发现,etcd采用 raft 一致性算法,基于 Go 语言实现。其特点有简单易用,所谓简单易用是指安装配置简单,提供http/https接口;安全,安全是指etcd支持ssl证书认证,支持集群各节点间使用对等证书认证;客户端和服务端的双向证书认证;可靠,可靠是指etcd使用raft协议实现分布式系统数据的可用性和一致性;etcd主要有两个版本v2和v3;v2和v3的api是互不兼容的,所以我们在同一服务器上安装多个版本的etcd时,我们需要用ETCDCTL_API这个环境变量指定; 阅读全文
摘要:
对于helm chart来说,它就是一个打包文件,把我们需要用到的配置清单,以模板的形式发布出来,用户使用时,可以根据values.yaml文件来自行定义对应的属性的值,当然也可以使用--set选项来指定个别配置清单的属性的值;那么我们使用helm命令从仓库中安装应用,它对应的打包文件放在那里的呢?默认情况我们使用helm命令安装应用,它会把对应应用的chart 打包文件存放在当前用户的家目录中的.cache/helm/repository/目录下,以.tgz结尾的一个压缩包; 阅读全文
摘要:
如果我们把k8s的资源清单类比成centos上的rpm包,那么helm的作用就如同yum;简单讲helm就是类似yum这样的包管理器,它能够让我们在k8s上部署应用变得简单,我们需要部署某些应用到k8s上,我们直接使用helm就可以完成一键部署;有了helm工具,我们甚至都不需要再写什么资源清单了;对于helm来说,它只是把对应应用需要的资源清单通过模板引擎,将对应资模板源清单赋值以后,发送给k8s进行应用,从而实现把应用部署到k8s上; 阅读全文
摘要:
HPA的全称是Horizontal Pod Autoscaler,从字面意思理解它就是水平pod自动伸缩器;简单讲HPA的主要作用是根据指定的指标数据,监控对应的pod控制器,一旦对应pod控制器下的pod的对应指标数据达到我们定义的阀值,即HPA就会被触发,它会根据对应指标数据的值来扩展/缩减对应pod副本数量;扩展和缩减都是有上下限的,当pod数量达到上限,即便指标数据还是超过了我们定义的阀值它也不会再扩展,对于下线默认不指定就是为1;下限和上限都是一样的逻辑,即便一个访问都没有,它会保持最低有多少个pod运行;需注意hpa只能用于监控可扩缩的pod控制器,对DaemonSet类型控制器不支持; 阅读全文
摘要:
Prometheus是一款高性能的监控程序,其内部主要有3个组件,Retrieval组件主要负责数据收集工作,它可以结合外部其他程序收集数据;TSDB组件主要是用来存储指标数据,该组件是一个时间序列存储系统;HttpServer组件主要用来对外提供restful api接口,为客户端提供查询接口;默认监听在9090端口; 阅读全文
摘要:
其实apiserver就是一个https服务器,我们可以使用kubectl工具通过https协议请求apiserver创建资源,删除资源,查看资源等等操作;每个请求都对应着RESTful api中的请求方法,对应资源就是http协议中的url路径;比如我们要创建一个pod,其kubectl请求apiserver 使用post方法将资源定义提交给apiserver;pod资源就是对应群组中的某个版本下某个名称空间下的某个pod资源; 阅读全文
摘要:
在k8s上扩展资源类型的方式有三种,第一种是crd,crd是k8s内建的资源类型,该类型资源主要用来创建用户自定义资源类型的资源;即通过crd资源,可以将用户自定义资源类型转换为k8s上资源类型;第二种是自定义apiserver;这种方式要比第一种方式要复杂一点,需要用户手动开发程序实现对应功能的apiserver,让其用户创建自定义类型资源能够通过自定义apiserver实现;第三种方式就是修改现有k8sapiserver,让其支持对应用户自定义资源类型; 阅读全文
摘要:
节点污点有点类似节点上的标签或注解信息,它们都是用来描述对应节点的元数据信息;污点定义的格式和标签、注解的定义方式很类似,都是用一个kv数据来表示,不同于节点标签,污点的键值数据中包含对应污点的effect,污点的effect是用于描述对应节点上的污点有什么作用;在k8s上污点有三个效用(effect),第一个效用是NoSchedule,表示拒绝pod调度到对应节点上运行;第二个效用是PreferSchedule,表示尽量不把pod调度到此节点上运行;第三个效用是NoExecute,表示拒绝将pod调度到此节点上运行;该效用相比NoSchedule要严苛一点;从上面的描述来看,对应污点就是来描述拒绝pod运行在对应节点的节点属性; 阅读全文
摘要:
在k8s上调度器的工作逻辑是根据调度算法来实现对应pod的调度的;不同的调度算法,调度结果也有所不同,其评判的标准也有所不同,当调度器发现apiserver上有未被调度的pod时,它会把k8s上所有节点信息,挨个套进对应的预选策略函数中进行筛选,把不符合运行pod的节点淘汰掉,我们把这个过程叫做调度器的预选阶段(Predicate);剩下符合运行pod的节点会进入下一个阶段优选(Priority),所谓优选是在这些符合运行pod的节点中根据各个优选函数的评分,最后把每个节点通过各个优选函数评分加起来,选择一个最高分,这个最高分对应的节点就是调度器最后调度结果,如果最高分有多个节点,此时调度器会从最高分相同的几个节点随机挑选一个节点当作最后运行pod的节点;我们把这个这个过程叫做pod选定过程(select); 阅读全文
摘要:
我们知道在k8s上我们可以用名称空间来隔离多个资源,在不同名称空间下我们可以创建相同名称和相同类型的资源;有些资源还必须依赖名称空间才可以被创建;但是在k8s上,名称空间不可以隔离网络,所谓隔离网络是指不管pod创建在那个名称空间下,都可以被其他名称空间下pod访问到;如果我们想要限制对应名称空间下的pod被别的名称空间或外部客户端访问,我们可以在对应名称空间下创建NetworkPolicy资源;该资源可以限制哪些pod可以被外部客户端访问,或者哪些pod不能够被哪个或哪些名称空间的pod访问;除了能够限制对应名称空间下的pod网络入站流量,它还可以限制对应名称空间下的pod出站的流量,允许或拒绝某个或某些个pod访问别的名称空间下pod或外部某服务等;我们可以简单的理解NetworkPolicy就是对应名称空间的一道防火墙;我们把NetworkPolicy资源创建在对应名称空间下,那么它就能实现对该名称空间下的pod进行流量管控; 阅读全文
摘要:
我们知道在k8s上有三种网络,第一种是宿主机网络,这种网络没有列入容器编排的范畴内,是集群管理员自行维护;第二种网络上service网络,service网络也叫cluster网络,该网络本质上不会在任何网卡上存在,它是借助每个节点上的kube-proxy生成的iptables或ipvs规则,主要用来实现对pod访问的负载均衡,也是各服务间访问的网络;第三种网络就是pod网络,pod网络主要用来pod和pod间通信; 阅读全文
摘要:
k8s的webui是一个插件运行在k8s之上,以pod的方式提供服务;它能够给使用k8s用户提供一个web面板,我们可以基于这个web面板来管理k8s集群;比如创建pod,创建svc,部署应用等等;在部署之前,先说一下dashboard认证过程;dashboard是以pod的形式运行在k8s之上,它本身没有做访问权限认证相关的功能,它只是把用户的认证信息代理到k8s集群上,具体的认证授权还是由k8s的apiserver进行;所以我们登录dashboard必须是k8s上的用户;其次它是一个pod形式把我们的认证信息代理到apiserver上,所以我们登录dashboard的用户必须是一个sa用户,它不支持常规用户; 阅读全文
摘要:
在k8s上准入控制器的模块有很多,其中比较常用的有LimitRanger、ResourceQuota、ServiceAccount、PodSecurityPolicy等等,对于前面三种准入控制器系统默认是启用的,我们只需要定义对应的规则即可;对于PodSecurityPolicy这种准入控制器,系统默认没有启用,如果我们要使用,就必需启用以后,对应规则才会正常生效;这里需要注意一点,对应psp准入控制器,一定要先写好对应的规则,把规则和权限绑定好以后,在启用对应的准入控制器,否则先启用准入控制器,没有对应的规则,默认情况它是拒绝操作,在k8s上没有显式定义规则都是拒绝,这可能导致现有的k8s系统跑的系统级pod无法正常工作;所以对于psp准入控制器要慎用,如果规则和权限做的足够精细,它会给我们的k8s系统安全带来大幅度的提升,反之,可能导致整个k8s系统不可用; 阅读全文
摘要:
在k8s上授权的机制有很多,最常用的有ABAC和RBAC;ABAC(attribute based access control)这种是基于属性做访问控制;RBAC(role based access control)这种是基于角色做访问控制;所谓基于属性做访问控制是指,对k8s上的资源的某种属性做授权,授权给相关用户对该资源的某个属性有什么权限;同样的逻辑基于角色做访问控制就是指把k8s上的资源,授权给对应角色有什么权限;那角色和用户有什么关系呢?对于RBAC授权模型来说,在k8s上用户是没法直接关联资源;它是通过角色对象来实现对资源的授权;用户授权是通过角色绑定对象来关联到对应角色;只要用户绑定到对应角色,那么该用户就拥有绑定角色上的所有权限; 阅读全文
摘要:
用户认证只是验证对应客户端是否是合法客户端,这里的验证的机制是一票通过的机制;所谓一票通过是指在APIserver上有多种验证机制(方法),它会从上至下依次进行验证,如果对应验证方法没有明确拒绝,接着它会用下一个验证方法,直到有一个机制通过以后,余下的就不验证了;比如,在k8s上有证书验证,用户名密码验证,token验证,如果此时有一个客户端拿着一个token来登陆APIserver,此时APIserver就会先用证书验证的方法验证客户端,如果对应验证方法没有明确拒绝,说明此方法不识别对应的客户端信息,接着它会用用户名密码的方法进行验证,如果对应方法也没有明确拒绝,接着它会用token方法进行验证,如果对应方法通过了,那么接下来的其他方法验证就不会再进行下去;如果所有验证方法都没有拒绝,说明该客户端提供的认证信息在k8s上不适配,此时apiserver 就会把对应客户端归纳为匿名用户;当然此类用户虽然登陆到APIserver上,但它没有权限操作资源; 阅读全文
摘要:
简单讲statefulset控制器主要用来在k8s上管理有状态应用pod;我们经常运维的一些应用主要可以分为4类,分别从是否有状态和是否有存储两个维度去描述,我们可以将应用分为有状态无存储,有状态有存储,无状态无存储和无状态有存储这四种;大部份应用都是有状态有存储或无状态无存储的应用,只有少数应用是有状态无存储或无状态有存储; 阅读全文
摘要:
在k8s上一切皆对象,我们需要把对应的配置信息通过对应资源初始化为一个对象,然后通过pod调用对应的对象,从而实现向pod里的容器提供配置,这种能够把配置信息初始化为一个对象并被pod所调用的资源有两个,分别是configmap和secret;configmap和secret资源都是用来向pod提供配置信息的资源,两者用法都很相似,唯一不同的是configmap主要用于提供非敏感配置的资源,secret主要用来提供敏感配置的资源;简单讲就是configmap不加密,secret要对敏感配置做加密处理(严格上不叫加密,它是把对应敏感数据做base64编码处理); 阅读全文
摘要:
volume的基础使用,需要我们用户手动来向不同类型存储接口传递不同的参数,从而实现把外部存储映射到k8s上的一个volume对象,使得pod才能正常的挂载对应的存储卷,对应pod里的容器才能正常使用;这种使用方式的前提是用户必须了解对应的存储系统,了解对应类型的存储接口,以及相关参数;这使得用户在k8s上使用存储卷变得有些复杂;为了简化这一过程,在k8s上使用pv和pvc资源来把对应底层存储接口给隐藏了,用户使用存储卷不再关心底层存储系统接口;不管底层是那种类型的存储,用户只需面对一个pvc接口即可; 阅读全文
摘要:
在k8s上pod里可以运行一个或多个容器,运行多个容器,其中一个容器我们叫主容器,其他的容器是用来辅助主容器,我们叫做sidecar;对于pod来说,不管里面运行多少个容器,在最底层都会运行一个pause容器,该容器最主要用来为pod提供基础架构支撑;并且位于同一个pod中的容器都共享pause容器的网络名称空间以及IPC和UTS;这样一来我们要想给pod里的容器提供存储卷,首先要把存储卷关联到pause容器,然后在容器里挂载pause里的存储卷即可; 阅读全文