zoukankan      html  css  js  c++  java
  • K8s

    Docker 的管理痛点

    Docker 虽然好用,但是面对超大的集群,成千上万的容器,存在着困难的编排,管理和调度问题。我们迫切需要一套管理系统,对 Docker 及容器进行更高级更灵活的管理。

    什么是 K8s


    K8s 是一个可移植的,可扩展的开源平台,用于管理容器化的工作负载和服务,可以促进声明式配置和自动化。K8s 拥有一个庞大且快速增长的生态系统。通过 K8s 我们可以,快速部署应用,快速扩展应用,无缝对接新的应用功能,节省资源,优化硬件资源的使用。

    云架构&云原生

    1. 云和 K8s 是什么关系
      云就是使用容器构建的一套服务集群网络,云由很多的大量容器构成。K8s 就是管理云中的容器。
    2. 常见几类云架构
    • On-Premises, 本地部署,硬件网络中间件,服务都自己弄。
    • Iaas(基础设施服务): 基础服务提供商提供硬件,网络,存储,DNS 等。用户购买或租用云主机。
    • Paas(平台即服务): 一些中间件,比如 MySQL/ES/MQ 等等。
    • Saas(软件及服务): 在平台上部署自己的应用,向外提供服务。
    • Serverless: 无服务,不需要服务器,站在用户的角度考虑,用户只需要使用云服务器即可,不需要考虑云服务器所在的基础环境,软件环境等等。
    1. 云原生
      为了让应用程序(项目,软件服务)都运行在云上的解决方案,这样的方案叫做云原生。特点:
    • 容器话,所有服务都必须部署在容器中。
    • 微服务。
    • CI/CD。
    • DevOps。

    K8s 架构原理


    K8s 架构是一个 Master 对应一群 Node 节点。
    Master 节点的结构如下:

    • Apiserver 即 K8s 网关,所有指令请求都必须经过 apiserver。
    • Scheduler 调度器,使用调度算法,把请求调度到某一个 Node 节点。
    • Contorller 控制器,维护 K8s 资源对象。
    • etcd 存储资源对象。
      Node 节点的结构如下:
    • Kubelet 在每一个 Node 节点都存一份,在 Node 节点上的资源操作都由 Kubelet 来执行。
    • Kube-proxy 代理服务,处理服务间负载均衡。
    • Pod 是 K8s 管理的基本单元(最小单元),Pod 内部是容器,K8s 不直接管理容器,而是管理 Pod。
    • Docker 运行容器的基础环境,容器引擎。
    • Fluentd 日志收集服务。

    K8s 核心组件

    1. K8s 组件
      K8s 是用来管理容器,但是不直接操作容器,最小操作单元是 Pod(间接管理容器):
    • 一个 Master 有一群 Node 节点与之对应。
    • Master 节点不存储容器,只负责调度,网关,控制器,资源对象存储。
    • 容器的存储在 Node 节点,容器时存储在 Pod 内部的。
    • Pod 内部可以有一个容器,或者多个容器。
    • Kubelet 负责本地 Pod 的维护。
    • Kube-proxy 负责负载均衡,在多个 Pod 之间来做负载均衡。
    1. Pod 是什么?
      Pod 也是一个容器,这个容器中装的是 Docker 创建的容器,Pod 是用来封装容器的一个容器,Pod 是一个虚拟化分组。
      Pod 相当于独立主机,可以封装一个或者多个容器。
      Pod 拥有自己的 IP 地址,主机名,相当于一台独立的沙箱环境。

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

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

    4. Pod 底层网络访问
      服务容器之间访问,相当于访问本地服务一样,性能非常高。

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

    • 容器是有声明周期的,一旦宕机,数据丢失。
    • Pod 部署,Pod 是有声明周期的,也有可能造成数据丢失。
      对于 K8s 来说,不能使用 Deployment 部署有状态服务。需要 StatefulSet 来部署。

    K8s 的服务注册与发现

    Pod 是虚拟的资源对象(进程),没有对应实体(物理机,物理网卡)与之对应,无法直接对外提供服务。如果 Pod 想对外提供服务,必须
    绑定物理机端口。
    Pod 是一个进程,是有声明周期的。宕机,版本更新,都会创建新的 Pod, 这时 IP 地址会发生变化,Hostname 会发生变化,使用 Nginx 做
    负载均衡就不太合适了。我们需要依赖 Service 的能力。

  • 相关阅读:
    如何添加“写字板”打开方式
    UML类图聚集与组合的区别
    系统调用跟驱动程序中相应函数的参数对应关系
    PHP 判断数据类型
    PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)
    java 中的内部类总结
    cross-env使用笔记
    MySQL——约束(constraint)详解
    MySQL数据库--外键约束及外键使用
    Java中Lambda表达式的使用
  • 原文地址:https://www.cnblogs.com/paulwang92115/p/13891426.html
Copyright © 2011-2022 走看看