本系列是带着目的来的,所以固然会有所取舍。重理论与概念,轻实操。

再战 k8s(1):k8s 概述_容器

1、kubernetes 基本介绍

默认学习 k8s 的同学是有 docker 基础的。所以我就不对 docker 已有优势做过多阐述。

Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、 应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。 在 Kubernetes 中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。


2、kubernetes 功能和架构

Kubernetes 积累了作为 Google 生产环境运行工作负载 15 年的经验,并吸收了来自于社区的最佳想法和实践。

K8s 功能:

(1)自动装箱。基于容器对应用运行环境的资源配置要求自动部署应用容器
(2)自我修复(自愈能力)。当容器失败时,会对容器进行重启。当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度。当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
(3)水平扩展。通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁
(4)服务发现。用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和负载均衡。
(5)滚动更新。可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新。
(6)版本回退。可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
(6)密钥和配置管理。在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。
(7)存储编排。自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要。存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
(8)批处理。提供一次性任务,定时任务;满足批量数据处理和分析的场景。


应用部署架构分类

(1) 无中心节点架构 GlusterFS
(2) 有中心节点架构 HDFS、K8S


k8s 集群架构

再战 k8s(1):k8s 概述_docker_02

Kubernetes主要由以下几个核心组件组成:

  • etcd保存了整个集群的状态;
  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns负责为整个集群提供DNS服务
  • Ingress Controller为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询

3、docker 和 k8s 之间的关系

Docker和Kubernetes不是直接竞争对手。正如我们所知,讨论应该更多地针对“Kubernetes vs Docker Swarm”。

Kubernetes是一个容器编排解决方案。当开发人员在开发环境中处理少量容器时,管理服务并不是什么大问题。但是,当应用程序部署到生产环境并且有数百或数千个容器和服务时,管理任务变得复杂。Kubernetes简化了大规模部署的容器管理问题。

在Kubernetes环境中,开发人员使用pod的概念创建他们的应用程序。Pod是集群在一起的容器,就像单个单元一样工作。这些pod已部署到Kubernetes主节点以及配置要求,如pod数和网络设置。主节点管理工作节点。在部署pod之后,主节点负责跟踪容器。Kubernetes使生产团队易于进行容器管理和编排。

从上面的讨论中可以看出,Docker容器是使用Kubernetes管理的。

这两种技术在今天的软件环境中都扮演着重要的角色。Docker 容器改进了开发过程,Kubernetes 容器编排改进了部署过程。DevOps团队可以利用这些技术的强大功能构建更强大的持续集成和持续交付(CI/CD)管道,以实现更快,更可靠的软件开发周期。


4、Docker和Kubernetes的主要趋势

管理Docker和Kubernetes环境的DevOps团队应该关注这些关键趋势:

微服务的使用:微服务架构是容器使用兴起的主要原因之一。在这种架构中,应用程序被分解为更小的独立服务。容器非常适合在生产环境中支持这些类型的应用程序。因此,期望支持更多使用 Docker 和 Kubernetes 的基于微服务的应用程序。

多云环境的增加:企业越来越担心使用单云解决方案。因此,他们正在寻求多云环境以获得更多选择并减少对单个供应商的依赖。这意味着 DevOps 团队必须具备在多云环境中运行 Docker 和 Kubernetes 所需的技能,这将带来新的挑战。

对 Docker 和 Kubernetes 的支持越来越多:Docker 和 Kubernetes 都拥有强大的社区。Docker Hub 拥有一个活跃的用户群,可以定期更新各种应用程序的镜像。Kubernetes 也得到了开源社区和亚马逊,谷歌,微软和 IBM 等大公司的大力支持。所以 Docker 和 Kubernetes 将在企业和小企业中变得更加普遍。