扬中市建设局网站,织梦做分销网站,镇江群立网络科技有限公司,wordpress 文章 路径分布式系统通常需要租约(leases)#xff0c;租约提供了锁定共享资源和在一组成员之间协调活动的机制。 在Kubernetes中#xff0c;租约的概念由协调(k8s.io) API组中的Lease对象表示。 
在Kubernetes中#xff0c;Lease对象用于协调集群中的节点和组件之间的通信和协作。例如…分布式系统通常需要租约(leases)租约提供了锁定共享资源和在一组成员之间协调活动的机制。 在Kubernetes中租约的概念由协调(k8s.io) API组中的Lease对象表示。 
在Kubernetes中Lease对象用于协调集群中的节点和组件之间的通信和协作。例如每个节点都会创建一个Lease对象以向其他节点宣告自己的存在并定期发送心跳信号以表明其健康状态。此外Lease对象还可用于组件级别的领导者选举例如选举控制器中的主节点。 
通过使用Lease对象Kubernetes可以确保系统中的节点和组件之间的通信和协作得以平稳进行增强了集群的可靠性和稳定性。 节点心跳 
Kubernetes使用Lease API将kubelet节点心跳通信发送给Kubernetes API服务器。 对于每个节点在kube-node-lease命名空间中有一个与之匹配名称的Lease对象。在内部每个kubelet心跳都是对这个Lease对象的更新请求更新Lease的spec.renewTime字段。 Kubernetes控制平面使用这个字段的时间戳来确定该节点的可用性。 有关更多详细信息请参阅节点租赁对象 领导选举 
在Kubernetes中还使用Leases来确保每个组件在任何给定时间只运行一个实例。这在高可用配置的控制平面组件如kube-controller-manager和kube-scheduler中使用其中组件的只有一个实例应该处于活动运行状态而其他实例处于待命状态。 
在高可用配置中一般会有多个控制平面组件的副本在运行但只有一个实例应该是领导者(leader)负责主要的控制平面任务如调度和控制器管理。其他副本则处于备用状态以便在领导者实例失败时能够接管其职责。 
通过使用Lease对象Kubernetes可以进行组件级别的领导者选举确保在任何时刻只有一个实例作为领导者运行。这种机制可以提高控制平面的可用性和容错性确保在出现故障或中断时仍然能够持续地提供服务。 API服务器身份 
在Kubernetes v1.26及更高版本中每个kube-apiserver使用Lease API将其身份发布给系统的其他部分。虽然单独来说并不特别有用但这为客户端提供了一种机制可以了解有多少个kube-apiserver实例正在运行Kubernetes控制平面。kube-apiserver租约的存在为未来可能需要在每个kube-apiserver之间进行协调的功能提供了支持。 
您可以通过检查kube-system命名空间中名称为kube-apiserver-sha256哈希值的租约对象来查看每个kube-apiserver拥有的租约。或者使用标签选择器k8s.io/componentkube-apiserver 
kubectl -n kube-system get lease -l k8s.io/componentkube-apiserver
NAME                                        HOLDER                                                                           AGE
kube-apiserver-c4vwjftbvpc5os2vvzle4qg27a   kube-apiserver-c4vwjftbvpc5os2vvzle4qg27a_9cbf54e5-1136-44bd-8f9a-1dcd15c346b4   5m33s
kube-apiserver-dz2dqprdpsgnm756t5rnov7yka   kube-apiserver-dz2dqprdpsgnm756t5rnov7yka_84f2a85d-37c1-4b14-b6b9-603e62e4896f   4m23s
kube-apiserver-fyloo45sdenffw2ugwaz3likua   kube-apiserver-fyloo45sdenffw2ugwaz3likua_c5ffa286-8a9a-45d4-91e7-61118ed58d2e   4m43skubectl -n kube-system get lease
NAME                                      HOLDER                                                                          AGE
cert-manager-cainjector-leader-election   cert-manager-cainjector-7458974899-l9hpz_cfcd63cf-6563-48b4-b72b-8d7d91f11682   406d
cert-manager-controller                   cert-manager-7fc8c7b7fb-gq2bf-external-cert-manager-controller                  406d
kube-controller-manager                   xxxxxx_7cddd47d-26bc-43db-89b7-a0e94dcee37e                           3y30d
kube-scheduler                            xxxxxx_54a28a2e-a26b-4e8f-b87d-d5d5574fcfd7                           3y30d 
租约名称中使用的 SHA256 哈希基于 API 服务器所看到的操作系统主机名生成。 每个 kube-apiserver 都应该被配置为使用集群中唯一的主机名。 使用相同主机名的 kube-apiserver 新实例将使用新的持有者身份接管现有 Lease而不是实例化新的 Lease 对象。 你可以通过检查 kubernetes.io/hostname 标签的值来查看 kube-apisever 所使用的主机名 
kubectl -n kube-system get lease kube-apiserver-c4vwjftbvpc5os2vvzle4qg27a -o yaml 
apiVersion: coordination.k8s.io/v1
kind: Lease
metadata:creationTimestamp: 2022-11-30T15:37:15Zlabels:k8s.io/component: kube-apiserverkubernetes.io/hostname: kind-control-planename: kube-apiserver-c4vwjftbvpc5os2vvzle4qg27anamespace: kube-systemresourceVersion: 18171uid: d6c68901-4ec5-4385-b1ef-2d783738da6c
spec:holderIdentity: kube-apiserver-c4vwjftbvpc5os2vvzle4qg27a_9cbf54e5-1136-44bd-8f9a-1dcd15c346b4leaseDurationSeconds: 3600renewTime: 2022-11-30T18:04:27.912073Z 
kube-apiserver 中不再存续的已到期租约将在到期 1 小时后被新的 kube-apiserver 作为垃圾收集。 
你可以通过禁用 APIServerIdentity 特性门控来禁用 API 服务器身份租约。 工作负载 
你自己的工作负载可以定义自己使用的 Lease。例如 你可以运行自定义的控制器 让主要成员或领导者成员在其中执行其对等方未执行的操作。 你定义一个 Lease以便控制器副本可以使用 Kubernetes API 进行协调以选择或选举一个领导者。 如果你使用 Lease良好的做法是为明显关联到产品或组件的 Lease 定义一个名称。 例如如果你有一个名为 Example Foo 的组件可以使用名为 example-foo 的 Lease。 
如果集群操作员或其他终端用户可以部署一个组件的多个实例 则选择名称前缀并挑选一种机制例如 Deployment 名称的哈希以避免 Lease 的名称冲突。 
你可以使用另一种方式来达到相同的效果不同的软件产品不相互冲突。