kubernetes 简单入门(多图少字版)
概念介绍
概念 - master
k8s集群的节点分为两类:master和node,master负责管理集群,各node节点实际运行你的应用项目。
master包含api server、controller manager、scheduler三个组件,具体功能请看图。
概念 - node
node节点包含kubelet、kube proxy两个组件,具体功能请看图。
概念 - pod
在node节点中,实际上是由各个pod负责装载你的程序,一个pod内可以运行一个或多个程序,我目前还没用到过运行多个程序的情况。
综上,我们可以得到一个大概的结构示意图,在下面:
概念 - RC
Replication Controller,简称RC,用于控制pod,包括pod创建、pod数量、运行时一些参数等等,比如,我想要运行一个tomcat,那么tomcat的docker仓库地址、tomcat实例数量、对外暴露的端口都可以配置在RC里。虽然以后我们会使用deployment来代替RC,但是它们的配置项都是十分相似的。稍后会介绍RC配置文件示例。
概念 - service
service负责把你的pod暴露成服务,service向后连接各个pod,向前暴露服务访问地址。而且k8s的内部负载也在这里,如果有多个pod(也就是你的一个程序部署了多实例),那么service负责负载到各个pod上。
(网络图,侵删)
概念 - Label、Label Selector
(网络图,侵删)
k8s的一些配置文件,比如service的配置文件和RC的配置文件,是通过label标签对应上的,比如我的RC配置文件里赋值了一个label名字,那么service的配置文件里通过selector标签的名字,就可以和这个RC对应上,进而为RC创建出的pod暴露对外的服务。
概念 - yaml文件
上面所说的配置文件,其实都是yaml文件格式的,这里列举两个yaml文件示例,一个是RC的,一个是service的
kind标签表示当前yaml文件是哪种类型,labels标签负责让service找到RC。
其中RC的yaml文件中:
replicas代表副本数量(pod数量),image代表镜像的docker仓库地址,containerPort是容器内程序的端口。
service的yaml文件中:
type代表service的类型,这里是NodePort,可以通过节点机器ip+nodePort的端口号去访问这个服务,这是对外暴露服务的一种方式,很方便进行调试(后期我们就不再用这种方式了,而是使用ingress方式对外暴露服务)。port代表这个service对外暴露的端口,注意仅适用于集群内部访问,比如你在另一个pod中的程序想访问这个service时,可以通过servicename(在图里也就是tomcat-master):port就可以直接访问这个服务了。targetPort对应RC里的containerPort。
架构
(网络图,侵删)
架构不作过多介绍了,一目了然。
服务发现与负载均衡
分为集群内部和集群外部两个部分,集群内部的服务发现和负载由k8s全权代理,也就是kube-proxy组件做的事情,我们只负责创建pod就行了。
集群外部的服务发现和负载,有好几个选择,其中nodePort和ingress方式前面已经提到了,还有一种LoadBalancer方式是直接与运营商的负载均衡地址绑定来实现的。
我们前期用的nodePort方式,通过自己的负载均衡去配置转发到各个nodePort,当然集群规模变大后,这种方式是注定要被替换的,缺点比如节点机器有变动时,同时需要修改负载转发的后端服务器列表,还有nodePort端口过多难以维护等。所以生产环境使用了ingress方式去暴露服务,只需要将自己的负载转发到ingress对应的nginx-ingress的那几台节点机器就可以了,也不用操心nodePort过多的问题了。ingress在这里先不做介绍了。
集群安全机制、网络互通
可以为集群添加证书来提升集群安全性,这也是生产环境必做的。其他方面比如通过secret保存机密信息等,我用的不多,没做过多研究。
上线部署 - deployment
deployment和RC相比,yaml文件的写法十分类似,功能上比RC多一些升级相关小功能,deployment是生产环境常用的工具。
虽然看起来比RC多了好几个功能,但是在实际使用中也不常用到这些小功能,上线只需要修改镜像版本号就好了。
集成插件展示
k8s有很多集成插件,让你的集群更直观的显示、更方便的去运维。
控制台 - dashboard
可以在这上面去操作你的集群,属于必装型。使用不是特别方便,但也没有其他的。
性能监控 - cadvisor+influxDB+grafana
这是grafana的页面,最终展示层,我简单的配置了几个指标。其实为了性能监控,装了三个组件,是比较麻烦的。而且最主要的原因是:用不上。现在我用的都是直接监控节点机器的,不能监控各个容器里的资源情况。
日志监控 - kibana
kibana是展示层,数据是从elasticSearch来的,也就是说也要装一个es,再装一个kibana。
kibana不光能查看并搜索日志,还能按照你设定的日志规则去生成图表,但是数据来源都是es收集上来的日志,图表可以用来做一些统计。但是这个日志检索,可能是我不会用,简直是一塌糊涂。
kubernetes的简单介绍就到这里,看再多也不如动手试一试,动手试了,才知道有些看起来很复杂的东西,其实很鸡肋的。
版权声明: 本文为 InfoQ 作者【绿星雪碧】的原创文章。
原文链接:【http://xie.infoq.cn/article/0ac0560fde5b31033a2395689】。文章转载请联系作者。
评论