Docker不香吗,为啥还要K8s?( 二 )

  • 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 不再使用了 。
    【Docker不香吗,为啥还要K8s?】⑦Deployment 部署对象
    Deployment 部署对象如下:
    • 服务部署结构模型
    • 滚动更新
    ReplicaSet 副本控制器控制 Pod 副本的数量 。但是,项目的需求在不断迭代、不断的更新,项目版本将会不停的的发版 。版本的变化,如何做到服务更新?
    部署模型:
    • ReplicaSet 不支持滚动更新,Deployment 对象支持滚动更新,通常和 ReplicaSet 一起使用 。
    • Deployment 管理 ReplicaSet,RS 重新建立新的 RS,创建新的 Pod 。
    ⑧MySQL 使用容器化部署,存在什么样的问题?
    问题如下:
    • 容器是生命周期的,一旦宕机,数据丢失
    • Pod 部署,Pod 有生命周期,数据丢失
    对于 K8s 来说,不能使用 Deployment 部署有状态服务 。
    通常情况下,Deployment 被用来部署无状态服务,那么对于有状态服务的部署,使用 StatefulSet 进行有状态服务的部署 。
    什么是有状态服务?
    • 有实时的数据需要存储 。
    • 有状态服务集群中,把某一个服务抽离出去,一段时间后再加入机器网络,如果集群网络无法使用 。
    什么是无状态服务?
    • 没有实时的数据需要存储 。
    • 无状态服务集群中,把某一个服务抽离出去,一段时间后再加入机器网络,对集群服务没有任何影响 。
    ⑨StatefulSet
    为了解决有状态服务使用容器化部署的一个问题:
    • 部署模型
    • 有状态服务
    StatefulSet 保证 Pod 重新建立后,Hostname 不会发生变化,Pod 就可以通过 Hostname 来关联数据 。
    K8s 的服务注册与发现
    ①Pod 的结构是怎样的?
    结构如下:
    • Pod 相当于一个容器,Pod 有独立 IP 地址,也有自己的 Hostname,利用 Namespace 进行资源隔离,独立沙箱环境 。
    • Pod 内部封装的是容器,可以封装一个,或者多个容器(通常是一组相关的容器) 。
    ②Pod 网络
    具体如下: