Kubernetes-2018干货盘点

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

毫无疑问,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/OSCoreOS等操作系统,是将容器和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年,就此别过!

转载于:https://my.oschina.net/u/2306127/blog/3005413

你可能感兴趣的:(Kubernetes-2018干货盘点)