如何在Rancher 2.0 TP2 Kubernetes集羣中添加自定義節點

Rancher是一個開源的全棧化企業級容器管理平臺,用戶在Rancher可視化界面上以點選的方式,即可一鍵完成所有容器基礎設施(網絡、存儲、負載均衡等)的對接與部署,確保容器在任何基礎架構上(公私有云、虛擬機、物理機等)無縫運行。只需簡單直觀的操作,即可搞定在生產環境中使用容器的一切工作。
 
從Rancher 2.0開始,Rancher中的每個集羣都將基於Kubernetes。用戶可以充分利用Kubernetes的強大性能及其迅速壯大的生態系統,而通過Rancher平臺上基於Kubernetes的、簡單直觀的用戶體驗,Rancher 2.0將加快Kubernetes在企業中的普及。
 
如何在Rancher 2.0 TP2 Kubernetes集羣中添加自定義節點
 
2018年2月發佈的Rancher 2.0 的第二個里程碑版本Tech Preview 2,支持用戶在創建RKE集羣時添加自定義節點。用戶可以通過運行生成的docker run命令啓動rancher/agent容器,或通過將SSH連接到該節點來添加自定義節點(已經配置了Linux操作系統和Docker的節點)。在本文中,我們將演示如何使用docker run命令自動生成命令以添加節點。
 
注意:Rancher 2.0現階段發佈版本均爲技術預覽,尚不適合用於生產環境,建議您不要將您的生產工作負載放在上面。
 
要求
 
›運行Linux和Docker的主機
›安裝了JSON實用程序jq,以解析API響應
›sha256sum二進制文件,用於計算CA證書校驗和
 

啓動Rancher Server

 
在執行任何操作之前,我們首先需要啓動rancher / server容器。Rancher 2.0 Tech Preview 2的鏡像是rancher/server:preview。從1.6到2.0的一個變化是,我們不再公開端口8080。相反,我們公開端口80和443,其中,80默認重定向到443。您可以按如下方式啓動容器:
 

docker run -d -p 80:80 -p 443:443 rancher/server:preview

 
如果您希望此設置的數據持久存在,您可以將主機卷安裝到/ var / lib / rancher,如下所示:
 
docker run -d -p 80:80 -p 443:443 -v /data:/var/lib/rancher rancher/server:preview
 
登錄並創建API密鑰
 
在Rancher 1.x中,默認情況下沒有啓用認證。啓動rancher/server容器後,用戶無需任何憑據就可以訪問API / UI。在Rancher 2.0中,我們用默認用戶名和密碼管理來啓用身份驗證。登錄後,我們將獲得一個不記名的token,我們可以用它來更改密碼。更改密碼後,我們將創建一個API密鑰以執行其他請求。API密鑰也是一個不記名token,我們稱其爲用於自動化目的的自動化。
 
登錄
 

# Login
LOGINRESPONSE=`curl -s 'https://127.0.0.1/v3-public/localProviders/local?action=login' -H 'content-type: application/json' --data-binary '{"username":"admin","password":"admin"}' --insecure`
LOGINTOKEN=`echo $LOGINRESPONSE | jq -r .token`

 
更改密碼(將密碼改爲thisisyournewpassword)
 

# Change password
curl -s 'https://127.0.0.1/v3/users?action=changepassword' -H 'content-type: application/json' -H "Authorization: Bearer $LOGINTOKEN" --data-binary '{"currentPassword":"admin","newPassword":"thisisyournewpassword"}' --insecure

 
創建API密鑰
 

# Create API key
APIRESPONSE=`curl -s 'https://127.0.0.1/v3/token' -H 'content-type: application/json' -H "Authorization: Bearer $LOGINTOKEN" --data-binary '{"type":"token","description":"automation"}' --insecure`

 

# Extract and store token
APITOKEN=`echo $APIRESPONSE | jq -r .token`

 
創建集羣
生成API密鑰匙後,就可以開始創建集羣了。創建集羣時,您有3個選項:
 
›啓動一個雲集羣(谷歌Kubernetes Engine/GKE)
›創建一個集羣(用我們自己的Kubernetes安裝程序,Rancher Kubernetes Engine)
›導入現有集羣(如果您已經有了Kubernetes集羣,則可以通過從該集羣插入kubeconfig文件導入)
 
拿本文來說,我們將使用Rancher Kubernetes Engine (rke)創建一個集羣。當您創建一個集羣時,可以選擇在創建集羣時直接創建新節點(通過從像DigitalOcean / Amazon這樣的雲提供商創建節點)或使用已存在的節點,並讓Rancher用SSH憑證連接到節點。我們在本文中討論的方法(通過運行docker run命令添加節點)僅在創建集羣之後纔可用。
 
您可以使用以下命令創建集羣(您的新集羣)。如您所見,此處僅包含參數ignoreDockerVersion(忽略Kubernetes不支持的Docker版本)。其餘的將是默認的,我們將會在後續文章中討論。在此之前,您可以通過UI發現可配置選項。
 

# Create cluster
CLUSTERRESPONSE=`curl -s 'https://127.0.0.1/v3/cluster' -H 'content-type: application/json' -H "Authorization: Bearer $APITOKEN" --data-binary '{"type":"cluster","nodes":[],"rancherKubernetesEngineConfig":{"ignoreDockerVersion":true},"name":"yournewcluster"}' --insecure`

 

# Extract clusterid to use for generating the docker run command
CLUSTERID=`echo $CLUSTERRESPONSE | jq -r .id`

 
運行這些代碼之後,您應該在UI中看到您的新集羣了。由於沒有添加節點,集羣狀態將是“等待節點配置或等待有效配置”。
 

組裝docker run命令以啓動rancher/agent

 
添加節點的最後一部分是啓動rancher/agent容器,該容器將把節點添加到集羣中。爲此,我們需要:
 
›與Rancher版本耦合的代理鏡像
›節點(etcd和/或控制面板和/或工作人員)
›可以到達rancher/server容器的地址
›代理所使用的加入集羣的集羣token
›CA證書的校驗和
 
可以從API的設置端點檢索代理鏡像:
 
AGENTIMAGE=``curl -s -H "Authorization: Bearer $APITOKEN" https://127.0.0.1/v3/settings/agent-image --insecure | jq -r .value
 
節點的角色,您可以自己決定。(在本例中,我們將使用全部三種角色):
 
ROLEFLAGS="--etcd --controlplane --worker"
 
可以到達rancher/server容器的地址應該是自解的,rancher/agent將連接到該端點。
 
RANCHERSERVER="https://rancher_server_address"
 
集羣token可以從創建的集羣中檢索。我們在 CLUSTERID中保存了創建的clusterid,隨後可以用它生成一個token。
 

# Generate token (clusterRegistrationToken)
AGENTTOKEN=`curl -s 'https://127.0.0.1/v3/clusterregistrationtoken' -H 'content-type: application/json' -H "Authorization: Bearer $APITOKEN" --data-binary '{"type":"clusterRegistrationToken","clusterId":"'$CLUSTERID'"}' --insecure | jq -r .token`

 
生成的CA證書也存儲在API中,並可以按如下所示進行檢索,這時可以添加sha256sum來生成我們需要加入集羣的校驗和。
 
# Retrieve CA certificate and generate checksum
CACHECKSUM=curl -s -H "Authorization: Bearer $APITOKEN" https://127.0.0.1/v3/settings/cacerts --insecure | jq -r .value | sha256sum | awk '{ print $1 }'
 
加入集羣所需的所有數據現在都可用,我們只需組裝該命令。
 

# Assemble the docker run command
AGENTCOMMAND="docker run -d --restart=unless-stopped -v /var/run/docker.sock:/var/run/docker.sock --net=host $AGENTIMAGE $ROLEFLAGS --server $RANCHERSERVER --token $AGENTTOKEN --ca-checksum $CACHECKSUM"

 

# Show the command
echo $AGENTCOMMAND

 
最後一個命令(echo $AGENTCOMMAND)應該是這樣的。
 
docker run -d --restart=unless-stopped -v /var/run/docker.sock:/var/run/docker.sock --net=host rancher/agent:v2.0.2 --etcd --controlplane --worker --server https://rancher_server_address --token xg2hdr8rwljjbv8r94qhrbzpwbbfnkhphq5vjjs4dfxgmb4wrt9rpq --ca-checksum 3d6f14b44763184519a98697d4a5cc169a409e8dde143edeca38aebc1512c31d
 
在節點上運行此命令後,您應該可以看到它加入了集羣並由Rancher進行配置。

Protip:這些token也可以直接用作基本身份驗證,例如:
 
curl -u $APITOKEN https://127.0.0.1/v3/settings --insecure
 

結 語

希望這篇文章能夠幫助您實現Rancher 2.0 Tech Preview 2自動化的第一步。Rancher 2.0 Tech Preview 3即將發佈,敬請保持關注!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章