中信银行网站怎么做的怎么烂手机php网站开发

当前位置: 首页 > news >正文

中信银行网站怎么做的怎么烂,手机php网站开发,柳州企业网站建设,卖彩票的网站怎么做的本文尝试从Kubernetes Controller的种类、交互逻辑、最佳实践、伪代码示例及历史演进5个方面对其进行详细阐述#xff0c;希望对您有所帮助#xff01; 一、Kubernetes Controller种类 Kubernetes Controller Manager 是 Kubernetes 集群的核心组件之一#xff0c;负责管理…本文尝试从Kubernetes Controller的种类、交互逻辑、最佳实践、伪代码示例及历史演进5个方面对其进行详细阐述希望对您有所帮助 一、Kubernetes Controller种类 Kubernetes Controller Manager 是 Kubernetes 集群的核心组件之一负责管理和协调集群内各种控制器。控制器是实现 Kubernetes 集群自动化管理的核心部分通过持续协调集群的实际状态和期望状态确保资源的正确配置和运行。 Kubernetes Controller Manager 包含多个控制器每个控制器负责特定的资源和任务。以下是一些主要控制器及其功能 Node Controller 作用监控节点的状态负责在节点不可用时执行相应的操作例如将 Pod 标记为不可调度、在节点无法通信时驱逐 Pod。 Replication Controller 作用确保指定数量的 Pod 副本在任何时候都在运行。如果 Pod 被删除或崩溃Replication Controller 会创建新的 Pod 来满足副本数要求。 Endpoint Controller 作用填充 Endpoints 对象使服务能够正确地找到相应的 Pod确保服务与后端 Pod 之间的通信。 Service Account Token Controllers 作用创建默认的 Service Account 并管理 API 访问令牌确保每个命名空间都有一个默认的 Service Account。 Namespace Controller 作用处理命名空间的创建和删除确保在删除命名空间时清理相关资源。 Job Controller 作用管理 Job 对象确保 Job 中定义的任务Pod按预期运行和完成适用于一次性任务或批处理任务。 CronJob Controller 作用管理 CronJob 对象按照预定义的时间表周期性地运行 Job。 DaemonSet Controller 作用确保每个节点上都运行一个 DaemonSet 定义的 Pod通常用于节点级别的任务例如日志收集和监控。 StatefulSet Controller 作用管理有状态应用确保有状态 Pod 的创建、删除和更新按序执行维护 Pod 的稳定网络标识和持久存储。 Deployment Controller 作用管理 Deployment 对象确保应用按期望的版本和副本数运行支持滚动更新和回滚。 ReplicaSet Controller 作用类似于 Replication Controller但功能更强大通常与 Deployment 一起使用确保指定数量的 Pod 副本在任何时候都在运行。 Horizontal Pod Autoscaler (HPA) Controller 作用根据资源使用情况例如 CPU 或内存自动扩展或缩减 Pod 数量以满足应用的需求。 Vertical Pod Autoscaler (VPA) Controller 作用根据实际资源使用情况调整 Pod 的资源请求和限制CPU 和内存提高资源利用率。 Garbage Collector Controller 作用负责清理被删除资源的相关依赖资源例如删除被删除 Pod 关联的 PersistentVolumeClaimPVC。 Certificate Signing Request (CSR) Controller 作用管理和批准/拒绝证书签名请求通常用于自动化证书管理。
这些控制器通过不断检查集群的实际状态和期望状态执行必要的操作来确保 Kubernetes 集群的稳定和可靠运行。 Kubernetes Controller Manager 包含的控制器非常多以下是一些更高级的或特定于某些功能的控制器 Ingress Controller 作用管理 Ingress 资源提供外部访问到集群内部服务的方式通过 HTTP/HTTPS 路由流量。 ResourceQuota Controller 作用管理和执行 ResourceQuota 资源确保命名空间内的资源使用不超过设定的配额。 LimitRange Controller 作用管理和执行 LimitRange 资源设置命名空间内 Pod 和容器的默认资源请求和限制。 PersistentVolume Controller 作用管理 PersistentVolume 资源确保持久存储卷的生命周期包括创建、绑定和回收。 PersistentVolumeClaim Controller 作用管理 PersistentVolumeClaim 资源确保持久存储卷正确地绑定到请求的 Pod。 StorageClass Controller 作用管理 StorageClass 资源定义不同存储提供者的存储类型和配置支持动态存储卷的创建。 Certificate Controller 作用管理 Kubernetes 内部证书的创建和分发通常与 Cert-Manager 等工具集成。 PodDisruptionBudget (PDB) Controller 作用管理 PodDisruptionBudget 资源限制计划内的 Pod 中断例如滚动更新或节点维护以确保应用的高可用性。 NetworkPolicy Controller 作用管理 NetworkPolicy 资源控制 Pod 间的网络流量增强集群的安全性。 Service Controller 作用管理 Service 资源确保服务的负载均衡和 IP 地址分配。 TTL Controller for Finished Resources 作用管理和清理已完成的 Job 和 Pod根据定义的 TTL生存时间自动删除这些资源。 EndpointSlice Controller 作用管理 EndpointSlice 资源提供比传统 Endpoints 更高效和可扩展的服务发现机制。 CSIDriver and CSINode Controllers 作用管理和协调 CSI容器存储接口驱动程序确保 CSI 驱动程序的注册和节点能力的报告。 VolumeAttachment Controller 作用管理 VolumeAttachment 资源处理动态存储卷的挂载和卸载请求。 ServiceAccountToken Controller 作用管理 ServiceAccount 令牌的创建和分发为 Pod 提供安全的 API 访问凭证。
这些控制器涵盖了 Kubernetes 集群中广泛的资源和功能通过不断协调和管理这些资源确保集群的自动化操作、资源管理和高可用性。 以下是一些更为细分和特定功能的控制器 CSIDriver Controller 作用管理 CSI 驱动程序的生命周期确保 CSI 驱动程序正确注册和使用。 CSINode Controller 作用协调 CSI 驱动程序和 Kubernetes 节点确保节点报告正确的存储能力。 VolumeSnapshot Controller 作用管理 VolumeSnapshot 和 VolumeSnapshotContent 资源支持持久卷的快照和恢复功能。 CronJob Controller 作用管理 CronJob 资源按照预定义的时间表定期运行 Job。 ResourceClaim and ResourceClaimTemplate Controllers 作用管理资源声明ResourceClaim和资源声明模板ResourceClaimTemplate用于动态分配和管理共享资源。 CustomResourceDefinition (CRD) Controller 作用管理 CRD 资源允许用户定义和使用自定义资源类型。 Event Controller 作用管理集群中的事件对象用于记录和追踪集群中的重要操作和状态变化。 Garbage Collector 作用自动清理被删除资源的相关依赖资源例如删除被删除 Pod 关联的 PersistentVolumeClaimPVC。 Priority and Fairness (PF) Controller 作用管理 API 请求的优先级和公平性确保高优先级请求得到及时处理同时防止资源耗尽。 TokenCleaner Controller 作用清理过期的服务账户令牌确保集群安全性。 PodSecurityPolicy (PSP) Controller 作用管理 Pod 安全策略控制 Pod 的安全设置和权限。 CertificateSigningRequest (CSR) Controller 作用管理和批准/拒绝证书签名请求通常用于自动化证书管理。 RuntimeClass Controller 作用管理 RuntimeClass 资源支持不同的容器运行时配置。 EndpointSlice Controller 作用管理 EndpointSlice 资源提供比传统 Endpoints 更高效和可扩展的服务发现机制。 MutatingAdmissionWebhook and ValidatingAdmissionWebhook Controllers 作用管理和执行动态准入控制策略通过 Webhook 实现对资源创建、更新的动态验证和修改。 ClusterRole and ClusterRoleBinding Controllers 作用管理集群级别的角色和角色绑定控制集群内用户和服务账户的权限。 Role and RoleBinding Controllers 作用管理命名空间级别的角色和角色绑定控制命名空间内用户和服务账户的权限。 Lease Controller 作用管理租约资源Lease用于协调集群中的主选举等分布式协调任务。 APIService Controller 作用管理 APIService 资源协调 Kubernetes API 聚合层的注册和可用性。
这些控制器共同工作确保 Kubernetes 集群的自动化管理、资源调度、安全性和高可用性。通过这些控制器Kubernetes 实现了对集群资源的全面管理和高效运行。 二、Kubernetes 主要控制器与其他组件交互示意图 示意图 交互说明 kubectl / CLI 与 API Server 的交互 用户通过 kubectl 或其他客户端工具向 API Server 发出 CRUD 操作请求创建、读取、更新、删除。 API Server 与 etcd 的交互 API Server 将集群状态存储到 etcd并从 etcd 读取状态数据。 API Server 与 Scheduler 的交互 Scheduler 从 API Server 获取未调度的 Pod确定它们的调度位置后将结果返回给 API Server。 API Server 与 Controller Manager 的交互 Controller Manager 从 API Server 获取资源状态根据控制逻辑进行必要的调整然后将更新后的状态提交回 API Server。 Controller Manager 内部控制器的交互 各控制器如 Node Controller、Replication Controller 等负责特定资源的管理通过 API Server 获取和更新状态。 API Server 与 Kubelet 的交互 Kubelet 从 API Server 获取调度到该节点的 Pod 信息管理 Pod 和容器的生命周期并将节点和 Pod 的状态报告给 API Server。 Kubelet 与 Container Runtime 的交互 Kubelet 通过 CRI 接口与容器运行时如 Docker 或 containerd通信管理容器的创建、启动、停止等操作。 Kubelet 与 Pod Network 的交互 Kubelet 配置 Pod 的网络通过 CNI 插件设置网络连接。 Kubelet 与 kube-proxy 的交互 Kube-proxy 维护网络规则和服务发现通过 API Server 获取服务信息并在节点上配置网络规则。 Controller Manager 与 Persistent Storage 的交互 Controller Manager 通过 CSI 插件管理持久存储卷的生命周期包括卷的创建、绑定和删除。
通过这样的示意图和详细说明可以更直观地理解 Kubernetes 各主要组件和控制器之间的交互关系。 三、Kubernetes Controller最佳实践 在 Kubernetes 中控制器Controller是保持系统实际状态与期望状态一致的关键组件。为了确保控制器的高效、可靠和安全运行以下是一些最佳实践 设计和实现控制器的最佳实践 Idempotency幂等性 确保控制器的操作是幂等的这意味着无论操作执行多少次结果应该是相同的。这可以避免因重复执行而产生的副作用。 Reconciliation Loop协调循环 实现一个可靠的协调循环来监控资源状态变化并采取相应行动使其达到期望状态。这个循环应该能够处理突发的事件和定期的状态检查。 Event Handling事件处理 使用 Kubernetes 提供的 Informer 和 Watch 机制来监听资源变化事件减少不必要的 API 调用提高响应速度。 Error Handling错误处理 设计可靠的错误处理机制记录错误日志避免控制器因未处理的异常而崩溃。重试机制应考虑指数退避策略exponential backoff以避免过载。 Rate Limiting限流 实施限流机制来控制控制器的执行频率防止由于频繁的重试和协调操作导致的资源消耗过大。
部署和管理控制器的最佳实践 Scalability可扩展性 确保控制器能够水平扩展Horizontal Scaling通过增加副本数来处理更多的负载。 Resource Management资源管理 为控制器设置合理的资源请求和限制CPU 和内存避免因资源耗尽导致控制器性能下降或崩溃。 Observability可观察性 实施日志记录、监控和告警机制。使用 Prometheus 监控控制器的指标确保系统运行健康。 Security安全性 使用 Kubernetes RBAC角色访问控制来限制控制器的权限仅授予其所需的最低权限Principle of Least Privilege。定期更新控制器的镜像确保使用最新的安全补丁。
开发控制器的最佳实践 Controller Libraries and Frameworks控制器库和框架 利用现有的 Kubernetes 控制器库和框架如 Kubebuilder 和 Operator SDK来简化控制器的开发和管理。 Testing测试 实施单元测试、集成测试和端到端测试确保控制器在各种条件下的正确性和稳定性。使用 Kind 或 Minikube 等本地 Kubernetes 环境进行测试模拟真实场景。 Documentation文档 提供详细的控制器文档包括架构设计、配置选项、使用指南和故障排除步骤帮助用户理解和使用控制器。
高可用性和容错的最佳实践 Redundancy冗余 部署多个副本的控制器来提高高可用性确保在单个副本失败时仍有其他副本继续工作。 Health Checks健康检查 配置 Liveness 和 Readiness 探针以便 Kubernetes 能够自动检测和恢复故障的控制器实例。 Graceful Shutdown优雅停机 实现优雅停机机制确保控制器在接收到终止信号时能够完成当前的协调任务避免中间状态不一致。
通过遵循这些最佳实践可以确保 Kubernetes 控制器的高效、可靠和安全运行有助于维护集群的稳定性和高可用性。 四、Controller伪代码实现 为了实现一个遵循最佳实践的 Kubernetes 控制器以下是一个使用 Go 语言编写的伪代码示例。该控制器监控自定义资源 Foo并确保每个 Foo 对象对应一个名为 bar-{fooname} 的 ConfigMap 存在。 完整的 Go 语言实现 Kubernetes 控制器伪代码 package mainimport (contextfmtlogtimemetav1 k8s.io/apimachinery/pkg/apis/meta/v1corev1 k8s.io/api/core/v1k8s.io/client-go/informersk8s.io/client-go/kubernetesk8s.io/client-go/restk8s.io/client-go/tools/cachek8s.io/client-go/util/retryk8s.io/client-go/util/workqueuek8s.io/apimachinery/pkg/util/wait )// FooController 定义控制器结构体 type FooController struct {clientset *kubernetes.Clientsetinformer cache.SharedIndexInformerworkqueue workqueue.RateLimitingInterface }// NewFooController 创建新的控制器实例 func NewFooController(clientset *kubernetes.Clientset, informer cache.SharedIndexInformer) *FooController {workqueue : workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), Foo)informer.AddEventHandler(cache.ResourceEventHandlerFuncs{AddFunc: func(obj interface{}) {key, err : cache.MetaNamespaceKeyFunc(obj)if err nil {workqueue.Add(key)}},UpdateFunc: func(oldObj, newObj interface{}) {key, err : cache.MetaNamespaceKeyFunc(newObj)if err nil {workqueue.Add(key)}},DeleteFunc: func(obj interface{}) {key, err : cache.DeletionHandlingMetaNamespaceKeyFunc(obj)if err nil {workqueue.Add(key)}},})return FooController{clientset: clientset,informer: informer,workqueue: workqueue,} }// Run 启动控制器 func (c *FooController) Run(stopCh -chan struct{}) {defer c.workqueue.ShutDown()go c.informer.Run(stopCh)if !cache.WaitForCacheSync(stopCh, c.informer.HasSynced) {log.Fatalf(Error syncing cache)return}wait.Until(c.runWorker, time.Second, stopCh) }// runWorker 处理队列中的项目 func (c *FooController) runWorker() {for c.processNextItem() {} }// processNextItem 处理队列中的下一个项目 func (c *FooController) processNextItem() bool {key, quit : c.workqueue.Get()if quit {return false}defer c.workqueue.Done(key)err : c.syncHandler(key.(string))if err ! nil {c.workqueue.AddRateLimited(key)} else {c.workqueue.Forget(key)}return true }// syncHandler 同步资源状态 func (c *FooController) syncHandler(key string) error {namespace, name, err : cache.SplitMetaNamespaceKey(key)if err ! nil {return fmt.Errorf(invalid resource key: %s, key)}// 获取 Foo 对象foo, err : c.informer.GetIndexer().ByNamespace(namespace).Get(name)if err ! nil {if cache.IsNotFound(err) {// Foo 对象已被删除return nil}return err}// 确保对应的 ConfigMap 存在configMapName : fmt.Sprintf(bar-%s, name)configMap, err : c.clientset.CoreV1().ConfigMaps(namespace).Get(context.TODO(), configMapName, metav1.GetOptions{})if err ! nil {if cache.IsNotFound(err) {// 创建 ConfigMapconfigMap corev1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Name: configMapName,Namespace: namespace,},Data: map[string]string{foo: name,},}, err c.clientset.CoreV1().ConfigMaps(namespace).Create(context.TODO(), configMap, metav1.CreateOptions{})if err ! nil {return err}} else {return err}}return nil }func main() {config, err : rest.InClusterConfig()if err ! nil {log.Fatalf(Error building kubeconfig: %s, err.Error())}clientset, err : kubernetes.NewForConfig(config)if err ! nil {log.Fatalf(Error building kubernetes clientset: %s, err.Error())}informerFactory : informers.NewSharedInformerFactory(clientset, time.Minute)fooInformer : informerFactory.Core().V1().ConfigMaps().Informer()controller : NewFooController(clientset, fooInformer)stopCh : make(chan struct{})defer close(stopCh)go controller.Run(stopCh)-stopCh }代码说明 初始化控制器 NewFooController 函数初始化控制器设置事件处理程序将资源事件添加到工作队列。 运行控制器 Run 方法启动控制器运行 Informer 并同步缓存然后启动工作线程处理队列中的项目。 处理队列中的项目 runWorker 方法从队列中提取项目并调用 processNextItem 处理它们。processNextItem 方法调用 syncHandler 同步资源状态并根据处理结果决定是否重新调度该项目。 同步资源状态 syncHandler 方法获取 Foo 对象并确保对应的 ConfigMap 存在。如果不存在则创建它。
最佳实践 Idempotency幂等性确保每次处理同一个资源时结果是一致的不会产生副作用。Reconciliation Loop协调循环通过 syncHandler 实现协调循环保持实际状态与期望状态一致。Event Handling事件处理使用 Informer 监听资源变化减少 API 调用。Error Handling错误处理通过重试机制处理错误并使用速率限制器防止过载。Rate Limiting限流使用 RateLimitingInterface 控制工作队列的处理速率。Scalability可扩展性使用工作队列和多工作线程提高处理能力。Resource Management资源管理在实际部署时应设置合理的资源请求和限制。Observability可观察性记录日志在实际实现中应添加日志记录和监控指标。Security安全性使用适当的 RBAC 配置确保控制器仅有必要的权限。 五、Kubernetes Controller历史演进 Kubernetes Controller Manager 作为 Kubernetes 集群的核心组件之一其功能和架构在不同版本的 Kubernetes 中不断演进。以下是 Kubernetes Controller Manager 的历史演进概述 初期阶段 (v1.0 之前) 在 Kubernetes 的早期版本中Controller Manager 的概念并不明确。早期的控制器逻辑直接内置在 API Server 中负责管理 Pod 和其他资源的生命周期。随着 Kubernetes 的发展控制器逻辑逐渐被抽象和独立出来形成了一个单独的组件。 v1.0 (2015) 单一二进制最初所有控制器都是作为一个单一的二进制文件 kube-controller-manager 运行。这种设计简化了部署和管理但缺乏灵活性。基本控制器包括 Node Controller、Replication Controller、Endpoint Controller 和 Service Account Controller 等基本控制器。 v1.2 (2016) Horizontal Pod Autoscaler (HPA)引入了 HPA 控制器用于基于 CPU 使用率自动扩展 Pod 数量。 v1.5 (2016) CustomResourceDefinition (CRD)替换了 ThirdPartyResource (TPR)允许用户定义自定义资源。CRD 控制器负责管理这些自定义资源。StatefulSet Controller引入 StatefulSet 控制器用于管理有状态应用确保有序和稳定的 Pod 部署。 v1.6 (2017) Multiple Schedulers引入了对多调度器的支持允许用户使用自定义调度器。PodDisruptionBudget (PDB)引入 PDB 控制器限制计划内的 Pod 中断以确保应用的高可用性。 v1.8 (2017) Taints and Tolerations增强了调度功能引入了污点和容忍允许节点标记不适合运行某些 Pod 的原因。 v1.9 (2017) Workloads API 组引入了新的工作负载 API 组包括 Deployment、DaemonSet 和 StatefulSet 等简化了工作负载管理。 v1.10 (2018) Volume Snapshots引入 VolumeSnapshot 和 VolumeSnapshotContent 控制器支持持久卷的快照和恢复功能。 v1.12 (2018) Topology Aware Volume Scheduling改进了持久卷调度考虑到存储卷的拓扑要求以优化性能。 v1.14 (2019) Cluster API引入 Cluster API 控制器用于管理 Kubernetes 集群的生命周期创建、升级、删除。 v1.16 (2019) Custom Metrics扩展 HPA 控制器支持基于自定义指标的自动扩展。 v1.18 (2020) EndpointSlice引入 EndpointSlice 控制器提供比传统 Endpoints 更高效和可扩展的服务发现机制。 v1.19 (2020) CSI Volume Health Monitoring改进了 CSI 控制器添加了卷健康监控功能。 v1.20 (2020) Storage Capacity Tracking增强了存储调度支持跟踪和报告存储容量。 v1.21 (2021) Immutable Secrets and ConfigMaps引入不可变的 Secrets 和 ConfigMaps提高集群的安全性和性能。 v1.22 (2021) PodSecurityPolicy (PSP) Deprecated宣布弃用 PodSecurityPolicy逐步引入新的安全策略机制。 v1.23 (2021) CronJob ControllerCronJob 控制器正式成为稳定版用于管理定时任务。 v1.24 (2022) PodSecurity Admission引入 Pod 安全准入控制器取代 PSP提供灵活的 Pod 安全策略。 v1.25 (2022) Dynamic Resource Allocation引入动态资源分配控制器支持共享资源的动态分配和管理。 总结 Kubernetes Controller Manager 的演进体现了 Kubernetes 不断扩展和增强其功能以满足各种需求的过程。随着 Kubernetes 的发展Controller Manager 添加了许多新功能和控制器以更好地管理和调度集群资源提升系统的自动化和智能化水平。这些演进帮助 Kubernetes 成为一个强大且灵活的容器编排平台。 完。 希望对您有用关注锅总及时获得更多花里胡哨的运维实用操作
锅总微信公众号 锅总个人博客 https://gentlewok.blog.csdn.net/