一、kubernetes简介

1.1.docker介绍

docker提供了一种将应用程序安全隔离运行的方式,能将应用程序依赖库和库文件打包在一个容器中,后续在任何地方运行即可,其包含的应用程序所以来的相关环境一次构建,任意运行。
尽管docker容器可以通过docker build等client端与docker daemon交互,完成从registry拉取镜像并创建container等docker对象,依托docker平台本身完成整个docker生命周期,它给应用程序开发环境带来很大便利,从根本上解决了容器环境依赖打包的问题,但是同时也带来了以下痛点:

  • 容器如何调度、分发
  • 多台机器如何协同工作
  • docker主机故障如何恢复
  • 如何保障高可用、横向扩展、动态伸缩

1.2.kubernetes简介与功能

kubernetes是google开源的一套微服务,容器化的编排引擎,提供容器化应用的自动化部署,横向扩展和管理
三大容器编排引擎:

  • swarm docker原生提供的容器化编排引擎
  • mesos结合marathon提供容器调度编排的能力,还能提供framework调度
  • kubernetes已成为容器编排引擎的唯一标准

kubernetes主要功能:

  • 服务发现和负载均衡,通过dns实现内部解析,service实现负载均衡
  • 存储编排,通过plugin的形式支持多种存储,如本地,nfs,ceph,云存储等
  • 自动发布与回滚,通过匹配当前状态与目标状态一直,更新失败回滚
  • 自动资源调度,设置pod调度资源和限制资源
  • 健康检查,自动发现和处理集群内的异常,更换需重启的pod节点
  • 密钥和配置管理,对于密码账号等敏感信息存储在secret存储,应用的配置文件通过configmap存储,这样可以避免将配置文件固定在镜像中,增加编排的灵活性
  • 批处理执行,通过job和cronjob提供单词批处理任务和循环计划任务的执行
  • 横向扩展功能,包含HPA和AS,基于cpu利用率的弹性伸缩和基于平台级的弹性伸缩,比如自动增加节点和删除节点

1.2.kubernetes架构

kubernetes包含两种角色,master和node,master节点控制集群的,是整个集群的大脑

  • 负责接入集群所有接入的请求,是整个集群的入口
  • 集群资源调度,通过wantch监视pod创建,负责将pod调度到合适node
  • 控制多种控制器确保集群一致性
  • 数据持久化

node节点是实际工作节点,负责集群的负载实际运行,pod的载体

  • container runtime负责container生命周期
  • kubelet负责镜像和pod的管理
  • kube-proxy和service服务实现,负责维护pod的路由,实现集群内的网络访问

1.3.kubernetes高可用

jubernetes高可用集群通常由3个或5个组成高可用集群,需要保障各个节点高可用

  • etcd内置集群机制,保障数据持久存储
  • kube-apiserver 无状态api服务,有负载均衡调度器的负载分发,如haproxy或nginx
  • kube-scheduler内置选举机制,保障调度器高可用,确保同一时刻只有一个leader节点,其他处于阻塞状态以防止脑裂
  • kube-controller-manager 内置的选举机制保障控制器高可用,机制类似kube-scheduler