1 Kubernetes架构与核心组件
Kubernetes已经成为云原生时代的操作系统
Kubernetes架构与核心组件:
Master 节点
Master 是 Cluster 的大脑,控制节点 运行 apiserver、 etcd、controller-manager、scheduler 等组件 。主要职责:资源管理 CRUD、调度、认证鉴权、数据存储
Worker 节点
运行容器应用,由 Master 管理。接收 Master 节点的各类请求,进行容器的生命周期管理 。将运行在上面的容器应用和资源上报到 Master 节点。
APIServer
- 整个集群管理的 API 接口,所有对集群的操作和查询都需要经过 apiserver。
- 集群内各个模块通信的枢钮,集群内其他模块通过 apiserver 打交道。
- 集群安全控制,apiserver 提供了集群的安全验证,和角色权限分配 。
- 连接 etcd,集群内所有组件都不能直接连接 etcd 只能通过 apiserver 连接 etcd 。
ETCD
- CoreOS团队开发,一个应用在分布式环境下的 key/value 存储服务
- Kubernetes 用 etcd 存储包括各种对象的状态和元数据信息
- 网络插件用 etcd 存储网络的配置信息
Controller-Manager
理解 Controller Manager 的作用需要先理解控制回路的概念。 控制回路(Control Loop)是一个非终止回路,用于调节系统状态。广泛 用于机器人技术和自动化领域。
Controller Manager 就是这样一组 Controller 的集合,它们负责:
- 负责集群的故障检测和修复
- 根据 Workloads 的定义,维持正确的Pod副本数
- 根据 Service 与 Pod 的对应关系,完成 Service 的 Endpoints对象的创 建和更新
- 为新的Namespace创建帐户和 API 访问 Token
- ……
scheduler
Scheduler 负责 Pod 的调度,其作用是按照特定的调度算法和策略, 将 Pod 绑定到集群中某个合适的 Node上。
调度并创建 Pod 的工作流程:
- 为待调度 Pod 选择最合适的 Node
- 将 Pod 与 Node 的绑定信息写入 etcd
- Node 上的 kubelet 组件监听到 Pod 绑定事件后,创建Pod
Scheduler 的默认调度流程:
- 预选过程,即遍历所有目标 Node,根据预选策略筛选出符合要 求的节点,如果此时没有筛选出合适的节点则 Pod 会进入 Pending 状态,不断重试调度,直到有合适节点为止。
- 优选过程,按照优选策略计算候选 Node 的积分,选出得分最高 的 Node。
kubelet
Kubelet 是连接 Master 和各个 Worker 节点之间的桥梁,也是Worker 上容器的管理 Agent,集群的每个 Node 节点都会启动一个kubelet 进程。
节点管理:kubelet 在启动时会通过 API Server 注册节点信息,并定时向 API Server 更新节点的信息,API Server 将接收到的信息写入 etcd。
Pod管理:kubelet 通过 API Server watch etcd,所有针对Pod 的操作都会被 kubelet watch 到,并针对 Pod 或Pod 中的容器进行相应的操作。
健康检查:kubelet 定期通过容器中定义的探针对容器进行健康检查,诊断容器的健康状态。
……
Kube-proxy
用于实现端口映射和负载均衡:可以看作 Service 的透明代理 及负载均衡器,其核心功能是通过创建对应的转发规则,将到 某个 Service 的访问请求转发到后端的多个 Pod 实例上。 Kube-proxy 有两种模式:
- iptables
- ipvs
Addon插件
- CoreDNS:负责为整个集群提供DNS服务
- Ingress Controller:为服务提供外网入口
- Metrics Server:提供资源监控指标
- Dashboard:提供GUI
分别对接不同的后端,实现灵活控制:
- CRI(Container Runtime Interface): 容器引擎接口,提供计算资源
- CNI(Container Network Interface): 容器网络接口,提供网络资源
- CSI(Container Storage Interface): 容器存储接口,提供存储资源
2 kubernetes相关概念
2.1操作Kubernetes集群的方式:
- 通过APIs
- 通过kubectl
- 通过dashboard
2.2 Label介绍
Label是识别Kubernetes对象的标签,也是不同资源之间互相关联的方式。以key/value的方式附加到对象上。
Label定义好后其他对象可以使用Label Selector来选择一组相同label的对象(比如
ReplicaSet和Service用label来选择一组Pod)。Label Selector支持以下几种方式:
- 等式,如app=nginx和env!=production
- 集合,如env in (production, qa)
- 多个label(它们之间是AND关系),如app=nginx,env=test
设置label: kubectl label node node-1 disktype=ssd
删除service: kubectl delete service service_name
查看设置的label: kubectl get node --show-labels
2.3 Annotation介绍
Annotation是注解。Annotation可以将Kubernetes资源对象关联到任意的非标识性元
数据。使用客户端(如工具和库)可以检索到这些元数据。
应用场景:通过检索并匹配annotation字段实现一些特定的操作,如istio通过给有对应
annotation字段的POD添加透明代理。