K8S-概述

目录

    kubernetes是什么?

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

    kubernetes的作用?

    1、服务发现和负载均衡

    kubernetes可以使用DNS名称或者在自己的IP地址公开容器,如果进入容器的流浪很大,kubernetes可以负载均衡并分配网络流量,从而使部署稳定。

    (不需要额外部署nginx进行健康检查和负载均衡,K8S可以进行负载均衡,并且新增加的容器 会自加入进来,不需要传统意义上的修改nginx配置文件,将新加入的服务加入到负载均衡中)

    2、存储持久化

    kubernetes允许你自动挂载你选择的存储系统,进行数据文件的持久化

    (docker同样支持数据文件的持久化挂载)

    3、自动部署和回滚

    可以在声名式配置(yml)中描述部署容器的所需状态,它可以以指定的速率将实际的工作状态更改为期望状态。例如,可以自动化kubernetes来为部署创建新容器,删除现有容器并将他们的所有资源用于新容器。

    (可以将容器的创建指令持久化为yml文件,并且更新时会有序更新,不影响用户的访问使用。)

    4、自动完成装箱计算

    kubernetes允许指定每个容器运行时所需要的内存和CPU资源,如果容器所承载的压力超过指定的内存和CPU限定,会自动水平扩展容器,负载均衡所分担的压力。

    (根据负载均衡的压力,判断是否超过了限定的资源,如果超过了,会自动水平扩展容器以分担其他容器的压力-------实现自动化水平扩展,不再需要手动修改配置或者手动水平扩展,比较于容器时代,是一个进步。)

    5、自我修复

    kubernetes重新启动失败的容器,替换容器,杀死不响应的容器,并且容器在准备好(运行成功)之前是不会加入到负载均衡中的,不会被用户访问到,不会让用户感知。

    (比较于容器:kubernetes会有存活检测机制,如果一个容器启动时失败,无法提供服务,是不会被加入到负载均衡中的,不会影响用户的访问。虽然容器也有重启时可以选择设置的重启机制,但是并没有检测机制,所以这一块也算是对负载均衡机制的完善,如果只有负载均衡,没有存活检测,负载均衡到失败的容器上,也算是对负载均衡的不完善)

    6、密钥和配置管理

    kubernetes允许存储和管理敏感信息,例如密码、oauth令牌和ssh密钥。可以在不重建容器的情况下部署和更新密钥和程序的配置,不需要在堆栈中爆露密钥。

    (这是对kubernetes安全方面的一个配置,对于敏感信息的一个管理机制)

    kubernetes的解释

    kubernetes不是一个服务,不提供类似于Jenkins的发布管理功能,也不提供zabbix普罗米修斯的监控功能以及ELK的日志收集功能,kubernetes是一个平台,是一个分布式的容器管理平台。

    如果需要构建公司的Jenkins或者监控组件,可以在kubernetes中结合第三方插件进行实现,但是K8S平台本身不提供这类服务。

    kubernetes组件有哪些?

    kubernetes分为control控制节点(包工头)和work节点(工人),每个kubernetes都至少需要一个work节点(否则只有包工头指挥,没有工人干活,无法完成工作。)

    在这里插入图片描述

    控制节点control:管理k8s中的工作节点和pod(可以理解为包工头管理工人以及工人要做的工作)

    工作节点work:运行应用程序的pod(一线员工,处理工作,完成包工头安排的工作)

    控制节点的组件是对K8S集群中做出全局策略的(比如调度分配pod任务),以及检测和响应集群事件。

    控制节点有三个组件(也可以说是5个,更多的话 属于第三方插件,不是必须的具有的),这三个组件可以分开部署到不同的机器上,但是基本都部署在一台机器上。

    控制节点的组件

    kube-apiserver

    api-server公开了kubernetes api接口,api-server是控制节点最前端的服务。api-server组件可以设置为水平伸缩,进行多个实例之间进行伸缩,平衡这些示例之间的流量。(相当于包工头的小秘或者电话,工人有事儿要给包工头打电话 ,或者找包工头的秘书,请秘书转达)

    etcd

    etcd是兼具一致性和高可用的键值对数据库,可以作为保存kubernetes所有集群数据数据库。(替K8S管钱的,类似于当代下的“老婆”)。它并不属于K8S,但是天生适合于K8S(可以理解为不是和K8S有血缘关系的家人,但是在和K8S热恋中,青梅竹马,天生一对。)

    kube-scheduler

    负责监视新创建的但还未指定运行工作节点进行运行的pod,会给pod指定工作节点 进行绑定。

    (负责分配任务的,有了新的工作任务,scheduler会负责分配给合适的工人)

    调度分配的策略考虑:pod需要的资源需求,硬件或者软件策略,亲和性和反亲和性规范、数据位置、工作负载等。

    kube-controller-manager

    kube-controller-manager是包含许多进程的,每个控制器都是一个单独的进程,为了降低复杂性,这些进程被编译到了一个组件中(kube-controller-manager)

    这些控制器包括:

    节点控制器:负责在节点出现故障时进行通知和响应

    任务控制器:监测代表一次性任务的job对象,然后创建pod来运行这些任务直到完成

    端点控制器:管理service和pod相关资源

    服务账户和令牌控制器:为新的命名空间创建默认账户和API访问令牌

    工作节点组件

    工作节点组件在每个节点上运行(在控制节点上会运行),维护运行的pod并提供K8S运行环境

    kubelet

    在K8S集群中的工作节点上运行的代理。它负责将容器运行在pod中。

    kubelet接受一组通过各类机制提供给它的podSpecs(pod规格),确保这些podSpecs中描述的容器处于运行状态并且是健康的。kubelet管理工作节点上的容器。

    kube-proxy

    是集群中每个节点上运行的网络代理,实现K8S的service服务的组件。

    kube-proxy维护节点上的网络规则。这些网络规则运行从集群内部或者外部的网络于pod进行通信。

    如果操作系统提供了数据包过滤层并可用的话,kube-proxy会通过它来实现网络规则。否则,kube-proxy仅转发流量。

    其他插件

    插件使用kubernetes资源(DaemonSet、Deployment等)实现集群功能,因为这些插件提供集群级别的功能,插件中命名空间域的资源属于kube-system命名空间。

    DNS

    尽管其他插件并非严格意义上的必须组件,但几乎所有K8S集群都应该有集群DNS,因为很多示例都需要DNS服务

    集群DNS是一个DNS服务器,和环境中的其他DNS服务器一起工作,它为K8S服务提供DNS记录。

    K8S启动的容器自动将此DNS服务器包含在其DNS搜索列表中

    dashboard

    Dashboard是K8S集群的通用的,基于web的用户界面。它使用户可以管理集群中运行的应用程序以及集群本身并进行故障排除。

    容器资源监控

    容器资源监控将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供用于浏览这些数据的界面

    集群层面日志

    集群层面i日志机制负责将容器的日志数据保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口

    kubernetes api

    kubernetes控制节点的核心服务是 api-server组件。api-server服务提供HTTP API,以供用户、集群中的不同部分和集群外部组件相互通信。

    kubernetes api 提供查询和操作kubernetes中的对象(例如:pod namespace configmap event)的状态

    大部分操作都可以通过kubectl命令行接口或类似kubeadm这类命令行工具来执行,这些工具在背后也是调用api。不过,你也可以使用rest调用来访问这些api。

    注释:app version : /api/v1 这个指令式对象yaml中的字段是表示 api的版本信息

    因为你不会,所以你才会---大司马
    原文地址:https://www.cnblogs.com/liushiya/p/14908656.html