Kubernetes系列一:Kubernetes介绍

402 阅读4分钟

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添加透明代理。