• 静态Pod、Pod创建流程、容器资源限制


    静态Pod、Pod创建流程、容器资源限制

    静态Pod

    静态容器具有以下特点:

    • Pod由特定节点上的kubelet管理;
    • 不能使用控制器;
    • Pod名称标识当前节点名称。

    在kubelet配置文件中启用静态Pod的参数:

    vi /var/lib/kubelet/config.yaml
    ...
    staticPodPath: /etc/kubernetes/manifests
    
    • 1
    • 2
    • 3

    将部署的pod.yaml放到该目录下会由kubelet自动创建。

    K8S组件中除了kubelet以外都是以容器形式运行的。在K8S集群搭建好之前,只能通过上面的方式由kubelet创建静态Pod。

    Master节点部署的组件有api-servercontroller-managerscheduleretcdNode节点部署的组件有kube-proxykubeletdocker

    [root@k8s-master ~]# kubectl get pods -n kube-system
    NAME                                       READY   STATUS    RESTARTS          AGE
    calico-kube-controllers-5c64b68895-kthkh   1/1     Running   4 (6h16m ago)     8d
    calico-node-6mxfm                          1/1     Running   4 (6h16m ago)     8d
    calico-node-nzn8p                          1/1     Running   150 (6h16m ago)   8d
    calico-node-vg6s9                          1/1     Running   4 (6h16m ago)     8d
    coredns-6d8c4cb4d-k9245                    1/1     Running   4 (6h16m ago)     8d
    coredns-6d8c4cb4d-xzl49                    1/1     Running   4 (6h16m ago)     8d
    etcd-k8s-master                            1/1     Running   4 (6h16m ago)     8d
    kube-apiserver-k8s-master                  1/1     Running   4 (6h16m ago)     8d
    kube-controller-manager-k8s-master         1/1     Running   4 (6h16m ago)     8d
    kube-proxy-58kfs                           1/1     Running   5 (6h16m ago)     8d
    kube-proxy-75z28                           1/1     Running   4 (6h16m ago)     8d
    kube-proxy-f9522                           1/1     Running   4 (6h16m ago)     8d
    kube-scheduler-k8s-master                  1/1     Running   4 (6h16m ago)     8d
    metrics-server-798c598bb8-j69cc            1/1     Running   3 (6h16m ago)     6d19h
    
    [root@k8s-master ~]# kubectl get deploy -n kube-system
    NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
    calico-kube-controllers   1/1     1            1           8d
    coredns                   2/2     2            2           8d
    metrics-server            1/1     1            1           6d19h
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    可以发现,etcd-k8s-masterkube-apiserver-k8s-masterkube-controller-manager-k8s-masterkube-scheduler-k8s-master都是以master节点的名称结束的,并且没有对应的控制器。

    实际上,master节点的这四个组件都是由本节点kubelet直接管理的静态Pod部署。

    [root@k8s-master ~]# grep staticPod /var/lib/kubelet/config.yaml
    staticPodPath: /etc/kubernetes/manifests
    [root@k8s-master ~]#
    [root@k8s-master ~]# ls /etc/kubernetes/manifests/
    etcd.yaml  kube-apiserver.yaml  kube-controller-manager.yaml  kube-scheduler.yaml
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Pod创建流程

    k8s基于list-watch机制的控制器架构,实现组件间交互的解耦。其他组件监控自己负责的资源,当这些资源发生变化时,kube-apiserver会通知这些组件,这个过程类似于发布订阅

    从我们发出命令开始,一个Pod被创建的大致流程如下:

    1. 所有使用kubectl发出的命令都会发送给api-server,后者接收后将其写入etcd中。
    2. etcd写入成功即向api-server返回写入成功的消息,否则会返回错误信息。
    3. api-server通知调度器scheduler把要创建的Pod分配到合适的节点上。
    4. scheduler选择好目标节点后,打上标记,并将结果上报给api-server
    5. api-server收到scheduler反馈的Pod-Node绑定信息后,将其写入etcd
    6. api-server通知目标node节点上的kubelet组件创建Pod。
    7. 目标节点上的kubelet组件调用docker或者其他容器引擎来创建容器,并将创建结果信息上报给api-server
    8. api-server将收到的Pod创建结果信息写入etcd

    由于创建一个单独的Pod时不会使用到控制器,所以上面的过程中没有涉及到controller-manager。此外,也没有创建Service,所以也不涉及到kube-proxy组件。

    容器资源限制

    通过以下两个属性来限制容器能够使用的CPU和内存资源的上限

    • resources.limits.cpu
    • resources.limits.memory

    通过以下两个属性来设置容器使用的最小资源需求(下限),作为容器调度时资源分配的依据:

    • resources.requests.cpu
    • resources.requests.memory

    k8s会根据requests的值去寻找有足够可用资源的节点来调度Pod。

    注意事项:

    • 没有配置资源限制时,容器可以使用所在节点的所有资源。
    • limits一般低于节点配置的20%。
    • requests的值必须小于limits,一般低于limits的20%到30%。
    • 只设置limits限制时,requests默认也会采用limits的值。
    • requests是预留性质的资源,容器运行时实际使用的资源可能小于requests。
    • 如果requests配置过高,就会导致节点分配的Pod过少,会导致资源空闲。
    • 如果requests配置过低,就会导致节点分配的Pod过多,可能会导致资源饱和。
    • CPU资源计量单位为毫核,1核CPU=1000m,0.5=500m。

    查看当前节点的资源分配情况(Allocated resources):

    kubectl describe node k8s-node1
    
    • 1
  • 相关阅读:
    Java二维数组
    【爬虫】7.2. JavaScript动态渲染界面爬取-Selenium实战
    jupylab pandas按条件批量处理xls数据
    firefly-rk3399开发板100篇 之 003 学习firefly-rk3399 wiki中gpio操作 之 控制GPIO
    什么是微网格?微网格规划应考虑哪些因素?
    49.集群节点维护—滚动升级-2
    python最常用的三种输出格式
    返回当前系统串口名称
    【Rust日报】2023-09-15 RustRover:JetBrains单行版Rust IDE
    MQTT协议详解
  • 原文地址:https://blog.csdn.net/Sebastien23/article/details/126091968