1. kubernetes简介
1.1 docker容器技术
Docker provides a way to run applications securely isolated in a container, packaged with all its dependencies and libraries.Build once, Run anywhwere.node
Docker提供了一种将应用程序安全,隔离运行的一种方式,可以将应用程序依赖和库文件打包在一个容器中,后续再任何地方运行起来便可,其包含了应用程序所依赖相关环境,一次构建,任意运行(build once,run anywhere)nginx

Docker组成:docker
- Docker Daemon 容器管理组件,守护进程,负载容器,镜像,存储,网络等管理
- Docker Client 容器客户端,负责和Docker Daemon交互,完成容器生命周期管理
- Docker Registry 容器镜像仓库,负责存储,分发,打包
- Docker Object 容器对象,主要包含container和images
容器给应用程序开发环境带来很大的便利,从根本上解决了容器的环境依赖,打包等问题,然而,Docker带来的容器打包的便利,同时也带来了如下的挑战:api
- 容器如何调度,分发
- 多台机器如何协同工做
- Docker主机故障时应用如何恢复
- 如何保障应用高可用,横向扩展,动态伸缩

1.2 kubernetes简介与功能
Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications.It groups containers that make up an application into logical units for easy management and discovery. Kubernetes builds upon15 years of experience of running production workloads at Google, combined with best-of-breed ideas and practices from the community.安全
Kubernetes是google开源的一套微服务,容器化的编排引擎,提供容器话应用的自动化部署,横向扩展和管理,是google内部容器十多年实战沉淀的结晶,已打败Swarm,Mesos成为容器编排的行业标准。网络
三大容器编排引擎:架构
- Swarm Docker原生提供的容器化编排引擎,随着docker支持kubernetes逐渐废弃
- Mesos 结合Marathon提供容器调度编排的能力,还能提供其余framwork的调度
- Kubernetes 已成为容器编排引擎的惟一标准,愈来愈多程序支持kubernetes。
kuberntes内置有不少很是优秀的特性使开发者专一于业务自己,其包含的功能以下:app

- Service discovery and load balancing,服务发现和负载均衡,经过DNS实现内部解析,service实现负载均衡
- Storage orchestration,存储编排,经过plungin的形式支持多种存储,如本地,nfs,ceph,公有云快存储等
- Automated rollouts and rollbacks,自动发布与回滚,经过匹配当前状态与目标状态一致,更新失败时可回滚
- Automatic bin packing,自动资源调度,能够设置pod调度的所需(requests)资源和限制资源(limits)
- Self-healing,内置的健康检查策略,自动发现和处理集群内的异常,更换,需重启的pod节点
- Secret and configuration management,密钥和配置管理,对于敏感信息如密码,帐号的那个经过secret存储,应用的配置文件经过configmap存储,避免将配置文件固定在镜像中,增长容器编排的灵活性
- Batch execution,批处理执行,经过job和cronjob提供单次批处理任务和循环计划任务功能的实现
- Horizontal scaling,横向扩展功能,包含有HPA和AS,即应用的基于CPU利用率的弹性伸缩和基于平台级的弹性伸缩,如自动增长node和删除nodes节点。
1.3 kubernetes架构解析

kubernetes包含两种角色:master节点和node节点,master节点是集群的控制管理节点,做为整个k8s集群的大脑。负载均衡
- 负责集群全部接入请求(kube-apiserver),在整个集群的入口;
- 集群资源调度(kube-controller-scheduler),经过watch监视pod的建立,负责将pod调度到合适的node节点;
- 集群状态的一致性(kube-controller-manager),经过多种控制器确保集群的一致性,包含有Node Controller,Replication Controller,Endpoints Controller等;
- 元数据信息存储(etcd),数据持久存储化,存储集群中包括node,pod,rc,service等数据;
node节点是实际的工做节点,负责集群负载的实际运行,即pod运行的载体,其一般包含三个组件:Container Runtime,kubelet和kube-proxyide
- Container Runtime是容器运行时,负责实现container生命周期管理,如docker,containerd,rktlet;
- kubelet负责镜像和pod的管理,
- kube-proxy是service服务实现的抽象,负责维护和转发pod的路由,实现集群内部和外部网络的访问。
其余组件还包括:
- cloud-controller-manager,用于公有云的接入实现,提供节点管理(node),路由管理,服务管理(LoadBalancer和Ingress),存储管理(Volume,如云盘,NAS接入),须要由公有云厂商实现具体的细节,kubernetes提供实现接口的接入,如腾讯云目前提供CVM的node管理,节点的弹性伸缩(AS),负载均衡的接入(CLB),存储的管理(CBS和CFS)等产品的集成;
- DNS组件由kube-dns或coredns实现集群内的名称解析;
- kubernetes-dashboard用于图形界面管理;
- kubectl命令行工具进行API交互;
- 服务外部接入,经过ingress实现七层接入,由多种controller控制器组成
- traefik
- nginx ingress controller
- haproxy ingress controller
- 公有云厂商ingress controller
- 监控系统用于采集node和pod的监控数据
- metric-server 核心指标监控
- prometheus 自定义指标监控,提供丰富功能
- heapster+influxdb+grafana 旧核心指标监控方案,现已废弃
- 日志采集系统,用于收集容器的业务数据,实现日志的采集,存储和展现,由EFK实现
- Fluentd 日志采集
- ElasticSearch 日志存储+检索
- Kiabana 数据展现
1.4 kubernetes生态
https://landscape.cncf.io/
1.5 kubernetes高可用架构
kubernetes高可用集群一般由3或5个节点组成高可用集群,须要保障各个节点的高可用性
- etcd 内置集群机制,保障数据持久存储
- kube-apiserver 无状态api服务,有负载均衡调度器作负载分发,如haproxy或nginx
- kube-scheduler 内置选举机制,保障调度器高可用,确保同个时刻一个leader节点工做,其余处于阻塞,防止脑裂
- kube-controller-manager 内置的选举机制保障控制器高可用,机制和kube-scheduler一致。

参考文档
-
kubernetes功能介绍,https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
- kubernetes组件介绍https://kubernetes.io/docs/concepts/overview/components/