Kubernetes (K8S)
1 云原生与K8S
云原生生态系统:http://dockone.io/article/3006云原生计算基金会(CNCF): https://landscape.cncf.io
云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论,云计算是云原生的基础,云原生是一个组合词,Cloud+Native
Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势
云原生的四要素:
微服务,devops,持续交付,容器化
2,Kubernetes 简介
Kubernetes设计架构 http://docs.kubernetes.org.cn/ K8S是一个开源的,用于管理云平台中多个主机上的容器化应用,Kubernetes的目标是让部署容器化变得简单并且高效
K8S的核心优势:
基于yaml文件实现容器的自动创建、删除
更快速实现业务的弹性横向扩容
动态发现新扩容的容器并自动对用户提供访问
更简单、更快速的实现业务代码升级和回滚
3,Kubernetes核心组件
kube-apiserver 组件
kube-apiserver用于暴露Kubernetes API。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行,是整个系统的数据总线和数据中心
apiserver 目前在master监听两个端口
通过参数 --insecure-port 8080 监听一个非安全的127.0.0.1本地端口(默认为8080)
通过参数 --bind-address=10.0.0.3 监听一个对外访问且安全(https)的端口(默认为6443)
kube-scheduler 组件
kube-scheduler是 Kubernetes集群的pos调度器,是一个拥有丰富策略、能够感知拓扑变化、支持特定负载的功能组件,调度器显著影响可用性、性能和容量
通过调度算法为待调度的Pod从可用Node列表中选择一个最适合Node,并将信息写入etcd中
kube-controller-manager 组件
kube-controller-manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,每个Controller通过API Server提供的接口实时监控整个集群的每个资源对象状态,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态
kubelet 组件
在kubernetes集群中,每个Node节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,管理Pod和其中的容器。它会监视已分配给节点的pod,向master汇报node节点的状态信息,接受指令并在Pod中创建docker容器,返回pod的运行状态,在node节点执行容器健康检查
kube-proxy 组件
Kubernetes 网络代理运行在 node 上,它反映了 node 上 Kubernetes API 中定义的服务,并可以通过一组后端进行简单的TCP、UDP流转发或循环模式的TCP、UDP转发,用户必须使用apiserver API创建服务才能配置代理,其实就是kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务访问
etcd 组件
etcd 是Kubernetes默认使用的key-value数据存储系统,用于保存所有集群数据,支持分布式集群功能,生产环境使用时需要为etcd数据提供定期备份机制
网络组件
k8s中的网络主要涉及到pod的的各种访问需求,如同一pod的内部多容器通信、pod A与pod B的通信、从外部网络访问pod以及从pod访问外部网络
k8s的网络基于第三方插件实现,但是定义了一些插件兼容规范,该规范由CoreOS和Google定制的
CNI(Container Network Interface),凡是遵循CNI标准的网络插件都可以在K8S中使用。
目前常用的的CNI网络插件有calico和flannel