• 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.
  • 相关阅读:
    Linux下管道编程
    【Windows】用信号量实现生产者-消费者模型
    初识【Windows API】--文本去重
    HDU 5183 Negative and Positive (NP) --Hashmap
    【ASC 23】G. ACdream 1429 Rectangular Polygon --DP
    UVALive 4670 Dominating Patterns --AC自动机第一题
    POJ 2225 / ZOJ 1438 / UVA 1438 Asteroids --三维凸包,求多面体重心
    我也来写2014年总结
    UVALive 4870 Roller Coaster --01背包
    UVALive 4864 Bit Counting --记忆化搜索 / 数位DP?
  • 原文地址:https://www.cnblogs.com/benjamin77/p/9899952.html
Copyright © 2020-2023  润新知