2019独角兽企业重金招聘Python工程师标准>>>
毫无疑问,Kubernetes在2018年是个丰收年,不仅本身取得了重大的进步,也让使用它的人获益匪浅。
2018年,我跟随着Kubernetes社区,将其升级到了1.13.2版本,推动将GIS服务器第一次迁移到Kubernetes集群化云原生架构,构建了超过400TB的分布式存储系统,实现了在Kubernetes集群中基于GPU进行机器学习,尝试了将PostgreSQL数据库下多节点集群运行到自动伸缩的容器集群中,这一切是不是很酷?
Kubernetes在2018年的进展可谓飞速,趁着岁末年初来将干过的事好好盘点一下(有些是以前版本就支持的,觉得好用,就旧事重提一下)。Kubernetes相关的项目已经非常之多,下面分为特征、生态、应用、方案四个方面来总结,涵盖软件“从摇篮到坟墓”的全部生命周期及其管理。
1、特征
细节上的改进是很多的,我觉得重要的有这么几个:
- 支持Docker CE最新版本18.09.1了,不再出现告警信息。这个对Nvidia-docker2的GPU支持很重要,因为其最新版本需要比较新的Docker ce版本。
- GPU全面支持Nvidia和AMD的图形卡,支持GPGPU计算。很多人想用Kubernetes来管理机器学习平台,现在都没有问题了。
- Kubernetes中调度GPU资源
- Kubernetes集群升级NVidia GPU驱动版本
- CoreDNS成为内置特征和默认选项,不再需要指定 --feature-gate 参数来进行安装,目前看运行还是比较稳定的。
- Kubeadm安装已经比较成熟了,不再像以前,装完了还要去改kubelet服务的启动参数才能正常运行起来。
- Kubeadm支持自我升级,可以使用kubeadm upgrade plan来进行升级状态检测和获取升级命令,升级版本方便多了。
- 可以离线部署,不算是kubernetes的特征,但这个很重要啊!幸好不需要在运行时去访问外部网络,否则就真没法玩起来了。不过,也还是需要一些设置的技巧,才能愉快地玩耍。
- Kubernetes的离线部署(Ubuntu)方法试验
- Kubernetes镜像的离线保存和载入(非常快)
- 容器存储接口(CSI)是一个非常好的存储抽象,虽然刚开始理解起来和使用都有点繁琐。通过pv/pvc/StorageClass的概念体系,提供了一个比较好的可迁移存储的机制。不过,要想真正实现多节点无差别访问存储(从而可迁移),还得使用分布式网络存储,不仅高速网络是必需的,而且维护和管理的难度和工作量也是不小的。
- Kubernetes存储系统介绍及机制实现
- 基于Kubernetes的容器存储系统
- Master节点高可用,目前还没有内置支持。费一些周折配置上去还是没有问题的,这得益于Kubernetes的平面化、可配置的架构。这需要配置etcd多节点集群(3个以上,建议5个),设置api-server的keep-alived服务实现IP地址故障转移,在多个备份Master的进行kube-control-manager、kube-schedule服务设置等操作。如果需要在备份Master操作kubectl,还需要进行相应的k8s服务API连接参数设置。最后,尽管已经有了多节点的容错机制,还是强烈建议对集群数据定期备份到集群外部存储。
- Kubernetes集群高可用的策略和实践
- Kubernetes集群的主节点备份与恢复
- Kubernetes探秘-多master节点容错部署
- Kubernetes集群多Master容错实战技巧
- Keepalived快速使用(Ubuntu18.04)
- Kubernetes探秘-etcd节点和实例扩容
- Kubernetes探秘—etcd状态数据及其备份
- DinD(Docker in Docker)支持,可以将Kubernetes整个集群主控程序全部装入到一个Docker容器镜像之中,部署起来就会非常方便。主要用于特殊场合,比如LinuxKit和测试。根据我目前测试的情况来看,这种部署模式的问题还是不少,需要大力改进,目前难以在生产级系统中实用。
有了上面这些东东,一个生产级的容器集群貌似已经可以跑起来了。
2、生态
不过,随着容器应用的深入,你可能会发现还需要很多很多其它的东西,因为我们想干得更好。CNCF和Kubernetes社区里有相同想法的人是很多的,大家开始鲁起袖子加油干,搞出了一个大的生态系统出来,涵盖代码管理、持续交付、运维监控、存储与服务等方方面面(参考:《快速建立Kubernetes集群,从零开始》 、《Kubernetes知识体系-从入门到精通 》)。
- OpenLDAP企业级身份认证管理,开源的免费实现。
- https://www.oschina.net/p/openldap
- Redmine项目管理、需求管理与缺陷跟踪工具。
- https://www.oschina.net/p/redmine
- GitLab代码仓库服务器,主要用于管理源代码、配置参数等。可以部署在Kubernetes内部,支持基于Git的版本管理操作,也支持持续集成和容器交付。适合中大型规模的系统和部署运维团队使用。
- 基于Kubernetes的持续交付平台
- Kubernetes代码仓库-GitLab的Helm部署
- GitLab-软件项目管理和代码托管平台
- Nexus组件仓库服务器,支持基于Maven构建的Java组件库和Docker容器镜像的一体化管理,为应用构建、容器交付等提供后台支持,适合小型的以开发为主(而非部署、运维)的团队。
- Docker镜像仓库服务-Nexus
- Jenkins X持续交付服务器,是Jenkins的扩展版,主要用于构建和交付流程,支持容器的构建和交付,是经典的持续集成平台。如果持续集成任务不是很复杂和繁重,也可以使用GitLab的内置构建服务来完成。
- Kubernetes持续交付-Jenkins X的Helm部署
- Harbor容器镜像服务器,已经成为云原生基金会的孵化项目。随着容器集群的建立,节点数会越来越多,容器镜像的安装和更新也会更加频繁,而且为了定制化和安全性管理需要,往往需要在内部网上存储和共享专属的镜像及其多个版本,这时就需要使用Harbor或者Nexus之类的软件来建立自己的专属容器镜像服务了。
- 在Kubernetes集群上部署高可用Harbor镜像仓库
- Harbor最新进展,将由CNCF管理
- Docker镜像仓库服务-Nexus
- Helm集群应用包管理(https://github.com/helm/helm),提供chart模板来快速地在kubernetes集群中部署应用,往往会包含多种资源(权限、pod、容器、服务等)。跟传统的软件安装相比,可以一次性安装所有需要的软件、资源文件和模板化的设置。已经有大量的chart库可供选择(不过,有的版本比较老一些,可能有一些问题或者不是最优部署方案,可以去查看相应软件的最新源码库)。
- Helm 容器应用包管理工具安装记录
- Monocular-GUI for Helm Charts with Kubernetes
- chart模板库,https://github.com/helm/charts
- Ksonnet使用模块化脚本进行Kubernetes应用管理,可以定制和添加多种模块,通过命令保持与Kubernetes集群的应用状态的同步,以及将其部署到多种支持云原生的云计算中心。Kubeflow机器学习框架使用Ksonnet作为部署方案。
- ksonnet 使用教程
- Kubeflow更新升级到0.4.1
- GitOps使用Git进行Kubernetes应用管理。
- GitOps — Git Push 一切
- GitOps实操工具-Flux安装与设置
- GitOps实操工具-Flux简介
- GitOps——像代码一样管理Istio配置
- Kubernetes Python API快速入门
- 使用freshpod实现Kubernetes容器的快速迭代
- MetalLB是一个负载均衡服务,解决Kubernetes中服务的外部访问问题。因为service缺省是内部地址,需要通过proxy映射或者NodePort来让外部访问,使用麻烦或者端口范围有限制;或者通过Ingress来映射为访问目录。这与云计算中心的机制不太一样,MetalLB可以提供与云计算中心类似的负载均衡IP服务,方便于将应用与云中心的互迁移。
- 为私有Kubernetes集群创建LoadBalancer服务
- Ingress访问入口服务,提供单一端口http/https服务的路径到Kubernetes Service的映射访问。Kubernetes Service的其他外部访问方法包括:LoadBalancer提供IP地址映射,NodePort提供端口映射,Proxy提供独立的服务代理。而Ingress相当于一个入口服务器,目前有Nginx等多种实现机制,支持基本的访问路由和反向代理功能。更复杂的服务管理和交换需要通过Istio和LinkerD等服务网格组件来实现。
- Kubernetes负载均衡器-Nginx ingress安装
- Kubernetes dashboard 通过 Ingress 提供HTTPS访问
- 容器存储接口-CSI,提供了pv(物理存储卷)/pvc(物理存储卷请求)/StorageClass(存储类)的抽象存储接口,从而可以将多个来自于不同存储厂商的多种存储系统能够统一使用,并提供兼容的可迁移性,使得容器pod在多个节点间漂移时仍然可以访问到相应的存储,实现物理存储设备的无关性。CSI使开发和使用存储系统都更为容易。
- Kubernetes存储系统介绍及机制实现
- 基于Kubernetes的容器存储系统
- Kubernetes存储之Persistent Volumes简介
- Kubernetes volumes简介
- NFS网络存储服务
- Kubernetes搭建NFS原生服务
- Kubernetes存储系统-NFS Server的Helm部署
- kunbernetes存储系统-基于NFS的PV服务
- GlusterFS的客户端访问和NFS设置
- Ubuntu 18.04+JupyterHub的NFS服务 Bug 修复
- Kubernetes NFS存储服务的误报
- Ceph分布式存储系统,支持块存储、对象存储和文件存储,最新的Rook为专门用于Kubernetes的版本,并且作了相应的安装和运行优化。从个人经验来说,Ceph的安装尚算是比较简单,运行也比较稳定,但是一旦出了问题,查错、排错和恢复的难度还是比较大的,适合对Ceph管理有经验的用户使用。
- Kubernetes中用Helm安装Ceph存储服务
- Rook-Ceph 分布式存储系统快速部署
- Rook 0.8 安装及Dashboard的问题和解决
- GlusterFS分布式存储系统,支持分布式文件存储,具有条带化、多副本、纠错码等多种存储模式。与磁盘阵列的很多概念比较类似,可以独立部署,查错和恢复的命令比较简单易用。目前GlusterFS分为1X和2X两个系列。主要分发版是1x系列,1x版本GlusterFS通过Heketi在Kubernetes中部署,要求独占的磁盘设备。2x计划原生支持kubernetes,不过目前正在开发之中,暂时还不可用。我目前将GlusterFS与ZFS配合使用,不过ZFS在Linux 5.0内核上出现兼容性问题,需要寻找新的解决方案,也出现过ZFS的zpool存储池丢失,导致GlusterFS节点出现不可用的情况,后来通过GlusterFS的自愈操作进行了修复。
- GlusterFS-Kubernetes云原生存储
- Kubernetes中挂载GlusterFS的volume
- GlusterFS: 访问权限设置
- GlusterFS-创建和设置分布式存储卷
- 分布式存储系统GlusterFS最新版本安装
- 向分布式存储系统的迁移-使用ZFS/Gluster
- GlusterFS的客户端访问和NFS设置
- 通过GlusterFS黏合多节点SSD剩余空间
- GlusterFS-动态卷快速应用
- GlusterFS强制删除节点
- GlusterFS的再次节点重置和恢复
- GlusterFS的一次节点重置和恢复
- ZFS存储池zpool丢失恢复及Gluster卷自愈
- LinuxKit(https://github.com/linuxkit)是将Linux全部容器化和使用Kubernetes进行操作系统级别的服务管理的超前的尝试,该项目还处于早期阶段。与之类似的还有DC/OS,CoreOS等操作系统,是将容器和Kubernetes内置到操作系统的尝试,目前已经有一定的使用量。
- KubeVirt插件可以对虚拟机像容器一样的进行管理,在某些情况下有些特殊的作用。正常情况下,虚拟机是作为节点进行管理的,里面可以运行多个容器和Kubernetes的pod。
- Kubernetes上进行虚拟机管理插件-KubeVirt
- Prometheus集群度量系统,提供各种监测指标用于集群的运维,已经是CNCF毕业的项目。
- 使用Prometheus监控kubernetes集群
- Kubernetes运行监控-使用Helm快速部署Prometheus和Grafana
- Kubernetes Python API快速入门
- Using the Worldmap Panel with Prometheus
- Grafana集群状态可视化系统,可以对对多种来源的数据提供可定制的可视化面板,具有多种面向Prometheus数据源的Kubernetes集群可视化面板。
- 使用Prometheus监控kubernetes集群
- Kubernetes运行监控-使用Helm快速部署Prometheus和Grafana
- Istio服务网格。从单机的Web服务到Nginx反向代理作负载均衡,再到企业级的服务总线实现服务注册、服务调度、服务路由、服务治理,服务网格(S而vice Mesh)提供了一个容器和微服务时代的新型服务架构,有助于解决大型系统日益复杂的问题,满足可靠性、可度量性、可伸缩性、可测试性、可管理性等要求越来越高的需求。
- 基于Kubernetes的服务网格系统
- Istio 是什么?
- Service Mesh-Istio安装与使用
- Istio-通过Helm快速安装
- Istio 1.0快速安装到Kubernetes集群
- Istio 0.8 的 Helm Chart 解析
- Istio 流量管理
- 服务网格Istio管理面板-Naftis
- GitOps——像代码一样管理Istio配置
- Istio Service Mesh 教程
- What Service Meshes Mean for Enterprise Security
- kubefed联邦管理kubernetes集群,可以将多个Kubernetes集群连接为一个集群进行管理和调度,使用一致的Kubectl工具进行管理。生产级环境往往会有多个Kubernetes集群,kubefed有助于大规模多集群的统一管理和分区治理,有助于提高整体系统的可靠性和可用性。
- 使用 kubefed 建立 Kubernetes Federation
- Kubernetes 多集群管理平台-wayne
- OpenShift(https://www.openshift.com/)是Redhat的Kubernetes分发版,模块和架构与Kubernetes是一致的,但是操作命令有较大的差别。因此,与Kubernetes的控制脚本是不兼容的,如果要作集群的自动化操作,二者会有兼容性的问题。
3、应用
- JupyterHub是面向大数据交互探索的Notebook运行框架,JupyterLab是其升级版界面。
- JupyterHub on Kubernetes--部署指南
- JupyterHub on Kubernetes--项目简介
- JupyterHub on Kubernetes-- Helm Chart简介
- JupyterHub on Kubernetes部署与应用指南
- JupyterHub on Kubernetes-Helm安装
- JupyterHub on Kubernetes-容器存储
- Ubuntu 18.04+JupyterHub的NFS服务 Bug 修复
- Jupyter Hub on Kubernetes Part II: NFS
- JupyterHub on Kubernetes--定制用户环境
- 为JupyterHub自定义Notebook Images
- JupyterHub on Kubernetes绘图支持软件
- JupyterLab安装地图插件
- BinderHub 使用简介
- BinderHub 安装指南
- Databook-数据之书
- Ubuntu上使用Repo2Docker
- 基于Docker+Jupyter+Python的科学计算环境
- Jupyter Notebook Python, Scala, R, Spark, Mesos
- KubeFlow是面向Kubernetes集群基础设施的机器学习服务组件,kubeflow采用ksonnet进行软件包管理和部署。
- Kubeflow更新升级到0.4.1
- Kubeflow 使用指南
- Kubeflow 快速入门
- Kubeflow-机器学习工作流框架
- Kubeflow等镜像部署到集群多节点
- Kubeflow镜像的快速下载(V0.3.3)
- 为JupyterHub自定义Notebook Images
- MLFlow是Databrick为机器学习开发的框架,可以用于多种运行环境。
- Spark机器学习工具链-MLflow简介
- Spark机器学习工具链-MLflow使用教程
- Jupyter on Kubernetes机器学习-MLFlow
- Spark是基于分布式内存的并行计算系统,可以部署于Kubernetes集群环境,从而简化运行。
-
Apache Spark on Kubernetes
-
Notebook Workflows: The Easiest Way to Implement Apache Spark Pipelines
- Spark运行环境的安装
- Spark的Python编程-初步入门
- Spark的GPU支持方法研究
- Spark上的深度学习流水线
- 分布式机器学习框架-TensorFlow on Spark(英)
- 分布式机器学习框架-CaffeOnSpark
- Spark GraphX 编程指南
- Spark SQL和DataFrame指南[中]
- park for Spatial,相关资源
-
- AirFlow数据处理工作流程软件,可以用于JupyerHub中,IPython Notebook,Python或者Kubernetes集群中。
- Airflow on Kubernetes
- AirFlow-Tutorial
- AirFlow-Install
- Airflow on Kubernetes (Part 1): A Different Kind of Operator
- SuperMap是一个先进的GIS软件体系,通过云端一体化GIS技术将GIS与容器技术、Kubernetes集群技术融为一体,是第一个支持云原生架构的商业级GIS平台。通过iManager来管理部署到Kubernetes集群中的GIS服务器实例,提供云原生级别的微服务部署,从而提供混合云架构的专业GIS服务。
- PostgreSQL是一个开源的SQL服务器,社区开发了多种插件(包括PostGIS处理空间数据的插件)。裸机可以单机部署或者使用PostgreSQL XL的集群方案,但是实例无法自动迁移和扩容。通过Kubernetes部署的方案有Patroni、Crunchy、Stolon等,可以实现实例的扩容、自动迁移等特性。
- PostgreSQL的集群化和容器化部署
- Kubernetes部署高可用PostgreSQL集群
- Kubernetes快速部署高可用PostgreSQL
- Kubernetes上PostgreSQL集群的管理
- PostgreSQL的高可用与数据复制方案
- Kubernetes部署PostgreSQL集群,使用StatefulSets
- Patroni: A Template for PostgreSQL HA with ZooKeeper, etcd or Consul
4、方案
Kubernetes让任何规模的企业都能运行基于容器集群的云服务数据中心,而且与大型的云计算服务提供商的容器实例整合起来,使软件“一次开发、到处部署”真正成为可能,从而减少了开发和运维的复杂性。因此,Kubernetes几乎受到所有不同规模、不同行业的软件开发者和数据中心管理者的推崇,发展非常迅速。
迄今为止,几乎所有的大型数据中心都已经支持Kubernetes。其中,Amazon和阿里云都推出了能与云上协同的本地服务系统,从而构成混合云解决方案。
中国的几家传统云计算服务商已经全部支持容器和Kubernetes技术,华为、浪潮等计算机制造和集成商也推出了各种基于Kubernetes的私有云方案,还出现了一大批完全基于容器的云服务厂商(如七牛、青云等),同时提供托管服务和应用服务。企业内部构建混合云的技术准备已经基本就绪,云原生即将迎来一个全新的时代。
Kubernetes发展非常迅速,社区的新创意还在不断地萌芽,再过一年回头来看,又会有全新的风景。2018年,就此别过!