阿里云容器K8s入门训练营:阿里云容器服务K8s基础入门(一)
阿里云容器服务K8s基础入门(一)
内容介绍:
一、Kubernetes的基本认知
二、K8S的核心概念
三、K8S的核心架构
四、K8S的工作和使用流程
五、K8S的使用场景
六、容器服务ACK介绍
七、serverless 容器
八、ASK操作实践
大家好我是阿里云范群老师,本次课程将带大家了解阿里云容器服务 Kubernetes的基础入门。
在学完本次课程之后,希望能够带大家学习到 Kubernetes 的基本概念,Kubernetes的使用,应用场景及作用,带大家熟悉阿里云的容器服务库Kubernetes ACK 以及它的无服务器 Serverless Kubernetes(ASK),让大家能够了解到这些产品它的特点和优势,以及它的操作方式,使用方式。最后就是要带大家了解到阿里云容器服务Kubernetes相关应用场景。
一、Kubernetes的基本认知
我们想要了解为什么要使用Kubernetes,就需要从容器技术开始,这里所讲的随着容器技术的快速成熟与推广,因为它解决了很多的问题,也使工作变得流畅,由于它自包含和可移植的特性,开发人员把容器创建之后,代码在其中进行开发,之后可以部署在数据中心、云环境或者其他环境当中。
容器的管理和编排遇到了困难,容器好用是好用,但是管理起来比较困难,可以想象就算咱们去使用虚拟机,现在已经有很多成熟的云平台,一些云平台可以让虚拟机进行故障迁移、宕机恢复、弹性伸缩等功能。
但是对于容器,它在一开始它只是一个单独的个体,在很多方面它并不是很成熟,在这里讲在生产环境当中会涉及到多个容器,很多的容器,这个时候容器需要跨多个服务器主机进行部署。一旦容器多了之后,就需要有怎样分组管理,那么分组管理可能需要什么,要涉及到网络安全监控还有存储等,都需要进一个全方位的分化。
所以一旦容器多了之后,就会出现各种各样的问题,就需要有一个类似于管理系统的工具出现来管理这些容器,并且还需要能够发挥出容器的最大特点,最大性能,于是就有了容器编排技术。
容器编排它就是将多个容器组织,然后按照一定的规则和策略进行部署,调度、伸缩等,而且还可以自动化的容器部署管理,扩展、联网,而且管理的数量可以达到成百上千个,为企业提供便利。
第一个大规模的容器自动化部署,它可以通过容器编排工具将多个容器组成的应用,然后一键的部署到容器集群当中,这样就会很方便,不需要有很复杂的操作。
第二个,敏捷高效的资源调度,因为容器它还是需要有一个计算资源的落脚点,也就是我们所谓的节点,如果我们可以通过多个节点组成一个集群,那么这个集群里面可能会有非常多的节点,即有非常多的这种云服务器 CS 或者是物理的服务器。
我们可以通过容器编排的技术来实现最高效率的调用。强大的弹性伸缩能力,它可以根据当前的负载情况,然后自动的去调整容器的数量,你负载高,多用点容器,负载低,少用点容器,治愈能力就是当一个容器挂掉,能够立马进行发现,然后自动的去重启和替换。
还有一个自动化的服务发现,就是可以自动注册和发现服务,所以总的容器编排工具它就是一个伪容器,提供一种高效的可靠的管理方式,所以我们可以看到这里一张图,我们容器就相当于集装箱,我们的这一个容器编排就相当于这一个货轮来管理调度容器,管理调度集装箱。
K8S它显然就是一个容器编排的技术,而 Kubernetes 它现在已经成为了在容器编排上的事实标准。
Kubernetes它是由谷歌开源和设计的一个编排引擎,大家可以看它的标志是一个船渡,是以相当于是一个用来管理和部署的容器的平台,容器既然是集装箱,那我就是什么船渡用来管理你的,然后 Kubernetes,它有时候会被称为K8S,因为在 k 和 s 之间它有 8 个字母,因为Kubernetes这个名词比较难念,所以大家简把它简化的念成K8S。
然后右边展示了它的一些核心功能,讲容器发现与负载均衡、容器的自动装箱存储、编排,自动化的容器恢复等这些功能,都是在这一个对于容器的编排和管理。
所以我们讲K8S它是一个自动化的容器编排平台,它可以负责应用的部署,应用的弹性以及应用的管理,这些都是基于容器。
二、K8S的核心概念
我们首先来学习它的第一个核心概念-Pod。
在 K8S 当中,容器是不能够单独存在的,而是要通过 Pod 这个最小的部署单元来进行管理。
因为 K8S 是一个集群的管理平台,还要管理多个容器实例,然后要为他们提供网络存储等。而容器它们之间需不需要相互通信,容器与容器之间它们需不需要共享,存储需要,所以这个时候就有了一个Pod,它相当于是一个容器组的一个概念。
pod它的单词翻译过来是一个豌豆荚,相当于说这个容器是豌豆,pod是这个豌豆荚,有了这样的一层关系之后,pod是不是就可以为每个容器提供访问同一个 IP 地址或者端口,然后也能够让他们共挂载一个共享的数据卷,让他们实现数据的共享,再者就是容器我们在 k8s 上面部署时,为了它的一个性能或者弹性伸缩容性,你们最好是去跑一个单进程,而我们一个应用,比如你一个最简单 hello world,可能有多个函数构成,什么 min 函数,什么函数式的所谓是,所以我们是不是可以将一个应用变为一个Pod,然后在应用上面的不同进程,我们用不同的容器来封装,这样也方便去这种弹音伸缩、扩展性能之类的。
所以这里讲 Pod 的定义就是最小的调度及资源单位,由一个或者多个容器组成,可以定义容器的运行方式,提供给容器共享的运行环境。
我们来看第二个概念,deployment。
在 K8S 当中, deployment 它是一种资源对象,也是部署应用和管理应用的一种方式,它可以去定义这个 Pod 的数量或者副本的数量。比如你通过这个发布一个deployment,就相当于是写它的一个配置文件,一个节省文件。
你可以定义这个应用要用几个 Pod 这个去运行,可以定义 Pod 数量是 3 个还是 5 个,就相当于你要去部署一个 Web 的服务,这个 Web 服务,我用他们 cat 还是apache。
我这个服务我需要用两台虚拟机还是三台虚拟机,也就是它相当于是一个命令,这个命令的集合体,它将很多命令集合在一个节省文件当中,然后就可以去操做很多的事情。
所以我们这里讲它可以什么,定义一种pod的副本数目版本维持数目恢自动恢复,还可以这个控制它的版本进行升级。
在 K8S 当中还有一个核心概念是service,因为我们刚刚讲过一个Pod,它是不是就相当于一个服务器 CS 一样。
而我们在部署应用的时候肯定不能够只用一个Pod,那需要怎么样?需要用多个 Pod 来承载这个应用,保证应用的可靠性和它的一个高性能。
那有这么多的 Pod之后,我们需要有一个负载均衡,也就是反向代理来提供一个统一的入口,或者提供一个流量的分发和负载均衡,所以我们可以通过创建 service 这样的一个负载均衡可以为容器应用提供一个统一的入口地址,因为多个Pod 肯定有多个IP,这个时候我们就有了一个统一的入口 IP,它可以将请求的负载分发到后端的各个的容器应用上面,做一个负载分担。