• 修炼k8s+flink+hdfs+dlink(四:k8s(二)架构)


    一:节点。

    1.1 为什么使用节点。

    kubertnetes通过将容器存放在节点(node)上的Pod来执行你的工作负载。
    所以我们需要提前注册节点。

    1.2 定义。

    一组工作机器,称为节点, 会运行容器化应用程序。每个集群至少有一个工作节点。

    1.3 怎么使用node节点

    1.3.1 增加节点。

    1. 节点上的kubelet向控制面板自注册。
      –register-node 为 true
      可选参数

       --kubeconfig - 用于向 API 服务器执行身份认证所用的凭据的路径。
       --cloud-provider - 与某云驱动 进行通信以读取与自身相关的元数据的方式。
       --register-node - 自动向 API 服务器注册。
       --register-with-taints - 使用所给的污点列表 (逗号分隔的 =:)注册节点。当 register-node 为 false 时无效。
       --node-ip - 可选的以英文逗号隔开的节点 IP 地址列表。你只能为每个地址簇指定一个地址。 例如在单协议栈 IPv4 集群中,需要将此值设置为 kubelet 应使用的节点 IPv4 地址。 参阅配置 IPv4/IPv6 双协议栈了解运行双协议栈集群的详情。如果你未提供这个参数,kubelet 将使用节点默认的 IPv4 地址(如果有); 如果节点没有 IPv4 地址,则 kubelet 使用节点的默认 IPv6 地址。
       --node-labels - 在集群中注册节点时要添加的标签。 (参见 NodeRestriction 准入控制插件所实施的标签限制)。
       --node-status-update-frequency - 指定 kubelet 向 API 服务器发送其节点状态的频率。
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    2. 手动注册,添加一个node对象。
      –register-node 为 false
      可选命令

    kubectl cordon $NODENAME
    标记一个 Node 为不可调度,如果标记节点为不可调度(unschedulable),将阻止新 Pod 调度到该 Node 之上, 但不会影响任何已经在其上的 Pod。 这是重启节点或者执行其他维护操作之前的一个有用的准备步骤。

    1.3.2 删除节点。

    1. 体面关闭。
      触发锁定机制。
      在体面关闭节点过程中,kubelet 分两个阶段来终止 Pod:

       1.终止在节点上运行的常规 Pod。
       2.终止在节点上运行的关键 Pod。
      
      • 1
      • 2

    节点体面关闭的特性对应两个 KubeletConfiguration 选项:

    shutdownGracePeriod:
    指定节点应延迟关闭的总持续时间。此时间是 Pod 体面终止的时间总和,不区分常规 Pod 还是关键 Pod。
    shutdownGracePeriodCriticalPods:
    在节点关闭期间指定用于终止关键 Pod 的持续时间。该值应小于 shutdownGracePeriod。
    
    • 1
    • 2
    • 3
    • 4
    1. 非体面关闭。
      1. 不会触发锁定机制。不要设定上面俩个参数,则不会保持默认0,就是非体面关系。
      2. 非体面会出现一个问题。当某些节点关闭的时候,kubelet系欸但并未检测到这一事件,那么在关闭节点上处于statefulset的pod将停滞于终止状态。因此无法删除pod,也无法创建同名的新的pod。
        为了解决上面的问题。用户可以手动将具有 NoExecute 或 NoSchedule 效果的 node.kubernetes.io/out-of-service 污点添加到节点上,标记其无法提供服务。 如果在 kube-controller-manager 上启用了 NodeOutOfServiceVolumeDetach 特性门控, 并且节点被通过污点标记为无法提供服务,如果节点 Pod 上没有设置对应的容忍度, 那么这样的 Pod 将被强制删除,并且该在节点上被终止的 Pod 将立即进行卷分离操作。 这样就允许那些在无法提供服务节点上的 Pod 能在其他节点上快速恢复。

    在非体面关闭期间,Pod 分两个阶段终止:

    1.强制删除没有匹配的 out-of-service 容忍度的 Pod。
    2.立即对此类 Pod 执行分离卷操作。

    1.3.3 修改节点。

    1. 重新注册节点。
    2. 交换内存管理。
      1. 开启
    memorySwap:
      swapBehavior: UnlimitedSwap
    
    • 1
    • 2
         2.关闭
    
    • 1
    memorySwap:
      swapBehavior: LimitedSwap
      nodeTotalMemory:节点上可用的物理内存总量。
      totalPodsSwapAvailable:节点上可供 Pod 使用的交换内存总量 (一些交换内存可能被保留由系统使用)。
      containerMemoryRequest:容器的内存请求。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.3.4 查看节点。

    1. 状态

      1. kubectl describe node <节点名称>
        一个节点的状态包含以下信息:
        地址(Addresses)
        状况(Condition)
        容量与可分配(Capacity)
        信息(Info)
    2. 心跳
      Kubernetes 节点发送的心跳帮助你的集群确定每个节点的可用性,并在检测到故障时采取行动。对于节点,有两种形式的心跳:

      1. 更新节点的 .status
      2. kube-node-lease 名字空间中的 Lease(租约)对象。 每个节点都有一个关联的 Lease 对象。

    二:节点和控制面之间的通信。

    1. 节点到控制面。
      当 Pod 被实例化时,Kubernetes 自动把公共根证书和一个有效的持有者令牌注入到 Pod 里。 kubernetes 服务(位于 default 名字空间中)配置了一个虚拟 IP 地址, 用于(通过 kube-proxy)转发请求到 API 服务器的 HTTPS 末端。
    2. 控制面到kubelet,节点,pod。
      1. 控制面访问kubelet。
        1. 访问原因。
          1. 获取pod日志。
          2. 挂载运行中的pod(通过kubelet)
          3. 通过kubelet的接口转发功能。
        2. 访问方式。
          –kubelet-certificate-authority 标志给 API 服务器提供一个根证书包,用于 kubelet 的服务证书。
      2. 控制面访问节点,pod。
        使用http,虽然连接是加密的,仍无法提供任何完整性保证。

    三:控制器。

    1. 什么是控制器。
      对象status状态转为spec状态,需要进行调节。
      有多种控制器。
      1. job控制器。
        Job 控制器拿到新任务时,它会保证一组 Node 节点上的 kubelet 可以运行正确数量的 Pod 来完成工作。 Job 控制器不会自己运行任何的 Pod 或者容器。Job 控制器是通知 API 服务器来创建或者移除 Pod。 控制面中的其它组件 根据新的消息作出反应(调度并运行新 Pod)并且最终完成工作。
      2. 等等,例如直接控制器,自定义控制器。

    四:租约。

    1. 是什么?
      租约提供了一种机制来锁定共享资源并协调集合成员之间的活动。 在 Kubernetes 中,租约概念表示为 coordination.k8s.io API 组中的 Lease 对象, 常用于类似节点心跳和组件级领导者选举等系统核心能力。

    2. 怎么使用?
      从 Kubernetes v1.26 开始,每个 kube-apiserver 都使用 Lease API 将其身份发布到系统中的其他位置。 虽然它本身并不是特别有用,但为客户端提供了一种机制来发现有多少个 kube-apiserver 实例正在操作 Kubernetes 控制平面。kube-apiserver 租约的存在使得未来可以在各个 kube-apiserver 之间协调新的能力。

  • 相关阅读:
    【C语言】预处理
    6.Request和Response
    CentOS部署Skywalking
    躲避雪糕刺客?通过爬虫爬取雪糕价格
    神经网络应用场景——自然语言处理
    Spring面试八股文(2022最新版)
    用实践案例告诉你,什么样的人能够在网络上赚钱
    【SpringBoot应用篇】Spring Boot中ImportBeanDefinitionRegistrar接口、ImportSelector接口的作用
    设计模式——装饰者模式、桥接模式、外观模式(结构型模式)
    算法和数据结构解析-8 : 栈和队列相关问题
  • 原文地址:https://blog.csdn.net/weixin_43446246/article/details/133790974