kubernetes節點選擇器

很久沒有更新了,今天在接到一個部署任務時,要求在集羣中某幾個機器上部署,查了一下github,有這方面的相關文檔,翻譯過來記錄一下,有興趣的同窗也能夠直接去github看官方文檔node

單節點部署

單節點部署使用nodeName字段進行配置。在啓動的json/yaml文件中,pod的spec結構下增長字段:"nodeName":"{nodename}"git

咱們能夠在master上經過指令: kubectl get nodes看到集羣中的slaver節點的nodeName和他們的標籤,狀態:github

clipboard.png

在建立pod或rc時,加入nodeName便可以指定將pod部署在指定的節點上,上圖爲例,json文件如:shell

{
    "apiVersion": "v1",
    "kind": "ReplicationController",
    "metadata": {
        "labels": {
            "name": "benchcpu"
        },
        "name": "benchcpu-controller"
    },
    "spec": {
        "replicas": 3,
        "selector": {
            "name": "benchcpu"
        },
        "template": {
            "metadata": {
                "labels": {
                    "name": "benchcpu"
                }
            },
            "spec": {
                "containers": [
                    {
                        "image": "registry.hub.huangyang.com.cn/sysbench:0.5shell",
                        "name": "sysbench",
                        "command":[
                            "./todo.sh",
                            "--num-threads=1 --forced-shutdown=1 --max-time=60 --test=cpu --cpu-max-prime=10000000 run ",
                            "0"
                        ]
                    }
                ],
                 "nodeName": "10.126.72.31"
            }
        }
    }
}

那麼這個名爲bench的replication controller 就會將全部的pod都部署在10.126.72.31上。json

指定若干機器進行部署

將slaver節點機器按照它們的labels進行歸類。使用"nodeSelector"進行選擇。api

  1. 管理node的標籤
    使用kubectl label nodes {nodename} {key=value} 進行標籤的添加。如:ide

kubectl  label nodes 10.126.72.31 points=test

會給10.126.72.31這個節點添加一個標籤:points=testui

咱們給31.32兩臺機器同時加上這個標籤。spa

  1. 使用nodeSelector選擇器
    相似於上文的nodeName,在建立資源的json/yaml文件中使用nodeSelector字段,如:翻譯

{
    "apiVersion": "v1",
    "kind": "ReplicationController",
    "metadata": {
        "labels": {
            "name": "benchcpu"
        },
        "name": "benchcpu-controller"
    },
    "spec": {
        "replicas": 3,
        "selector": {
            "name": "benchcpu"
        },
        "template": {
            "metadata": {
                "labels": {
                    "name": "benchcpu"
                }
            },
            "spec": {
                "containers": [
                    {
                        "image": "registry.hub.huangyang.com.cn/sysbench:0.5shell",
                        "name": "sysbench",
                        "command":[
                            "./todo.sh",
                            "--num-threads=1 --forced-shutdown=1 --max-time=60 --test=cpu --cpu-max-prime=10000000 run ",
                            "0"
                        ]
                    }
                ],
                 "nodeSelector":{
                    "points":"test"
                 }
            }
        }
    }
}

便可將pod指定到31或32上部署運行。

須要注意

不管是nodeName,nodeSelector,仍是下文提到的 node affinity,針對他們的過濾條件,即便目前沒有知足過濾條件的node,master也會指派至少一個node去部署pod,由於選擇器的意思是選擇「能夠被分配到的節點」,而不是指定「不可被分配到的節點」。

1.2中的新特性:node affinity

1.2即將出現功能更強大的選擇器,可是目前已知,能夠實現如: label:"points":"test"and"test2" 的多項選擇(也就是選擇label中"points"的value爲"test" 或 "test2", 而且不止是"and",而是與或非的聯合判斷式),node affinity最終將會取代 node Selector。

相關文章
相關標籤/搜索