修炼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 服务器发送其节点状态的频率。
    
  2. 手动注册,添加一个node对象。
    –register-node 为 false
    可选命令

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

1.3.2 删除节点。

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

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

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

shutdownGracePeriod:
指定节点应延迟关闭的总持续时间。此时间是 Pod 体面终止的时间总和,不区分常规 Pod 还是关键 Pod。
shutdownGracePeriodCriticalPods:
在节点关闭期间指定用于终止关键 Pod 的持续时间。该值应小于 shutdownGracePeriod。
  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
     2.关闭
memorySwap:
  swapBehavior: LimitedSwap
  nodeTotalMemory:节点上可用的物理内存总量。
  totalPodsSwapAvailable:节点上可供 Pod 使用的交换内存总量 (一些交换内存可能被保留由系统使用)。
  containerMemoryRequest:容器的内存请求。

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 之间协调新的能力。

你可能感兴趣的:(k8s,kubernetes,flink,hdfs)