一、Kubernetes简介
Kubernetes是Google在2014年6月开源的一个容器集群管理系统,该系统使用Google研发的Golang语言开发。Kubernetes也被叫做k8s,因为k和s之前有8个字母。
k8s原本是Google内部一个叫Borg的容器集群管理系统衍生出来的,Borg已经在Google大规模生产运行十年之久。
k8s主要用于自动化部署、扩展和管理容器应用,它提供了资源调度、部署管理、服务发现、扩容缩容、监控等一整套功能。
Kubernetes的目标是让部署容器化应用简单高效。官网地址:https://www.kubernetes.io
二、Kubernetes主要功能
1、数据卷
在Pod中,容器之前共享数据,可以使用数据卷。这个功能与docker里volume功能相等。
2、应用程序健康检查
检查容器内的服务、进程是否异常;可以设置监控检测策略来保证应用的健壮性。
3、复制应用程序实例
控制维护Pod副本数,保证一个Pod或一组同类的Pod数始终可用。
4、弹性缩容
根据设定的指标(CPU利用率)自动缩放Pod副本数。
5、服务发现
使用环境变量或DOS服务插件保证容器中程序发现Pod入口访问地址。
6、负载均衡
一组Pod副本分配一个私有的集群IP地址,负载均衡转发请求到后端容器。在集群内部,其他Pod可通过这个ClusterIP访问应用。
7、滚动更新
更新服务不中断,异常更新一个Pod,而不是同时删除整个服务。
8、服务编排
通过文件描述部署服务,使得应用程序部署变得更高效。
9、资源监控
Node节点组件继承CAdvisor资源收集工具,可通过Heapster汇总整个集群节点资源数据,然后存储到InfluxDB时序数据库中,再由Grafana展示。
10、提供认证和授权
支持角色访问控制(RBAC)认证授权等策略。
三、基本概念
在k8s中,它的概念非常的多!而且一定要去了解这些概念,知道它的作用是必须的,你需要知道这些概念,才能更好的应用它。
1、Pod
Pod是k8s最小部署单元,一个Pod有一个或多个容器组成,Pod中容器共享存储和网络,在同一个Docker主机上运行。
官网解读:https://www.kubernetes.org.cn/kubernetes-pod
2、Service
Service一个应用服务的抽象,定义了Pod逻辑集合和访问这个Pod集合的策略。
官网解读:https://www.kubernetes.org.cn/kubernetes-services
3、Volume
数据卷,共享Pod中容器使用的数据。
官网解读:https://www.kubernetes.org.cn/kubernetes-volumes
4、Namespace
命名空间将对象逻辑上分配到不同Namespace,可以是不同的项目、用户等分区管理,并设定控制策略,从而实现多租户。
官网解读:https://www.kubernetes.org.cn/%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A%EF%BC%9Anamespace
5、Lable
标签用于区分对象(比如Pod、Service),键/值对存在;每个对象可以有多个标签,通过标签关联对象。
官网解读:https://www.kubernetes.org.cn/kubernetes-labels
四、更高层次的抽象(Controllers)
1、ReplicaSet(RS)
ReplicaSet是下一代复本控制器。
官网解读:https://www.kubernetes.org.cn/replicasets
2、Deployment(无状态应用部署)
Deployment是一个更高层次的API对象,它管理ReplicaSets和Pod,并提供声明式更新等功能。
官方建议使用Department管理ReplicaSets,而不是直接使用ReplicaSets,这就意味着可能永远不需要直接操作ReplicaSet对象。
咱们在实际应用当中,基本上都是去创建一个Deployment,然后由Deployment去创建RS和Pod等。
官网解读:https://www.kubernetes.org.cn/deployment
3、StatefulSet(有状态应用部署)
StatefulSet适合持久性的应用程序,有唯一的网络标识符(IP),持久存储,有序的部署、扩展、删除和滚动更新。
官网解读:https://www.kubernetes.org.cn/statefulset
4、DaemonSet
DaemonSet确保所有(或一些)节点运行同一个Pod。当节点加入Kubernetes集群中,Pod会被调度到该节点上运行,当节点从集群中移除时,DaemonSet的Pod会被删除。删除DaemonSet会清理它所有创建的Pod。
官网解读:https://www.kubernetes.org.cn/daemonset
5、Job
一次性任务,运行完成后Pod销毁,不在重新启动新容器。还可以任务定时运行。
官网解读:https://www.kubernetes.org.cn/job
6、CronJob
定时任务
官网解读: https://www.kubernetes.org.cn/cronjob
五、Kubernetes系统架构拓扑图
官网架构图:
自己画的图:
六、组件功能介绍
6.1、Master组件
kube-apiserver
Kubernetes API,集群的统一入口,各组件协调者。以HTTP API提供接口服务,所有对象的增删改查和监听操作都交给API Server处理后再提交给Etcd存储。
kube-controller-manager
处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。
kube-scheduler
根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
6.2、Node组件
kubelet
kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。
kube-proxy
在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。
docker或rocket/rkt
容器引擎,k8s可选的容器运行底层支持技术,一般我们都使用docker。
6.3、第三方服务
etcd
分布式键值存储系统。用于保持集群状态数据,比如Pod、Service等对象信息。