基础篇主要面向的初级、中级开发工程师职位,主要考察对k8s本身的理解。
- kubernetes包含几个组件。各个组件的功能是什么。组件之间是如何交互的。
该题主要考察的是对k8s组件的理解:
这个问题从两个角度回答,一是从官方介绍中,二是从部署中。 官方文档参照 。
Master作为控制节点,调度管理整个系统,包含以下组件:
Api Server:为集群的核心组件,主要负责集群各功能模块之间的通信,集群内的功能模块通过Api server将信息存入到分布式文件系统etcd中与其他节点进行信息交互。
Scheduler:负责集群的资源调度,跟踪集群中所有Node的资源利用情况,对新创建的pod,采取合适的调度策略,进行均衡的调度到合适的节点上。
Controller Manager:主要负责集群的故障检测和恢复的自动化,它内部的组件如下:
endpointController:定期关联service和pod,关联信息由endpoint负责创建和更新。
ReplicationController:完成pod的复制或移除,以确保ReplicationController定义的复本数量与实际运行pod的数量一致性
cloud-controller-manager 是提供给第三方开发k8s特性的。
其中controller又包含:
Node Controller 报告节点健康状态。
Replication Controller 维护rc的pod个数,pod挂掉又控制重启。
Endpoints Controller 填充Endpoint对象,主要是给Service和Pod。
Service Account & Token Controllers 创建帐号和Token。
Node:是集群中的工作主机,Node可以是物理主机,也可以是虚拟机,包含以下组件:
kubelet:运行在每个Node节点上,kubelet会通过api service 注册节点自身信息,用于master发现节点,它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器,并定期向master节点汇报节点资源的使用情况,内部集成cadvise来监控容器和节点资源。
Kube Proxy:负责为pod提供代理。它会定期从etcd获取所有的service,并根据service信息创建代理。当某个客户pod要访问其他pod时,访问请求会经过本机proxy做转发
container runtime 容器运行环境,如Docker等。
应用: 应用都是部署在kube-system这个命名空间下的。如:
DNS dns服务。
Dashboard web管理界面。
Container Resource Monitoring 容器资源管理和监控,如cAdvisor、Prometheus。
Cluster-level Logging 日志收集分节点、集群、应用三种类型,可用elk或fluentd等。
部署 可参考 https://github.com/xishengcai/k8s-learn https://github.com/gjmzj/kubeasz