zoukankan      html  css  js  c++  java
  • k8s 组件架构

    一、整体架构

    kubernetes分为 master节点和工作节点,前者是管理节点,后者是容器运行的节点。其中master节点主要有3个重要组件,分别是APIServer,sheduler和controller manager。

    工作节点 有两个组件 kubelet 和 kubelet (有时候master节点也可以既是管理节点也是工作节点)

    APIServer

    APIServer组件负责响应用户的管理请求、进行指挥协调工作

    scheduler

    scheduler组件是将待调度的pod按照一定的调度算法绑定到合适的工作节点上

    controller manager

    是一组控制器的合集,负责控制控制管理对应的资源,如副本(replication)和工作节点(node)等。

    etcd

    etcd 负责保存 Kubernetes Cluster 的配置信息和各种资源的状态信息。当数据发生变化时,etcd 会快速地通知 Kubernetes 相关组件。

     kubelet

    管理维护pod运行的agent

    kube-proxy

    将service的流量转发到对应endpoint

    flannel网络

    维持各个节点上pod之间的通信。

    kuernetes架构可以用下图来简单描述,mster节点上的APIServer将负责与master节点、工作节点上的各个组件之间交互,以及集群外用户(如kubectl命令)

    与集群的交互、在集群中处于消息收发的中心地位。其他各个组件各司其职,共同完成应用的分发,部署与运行的工作。

     二、通过示例来理解

    [root@k8s-master k8s]# kubectl run httpd-pod --image=httpd --replicas=2      
    kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
    deployment.apps/httpd-pod created
    [root@k8s-master k8s]# kubectl get deployment
    NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    httpd-pod   2         2         2            2           22s
    [root@k8s-master k8s]# kubectl get pod -o wide
    NAME                         READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE
    httpd-pod-7cdfc75664-4trb9   1/1     Running   0          32s   10.244.2.4   k8s-node1   <none>
    httpd-pod-7cdfc75664-mjm7f   1/1     Running   0          32s   10.244.1.4   k8s-node2   <none>

    上面使用run命令在命令行创建pod的方式已经不被推荐使用

    官方推荐使用如下的方式,其中第三种方式已经成为一种广泛流传的方式。

    Examples:
    # Create a pod using the data in pod.json.
    kubectl create -f ./pod.json
    
    # Create a pod based on the JSON passed into stdin.
    cat pod.json | kubectl create -f -
    
    # Edit the data in docker-registry.yaml in JSON then create the resource using the edited data.
    kubectl create -f docker-registry.yaml --edit -o json

    上面的命令 httpd-pod 是所要deployment的名称

    --image  是指定使用镜像   --replicas 指定副本的数量

    通过查看pod,发现pod分别被调度到 k8s-node1和k8s-node2节点上运行。

    详细过程:

    1.kubectl发送部署的请求到API Server

    2.API Server通知Controller Manager创建一个 deployment 资源

    3.Scheduler执行调度任务,将两个副本Pod分发到k8s-node和k8s-node2上。

    4.k8s-node1和k8s-node2上的kubelet在各自的节点上创建并运行pod。

    tips:

    1.应用的配置和当前的状态信息保存在etcd中,当执行kubectl get pod 等查询操作时 API Server会从中读取数据

    2.flannel 会为每个Pod分配IP。因为没有创建service,目前kube-proxy还没有参与进来

    为了下面的学习,需要删除节点上的pod。删除这个deployment时,pod的状态会从running变为Terminating 直至清除。

    root@k8s-master k8s]# kubectl delete deployment httpd-pod             
    deployment.extensions "httpd-pod" deleted
    [root@k8s-master k8s]# kubectl get pod -o wide            
    NAME                         READY   STATUS        RESTARTS   AGE   IP           NODE        NOMINATED NODE
    httpd-pod-7cdfc75664-4trb9   0/1     Terminating   0          12m   10.244.2.4   k8s-node1   <none>
    [root@k8s-master k8s]# kubectl get pod -o wide
    NAME                         READY   STATUS        RESTARTS   AGE   IP           NODE        NOMINATED NODE
    httpd-pod-7cdfc75664-4trb9   0/1     Terminating   0          12m   10.244.2.4   k8s-node1   <none>
    [root@k8s-master k8s]# kubectl get pod -o wide
    No resources found.
  • 相关阅读:
    【转】【SEE】基于SSE指令集的程序设计简介
    【转】【Asp.Net】asp.net服务器控件创建
    ControlTemplate in WPF ——ScrollBar
    ControlTemplate in WPF —— Menu
    ControlTemplate in WPF —— Expander
    ControlTemplate in WPF —— TreeView
    ControlTemplate in WPF —— ListBox
    ControlTemplate in WPF —— ComboBox
    ControlTemplate in WPF —— TextBox
    ControlTemplate in WPF —— RadioButton
  • 原文地址:https://www.cnblogs.com/benjamin77/p/9899952.html
Copyright © 2011-2022 走看看