k8s现在已经成为容器领域事实上的底层基础设施,对docker良好的支持,作为devops流程中的重要一环,使得devops更方便的落地,也使得开发和运维能够更加紧密的协作。
k8s体系架构介绍
k8s是由google研发,是容器的编排工具,其创造性的设计和在google内部大规模的生产应用,同时各大头部公司的大力支持,使得它在容器编排领域占据主导地位。
主要功能:
镜像管理:对image管理像yum对包管理一样,变得简单有效。对组件和应用程序的环境进行集装箱式打包,使用的时候直接拉取镜像,解决了以往令人头疼的环境问题
容器编排:对容器进行统一调度管理,全生命周期的管理维护,同时能够对异常的容器进行自动化维护,大大减轻了运维工程师的负担
高效资源利用:弹性扩缩容技术,能够有效的应对业务系统高低峰场景,低峰期降低容器数量,高峰期扩展容器数量,重要的是这些操作都是自动化完成的
无状态,有状态,存储,网络等良好的支持:底层的基础设施基本上都能够支持,都可以使用k8s管理维护,功能强大到令人咂舌
分享了这么多它强大的功能,我们现在正式来了解它,首先我们先看一下涉及到的体系化的知识点:
主要是一下几个方面:
容器引擎(Docker),镜像仓库(harbor,Nexus),常用资源对象(NameSpace,Pod,service,ingress,label and selector,ConfigMap,Volumes等),控制器(DM,Replicaset,Satefullsate,job,cronjob,HPA等),Dns(Coredns,kubedns),服务发现和负载均衡(ingress,service),安全(Namespace,serviceAccount,RBAC),监控(promethus+grafana) k8s部署(二进制,kubeadmin),数据库(Etcd),配置管理(configMap),包管理(helm),微服务(istio),存储(分布式存储ceph,nfs,volumes等),网络(flanel,calico,Cannel)等
今天我们主要来了解一下基本的知识:生产环境部署架构(自动化部署脚本分享),主要的资源对象以及资源对象间的关系等,(总体知识结构梳理顺后,后面会对整体的架构进行落地最佳实践)
生产环境部署架构:三个Master节点+多个Node节点组成高可用k8s集群
三个Master节点前面通过负责均衡软件提供客户端的唯一访问入口

现在我们从客户端的视角来看,流量如何访问到后端的k8s服务上
下面来了解pod,容器,Node之间的关系,pod定义好之后会被k8s调度到不同的Node节点上

这里有个巧妙的设计:不同的pod之间通过标签选择器Selector来组成逻辑上的应用集群,如下虚线红圈部分就组成了一个应用集群

同时pod中的容器是无法被外部访问到的,需要通过服务来暴露,就是下图中的Service,然后通过Deployment这个控制器来总体控制运行时数量
注:这里需要注意的是这个service服务也只能是被k8s集群内部访问,想要对集群外部客户端访问,需要部署nginx-ingress-controller组件来做反向代理服务,同时需要定义ingress来告诉nginx-ingress-controller对流量的转发规则
*注:另外k8s中都是以namespace来进行整体资源隔离的 *

我们把专注点切回到pod,pod是k8s中非常重要的一个概念,pod定义了所有容器运行的环境变量,比如挂在的Volume规则,相关的Event信息,网络信息,Endpoint等,pod都会被分配到一个ip地址

最后来聊一聊ConfigMap,pod太多会导致一个问题,就是Docker中的配置如何进行管理维护,k8s给我们提供了非常好的解决方案:将配置集中化管理,然后通过挂载的方式挂载到各个容器中,真是绝妙的设计!

k8s部署架构落地
k8s安装部署异常复杂,安装前需要进行一系列的前置检查:网络,cpu,内存,需要关闭iptable,swap,安装ipvs,docker等,我这里有一键自动化检查部署脚本,欢迎关注我,我可以后台把脚本提供给需要的朋友
同时我安装了kubernetesui/dashboard,统一管理k8s的UI控制台 以便更好的管理k8s的对象资源:

首先我在这个k8s集群上各创建了一个pod:wordpress,mysql 然后创建对应的deployment控制器来控制这两个pod的副本数量。
其次创建了一个wordpress服务,来提供集群内部对外暴露服务,为了能够让k8s集群外部的客户端用户能够访问到我的pod资源我还需要创建nginx-ingress-controller和ingress规则资源定义
总体个人感受:
-
最终一个最基础的分布式架构wordpress博客系统就落地搭建好了,跟以往传统的分布式架构方式进行比较发现,容器确实大大的提高了底层基础设施的交付效率,像wordpress mysql这种服务直接拉取image就可以了,开箱即用。
-
k8s还提供了一整套周边的生态,比如镜像管理,监控管理,日志管理,配置管理等,整个体系非常的成熟完善,云原生是未来至少十几年数据中心基础架构的的底层操作系统,在企业中扮演者越来越重要的角色,我们作为从业者,学好它也是非常必要的。
(文末福利:受限于文章篇幅,文中并没有把创建pod,deployment,service的yaml文件贴出来,有需要的朋友可以在后台留言,我整理好后发给你们)
原文始发于微信公众号(云计算解决方案架构师):k8s体系架构介绍
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/225692.html