Kubernetes基础

一、 Kubernetes基础

1. 什么是Kubernetes(k8s)?

  • k8s是Google的一个开源容器编排引擎,用于自动部署、扩展和管理容器化应用程序。Kubernetes集群可以跨本地和公共云基础设施跨越主机,使Kubernetes成为托管云本地应用程序的理想平台。

  • Kubernetes 的一般概念相当简单:

    • 从一个或多个工作节点开始运行容器工作负载。

    • 从一个或多个控制平面节点管理这些工作负载的部署。

    • 将容器包装在称为 Pod 的部署单元中。使用 Pod 为容器提供额外的元数据,并提供将多个容器分组到单个部署实体中的能力。

    • 创建特殊类型的资产。例如,服务由一组 Pod 和定义如何访问它们的策略表示。此策略允许容器连接到它们需要的服务,即使它们没有服务的特定 IP 地址。复制控制器是另一种特殊资产,它指示一次运行需要多少个 Pod 副本。您可以使用此功能自动扩展您的应用程序以适应其当前需求。

https://kubernetes.io/ #k8s官网
https://github.com/kubernetes/kubernetes/ #大量 example案例
https://www.kubernetes.org.cn/ #kubernetes中文社区
http://docs.kubernetes.org.cn/ #大量中文文档

2. 为什么要用k8s?

IT是一个由新技术驱动的行业,Docker这个容器技术当前已经被很多公司所采用,其从单机走向集群已成为必然,k8s作为当前唯一被业界广泛看好的Docker分布式系统解决方案,未来会有大量的新系统选择它。

2.1 k8s的好处

  • 跨多个主机编排容器

  • 更好地利用硬件来最大化运行您的企业应用程序所需要的资源

  • 控制和自动化应用程序部署和更新

  • 挂载并添加存储空间以运行具有有状态的应用程序

  • 声明式地管理服务,以保证已部署的服务应用程序总是以您预期的运行方式运行。

  • 使用autoplacement进行健康检查和自我修复应用程序,自动重新启动、自动重新应用和自动缩放

  • 客户在其环境中使用Kubernetes的优势在于能够在物理系统或虚拟机(VM)的集群上调度和运行容器。并且客户的系统可以随时随地整体“搬迁”到公有云上。

  • 超强的横向扩容能力。不用修改代码,一个k8s集群即可从只包含几个node的小集群平滑扩展到拥有上百个node的大规模集群,只要微服务设计的好,结合硬件或公有云资源的线性增加,系统就能承受大量用户的并发访问所带来的巨大压力。

  • k8s可以在以下环境中运行:

    • ​ 裸金属服务器
    • ​ 虚拟机
    • ​ 公有云供应商
    • ​ 私有云
    • ​ 混合云环境

3. k8s的架构

在这里插入图片描述

1. Master

  • Master节点上面主要由四个模块组成:kube-APIServer、kube-scheduler、kube-controller-manager、etcd
    • kube-APIServer负责对外提供RESTful的Kubernetes API服务,他是系统管理指令的统一入口,任何对资源进行增删改查的操作都要交给APIServer处理后再提交给etcd。如架构图所示,kubectl(k8s提供的客户端工具,该工具内部就是对Kubernetes API的调用)是直接和APIServer交互的。
    • kube-scheduler负责调度Pod到合适的Node上。如果把scheduler看成一个黑匣子,那么它输入的是Pod和由多个Node组成的列表,输出的是Pod和一个Node的绑定,即将这个Pod部署到这个Node上。k8s目前提供了调度算法,但是同样也保留了接口,用户可以根据自己的需求定义自己的调度算法。
    • kube-controller-manager负责管理资源的控制器(一般每个资源都对应一个控制器)。比如我们通过APIServer创建一个Pod,当这个Pod创建成功后,APIServer的任务就算完成了。而后面保证Pod的状态始终和我们预期的一样的重任就由kube-controller-manager去完成。
      • 这些控制器包括:
        • 节点(Node)控制器
        • 副本(Replication)控制器:负责维护系统中每个副本中的Pod
          • k8s集群中的服务扩容和系统升级,只需要为扩容的Service关联的Pod创建一个Replication Controller(简称RC),则该Service的扩容及升级都可以解决。在一个RC定义文件中包括以下3各关键信息
            • 目标Pod的定义
            • 目标Pod需要运行的副本数量(replicas)
            • 要监控的目标Pod标签
          • 在创建好RC(系统会自动创建好Pod)后,k8s会通过RC定义的Label筛选出对应的Pod实例并实时监控其状态和数量,如果实例数量少于定义的副本数量(ralicas),则会根据RC中定义的Pod模板来创建一个新的Pod,然后将此Pod调度到合适的node上启动运行,直到Pod实例的数量达到预定目标。
        • 端点(endpoint)控制器:填充Endpoints对象(即连接services&Pods)
        • Service Account和Token控制器:为新的Namespace创建默认账户访问API Token
    • etcd是一个高可用的键值存储系统,k8s使用它来存储各个资源的状态,从而实现了Restful的API。

2.Node

  • Node节点可以是物理机,也可以是私有云火或公有云中的一个虚拟机。每个Node主要由三个模块组成:kubelet、kube-proxy、runtime
    • kubelet是Master在每个Node节点上面的agent,是Node节点上面最重要的模块,负责维护和管理该Node上面的所有容器,但是如果容器不是通过k8s创建的,它并不会管
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值