加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

Docker 到底香不香结局一目了然

发布时间:2021-05-22 13:47:38 所属栏目:教程 来源:互联网
导读:这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 K8s 的基本概念,后面再介绍实践,由浅入深步步为营。 关于 K8s 的基本概念我们将会围绕如下七点展开: Docker 的管理痛点 什么是 K8s? 云架构 云原生 K8s 架构原理 K8s 核心组件 K8s 的服务注册

这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 K8s 的基本概念,后面再介绍实践,由浅入深步步为营。

关于 K8s 的基本概念我们将会围绕如下七点展开:

Docker 的管理痛点

什么是 K8s?

云架构 & 云原生

K8s 架构原理

K8s 核心组件

K8s 的服务注册与发现

关键问题

Docker 的管理痛点

如果想要将 Docker 应用于庞大的业务实现,是存在困难的编排、管理和调度问题。

于是,我们迫切需要一套管理系统,对 Docker 及容器进行更高级更灵活的管理。

Kubernetes 应运而生!Kubernetes,名词源于希腊语,意为「舵手」或「飞行员」。

Google 在 2014 年开源了 Kubernetes 项目,建立在 Google 在大规模运行生产工作负载方面拥有十几年的经验的基础上,结合了社区中最好的想法和实践。

K8s 是 Kubernetes 的缩写,用 8 替代了 「ubernete」,下文我们将使用简称。

什么是 K8s ?

K8s 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

K8s 拥有一个庞大且快速增长的生态系统。K8s 的服务、支持和工具广泛可用。

通过 K8s 我们可以:

快速部署应用

快速扩展应用

无缝对接新的应用功能

节省资源,优化硬件资源的使用

K8s 有如下特点:

可移植:支持公有云,私有云,混合云,多重云 multi-cloud。

可扩展:模块化,插件化,可挂载,可组合。

自动化:自动部署,自动重启,自动复制,自动伸缩/扩展。

云架构 & 云原生

①云和 K8s 是什么关系

云就是使用容器构建的一套服务集群网络,云由很多的大量容器构成。K8s 就是用来管理云中的容器。

②常见几类云架构

常见几类云架构如上图所示:

On-Premises(本地部署)。

IaaS(基础设施即服务):用户:租用(购买|分配权限)云主机,用户不需要考虑网络,DNS,硬件环境方面的问题;运营商:提供网络,存储,DNS,这样服务就叫做基础设施服务。

PaaS(平台即服务):MySQL/ES/MQ/...

SaaS(软件即服务):钉钉,财务管理。

Serverless:无服务,不需要服务器。站在用户的角度考虑问题,用户只需要使用云服务器即可,在云服务器所在的基础环境,软件环境都不需要用户关心。

如果觉得不好理解,推荐阅读这篇文章:如何通俗解释 IaaS、PaaS、SaaS 的区别:

https://www.zhihu.com/question/21641778/answer/62523535 

可以预见:未来服务开发都是 Serverless,企业都构建了自己的私有云环境,或者是使用公有云环境。

③云原生

为了让应用程序(项目,服务软件)都运行在云上的解决方案,这样的方案叫做云原生。

云原生有如下特点:

容器化,所有服务都必须部署在容器中

微服务,Web 服务架构式服务架构

CI/CD

DevOps

K8s 架构原理

①K8s 架构

概括来说 K8s 架构就是一个 Master 对应一群 Node 节点。下面我们来逐一介绍 K8s 架构图中的 Master 和 Node。

Master 节点结构如下:

apiserver 即 K8s 网关,所有的指令请求都必须要经过 apiserver。

Scheduler 调度器,使用调度算法,把请求资源调度到某一个 Node 节点。

Controller 控制器,维护 K8s 资源对象。

etcd 存储资源对象。

Node 节点结构如下:

Kubelet 在每一个 Node 节点都存在一份,在 Node 节点上的资源操作指令由 Kubelet 来执行。

Kube-proxy 代理服务,处理服务间负载均衡。

Pod 是 K8s 管理的基本单元(最小单元),Pod 内部是容器,K8s 不直接管理容器,而是管理 Pod。

Docker 运行容器的基础环境,容器引擎。

Fluentd 日志收集服务。

在介绍完 K8s 架构后,我们又引入了很多技术名词。不要着急,先有整体概念,再各个击破。请耐心阅读下文,相信你一定会有不一样的收获。

K8s 核心组件

①K8s 组件

K8s 是用来管理容器,但是不直接操作容器,最小操作单元是 Pod (间接管理容器):

一个 Master 有一群 Node 节点与之对应。

Master 节点不存储容器,只负责调度、网管、控制器、资源对象存储。

容器的存储在 Node 节点,容器是存储在 Pod 内部的)。

Pod 内部可以有一个容器,或者多个容器。

Kubelet 负责本地 Pod 的维护。

Kube-proxy 负责负载均衡,在多个 Pod 之间来做负载均衡。

②Pod 是什么?

解释如下:

Pod 也是一个容器,这个容器中装的是 Docker 创建的容器,Pod 用来封装容器的一个容器,Pod 是一个虚拟化分组。

Pod 相当于独立主机,可以封装一个或者多个容器。

Pod 有自己的 IP 地址、主机名,相当于一台独立沙箱环境。

③Pod 到底用来干什么?

通常情况下,在服务部署时候,使用 Pod 来管理一组相关的服务。一个 Pod 中要么部署一个服务,要么部署一组有关系的服务。

一组相关的服务是指:在链式调用的调用连路上的服务。

④Web 服务集群如何实现?

实现服务集群:只需要复制多方 Pod 的副本即可,这也是 K8s 管理的先进之处,K8s 如果继续扩容,只需要控制 Pod 的数量即可,缩容道理类似。

⑤Pod 底层网络,数据存储是如何进行的?

具体如下:

Pod 内部容器创建之前,必须先创建 Pause 容器。

服务容器之间访问 localhost ,相当于访问本地服务一样,性能非常高。

⑥ReplicaSet 副本控制器

控制 Pod 副本「服务集群」的数量,永远与预期设定的数量保持一致即可。

当有 Pod 服务宕机时候,副本控制器将会立马重新创建一个新的 Pod,永远保证副本为设置数量。

副本控制器:标签选择器-选择维护一组相关的服务(它自己的服务)

ReplicationController 副本控制器:单选。

ReplicaSet 副本控制器:单选,复合选择。

selector: 

    app = web 

    Release = stable 

在新版的 K8s 中,建议使用 ReplicaSet 作为副本控制器,ReplicationController 不再使用了。

⑦Deployment 部署对象

Deployment 部署对象如下:

服务部署结构模型

滚动更新

ReplicaSet 副本控制器控制 Pod 副本的数量。但是,项目的需求在不断迭代、不断的更新,项目版本将会不停的的发版。版本的变化,如何做到服务更新?

部署模型:

ReplicaSet 不支持滚动更新,Deployment 对象支持滚动更新,通常和 ReplicaSet 一起使用。

Deployment 管理 ReplicaSet,RS 重新建立新的 RS,创建新的 Pod。

⑧MySQL 使用容器化部署,存在什么样的问题?

问题如下:

容器是生命周期的,一旦宕机,数据丢失

Pod 部署,Pod 有生命周期,数据丢失

对于 K8s 来说,不能使用 Deployment 部署有状态服务。

通常情况下,Deployment 被用来部署无状态服务,那么对于有状态服务的部署,使用 StatefulSet 进行有状态服务的部署。

什么是有状态服务?

有实时的数据需要存储。

有状态服务集群中,把某一个服务抽离出去,一段时间后再加入机器网络,如果集群网络无法使用。

什么是无状态服务?

没有实时的数据需要存储。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读