前言:
docker的集群管理工具:
swarm 是docker官方的集群管理工具
Mesos 管理
目前kubernetes 占用当前市场80%以上

一. kubernetes 是什么

  • kubernetes 是google在2014年开源的一个容器集群管理系统,kubernetes 简称k8s
  • k8S用于容器化应用程序的部署,扩展和管理
  • k8S提供容器编排,资源调度,弹性伸缩,部署管理,服务发现等一些列功能
  • kubernetes目标是让部署容器化应用简单高效
  • 官方网站:http://www.kubernetes.io

二. kubernetes 的特性

  • 自我修复
    在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。

  • 弹性伸缩
    使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小的成本运行服务

  • 自动部署和回滚
    K8S采用滚动更新策略更新应用,一次更新一个pod,而不是同时删除所有pod,如果更新过程中出现问题,将回滚更改,确保升级不受影响服务。

  • 服务发现和负载均衡
    K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联所有容器,使得用户无需考虑容器IP地址问题

  • 机密和配置管理
    管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性,并可以将一些常用的配置存储在K8S中,方便应用程序使用。

  • 存储编排
    挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS)

三. kubernetes 集群架构与组件

在这里插入图片描述
node业务节点组件:(网站,邮件,APP)

  • kube-proxy: 在node节点上实现pod的网络代理,维护网络规则和四层的负载均衡工作
    (反向代理,访问的唯一的入口,也是必经的出口)
  • kubelet:kubelet是master在node节点上的代理agent,管理本node运行容器的生命周期
    比如创建容器、pod挂载数据卷、下载sercet、获取容器和节点状态等工作,kubelet把每个Pod转换成一组容器。
    (接头人)master在node节点的指令代理(master 下达的指令委托kubelet 下发到node)
  • docker或rockert
    容器引擎,运行容器
  • pod 是容器的集群,集合(一个pod可以放多个容器,生产环境中一个pod只放一个容器当需要采集日志时,就会多放一个容器,负责采集业务端的日志) 。概念:K8S管理的为pod ,pod 里面装着容器。
    pod:contaier在pod里面,k8s管理的最单元为pod

master组件:
注意:master 不能挂掉,master挂掉就相当于失控,想连回来非常难,需要重新写配置,重新连接,远程连接node,把node的配置全删掉,重新申请证书,但是业务还可以访问

  • kubectl:k8s的控制命令两种终端,字符界面及图形界面,人为下达的指令
    AUTH:身份验证,人为下达的指令需要身份验证
  • API Server :集群的统一入口,各组件之间的协调者,以restful api提供接口服务,所有对象资源的增删改查和监听操作都交给apiserver处理后在提交给etcd存储记录
    主脑,控制k8s 唯一访问入口,只用它才能写入etcd(API Server挂了整个master就挂掉了)
  • controller-manager: 处理集群中常规的后台任务,一种资源对应一个控制器,controller-manager就是负责管理这些控制器的控制器,决定创建资源的类型,执行的任务是一次性任务还是周期性任务

类型:有状态类型还是无状态类型,一次性任务还是周期性任务等
无状态化:只管数量,不需要管内容
有状态化:每个节点都有自己的角色,不可以被随意删除

  • scheduler:根据调度算法为新创建的pod选择一个node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同节点上
    (调度器,根据调度算法,决定资源创建的位置调度器只负责算,算完后,交给API Server,API server 通过kubelet 下达指令,在node创建pod)
  • etcd
    分布式键值存储系统,用户保存集群状态数据,比如pod、service等对象信息

k8s 的工作原理
以增加一个tomcat容器作为例子:

思路:如果想要创建一个tomcat容器,这时候会由kubectl下达指令,通过auth进行身份验证,如果具备权限就会交给API server,API server会先把一些概要性的信息(我要创建一个什么样的资源)先写入到Etcd中,有一些信息是还没能写进去的比如我要在哪一个node节点上创建资源。这时候API server 会把未知的元素就会找自己的一个小组件 controller-manage决定创建什么类型的资源(有状态,无状态,一次性任务,周期性任务),然后交给scheduler调度器去算哪个节点空缺,决定创建资源的位置。这时候会把这些信息传给 API server,API server 这时候会把信息传给kubelet,kubelet会完成master下达的指令,进行容器的创建。创建完容器后就会知道这个pod 的地址,状态等信息,这些信息会通过kubelet传达给API server,API server 会把信息写在etcd里。当我查看这个容器是否创建成功时就会通过kubectl 先进行身份验证,身份验证完后,具备资格就会把命令传递给API Server,API Server 就会在etcd 取数据,反馈给管理员。

四. kubernetes 核心概念

在这里插入图片描述

pod

  • 最小部署单元
  • 一组容器的集合
  • 一个pod中的容器共享网络命名空间
  • pod是短暂的(生产环境一般不会使用重启,而是使用重新创建)

controllers

  • relicaset: 确保预期的pod副本数量
  • deployment: 无状态应用部署,比如nginx、apache,一定程度上的增减不会影响客户体验
  • statefulset: 有状态应用部署,是独一无二型的,会影响客户的体验
  • daemonset: 确保所有node运行同一个pod,确保pod在统一命名空间
  • job: 一次性任务
  • cronjob: 定时任务
  • 更高层次对象:部署和管理pod

service

  • 防止pod失联
  • 定义一组pod的访问策略
  • 确保了每个pod的独立性和安全性

storage

  • volumes
  • persistent volumes
    pollcies 策略
  • resource quotas
    other
  • label:标签,附加到某个资源上,用户关联对象,查询和筛选
  • namespaces: 命名空间,将对象从逻辑上隔离
  • annotations: 注释
  • 探针:探测pod的健康状况
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐