美文网首页Python/Go
Kubernetes Python Client 初体验之nod

Kubernetes Python Client 初体验之nod

作者: lippon | 来源:发表于2019-10-25 14:09 被阅读0次

    今天讲一下k8s中对于各个实物节点node的操作。
    首先是获取所有nodes信息:

    self.config.kube_config.load_kube_config(config_file="kubeconfig.yaml")
    print(self.coreApi.list_node())
    

    函数返回的是一个名为kubernetes.client.models.v1_node_list.V1NodeList类型的数据,每个节点信息分别存储在其items属性中,items是一个List类型的数据。以此,编写了以下几个经常用到的node数据获取的API。

        def get_all_nodes(self):
            """
            :rtype: V1NodeList
            """
            return self.coreApi.list_node()
    
        def get_nodes_num(self):
            """
            :rtype: int
            """
            return len(self.get_all_nodes().items)
    
        def get_all_nodes_name(self):
            """
            :rtype: list
            """
            names = []
            for item in self.get_all_nodes().items:
                names.append(item.metadata.name)
    
            return names
    
        def get_node_label_value(self, nodes, label):
            """
            :type nodes: str
            :type label: str
            :rtype: str
            """
            try:
                i = self.get_all_nodes_name().index(nodes)
                return self.get_all_nodes().items[i].metadata.labels[label]
            except ValueError:
                return None
    

    如果需要其他不同的数据,可以自己打印get_all_nodes()的返回数据,然后定位,不外乎是数组和字典的形式。

    Label是Kubernetes系统中的一个核心概念。Label以key/value键值对的形式附加到任何对象上,如Pod,Service,Node,RC(ReplicationController)/RS(ReplicaSet)等。Label可以在创建对象时就附加到对象上,也可以在对象创建后通过API进行额外添加或修改。

    在对于pods的调度过程中,我们常常需要用到kubernetes的label功能,它分为nodes节点上的label和pod部署是YML文件中的label。当部署文件中选择器的label内容和node上的满足一定关系式,pods才能够被成功部署到该节点。
    在上面提供的API中,我们已经能能够读取node的label值了,下面我们试着修改它。
    AP如下:

        def push_node_label_value(self, node, label, value):
            """
            :type node: str
            :type label: str
            :type value: str
            """
            body = {
                "metadata": {
                    "labels": {
                        label: value
                    }
                }
            }
    
            if node in self.get_all_nodes_name():
                self.coreApi.patch_node(node, body)
            else:
                print("nods is not exist")
    

    为了验证label是否已经真的被修改,我首先获取当前的节点label值。在master节点上执行以下命令:

    kubectl get nodes --show-labels
    

    取出其中node01的输出结果如下图:


    第一次结果

    执行函数:

    push_node_label_value("node01", "hardwareType", "arm64")
    

    之后重新查看label,得到下图


    第二次结果

    发现label成功被修改。

    相关文章

      网友评论

        本文标题:Kubernetes Python Client 初体验之nod

        本文链接:https://www.haomeiwen.com/subject/fapsvctx.html