kubernetes是一个用于自动部署、扩展和管理容器化应用程序的开源系统
和一些分布式存储和分布式数据库集群类似,在k8s集群中,也存在着master节点和node节点
其中master节点主要负责pod调度、服务注册、服务发现等一系列管理相关的工作
node节点主要是部署pod,提供服务
在master节点中,有以下重要组件:
- kube-apiserver
- kube-controller-manager
- kub-scheduler
- etcd
在node节点中,有以下重要组件:
- kubelet
- kube-proxy
- docker/rocket
(1)kube-apiserver
kubernetes API,集群的统一入口,各组件的协调者,以RESTful API提供接口服务
所有对象资源的增删改查和监听操作都交给APIserver处理后提交给ETCD存储
(2)kube-controller-manager
处理集群中常规后台任务,一个资源对应一个控制器,而controller-manager就是管理这些控制器的
(3)kube-scheduler
根据调度苏算法为新创建的pod选择一个node节点部署
(4)etcd
一个golang开发的分布式key-value数据库,主要负责存储集群的状态数据、
etcd可以和多master组成一个etcd集群,也可以从master节点分离单独部署,只要保证APIserver可以访问etcd就可以
当然由于rpc的不可靠性,etcd大多数情况下是部署在master节点上
(1)kubelet
kubelet是master节点在node节点上的代理agent,管理本机容器的生命周期,比如创建容器、pod挂载数据卷、下载secret、获取容器和节点的状态等
kubelet将每个pod转换成一组容器进行部署
(2)kube-proxy
在node节点上实现pod网络代理,维护网络规划和四层负载均衡工作
(3)docker/rocket
底层容器引擎,运行和部署容器
- 最小的部署单元
- 多个容器的集合
- pod内容器共享网络和数据
- pod的生命周期短暂
- Deployment:部署无状态应用,比如一些web服务
- StatefulSet:部署有状态应用,比如mysql集群
- DaemonSet:守护进程,确保所有node都运行某个pod,比如一些监控和日志收集服务
- Job:一次性任务
- Cronjob:定时任务,比如定时清理持久化文件等
- 防止pod失联
- 定义一组pod的访问策略
最重要的学习资源就是k8s的官方文档:Kubernetes 文档 | Kubernetes
官方文档提供了很多部署案例和一些概念的深入讲解
阿里云的公开课:阿里巴巴云原生技术实践公开课-阿里云开发者社区 (aliyun.com)
CNCF x Alibaba 云原生技术公开课 - 云原生教程 - 阿里云全球培训中心 (aliyun.com)
另外就是k8s的源码学习,详见github,同时可以参考张磊的深入剖析k8s、郑东旭的k8s源码剖析