1. 程式人生 > >Kubernetes(k8s)中文文件 在Azure上使用CoreOS和Weave的 Kubernetes_Kubernetes中文社群

Kubernetes(k8s)中文文件 在Azure上使用CoreOS和Weave的 Kubernetes_Kubernetes中文社群

譯者:李加慶

介紹

在本指南中我將演示如何在Azure雲端部署Kubernetes叢集。您將使用CoreOS與Weave,Weave以透明而可靠的方式實現了簡單、安全的網路。本指南的目的是提供一個即開即裝即用的實現方法,以便最終可以稍加改變就可以投入到生產環境中。本文將演示如何提供一個專門的Kubernetes主節點和ETCD節點,並展示如何輕鬆地擴充套件叢集。

前提條件

1.您需要一個Azure賬號。

開始吧!

開始之前,您需要checkout下程式碼:

git clone https://github.com/kubernetes/kubernetes
cd kubernetes/docs/getting-started-guides/coreos/azure/

您需要在您的機器上安裝Node.js,如果您之前使用過Azure CIL,那麼您應該已經安裝了。

首先,您需要安裝一些依賴:

npm install

現在,您需要做的是:

./azure-login.js -u <your_username>
./create-kubernetes-cluster.js

這個指令碼會提供適用於生產環境的叢集,叢集中有一個3個專用的ETCD節點形成環形:1個kubernetes主節點和2個kubernetes節點。KUBE-00虛擬機器將是主節點,您的工作負荷只會部署在KUBE-01節點和KUBE-02節點上。最初,所有的虛擬機器都是單核的,以確保自由層的使用者無需額外的代價就可以複製它。稍後我將展示如何新增更多更大的虛擬機器。

一旦Azure虛擬機器建立完成,你應該可以看到下面這樣的資訊:

...
azure_wrapper/info: Saved SSH config, you can use it like so: `ssh -F ./output/kube_1c1496016083b4_ssh_azure_wrapper/info: The hosts in this deployment are:
[ 'etcd-00', 'etcd-01', 'etcd-02', 'kube-00', 'kube-01', 'kube-02' ]
azure_wrapper/info: Saved state into `./output/kube_1c1496016083b4_deployment.yml`

像下面這樣登陸進主節點:

ssh -F ./output/kube_1c1496016083b4_ssh_conf kube-00

注:配置檔名字可能有所不同,確保使用你所看到的那個。

檢查一下叢集中的兩個節點:

[email protected] ~ $ kubectl get nodes
NAME LABELS STATUS
kube-01 kubernetes.io/hostname=kube-01 Ready
kube-02 kubernetes.io/hostname=kube-02 Ready

部署工作負載

現在讓我們按照Guestbook的例項來部署:

kubectl create -f ~/guestbook-example

您需要等待pod部署完成,然後執行下面的命令,等待STATUS 從Pending變為Running:

kubectl get pods --watch

注:大部分的時間將會花在下載每個節點的Docker容器映象上。 最後您將會看到:

NAME READY STATUS RESTARTS AGE
frontend-0a9xi 1/1 Running 0 4m
frontend-4wahe 1/1 Running 0 4m
frontend-6l36j 1/1 Running 0 4m
redis-master-talmr 1/1 Running 0 4m
redis-slave-12zfd 1/1 Running 0 4m
redis-slave-3nbce 1/1 Running 0 4m

擴充套件

兩個單核的節點肯定是無法滿足現如今的生產系統,讓我們通過新增幾個更大的節點來擴充套件叢集。 您需要再開啟一個您機器上的終端視窗,進入相同的工作目錄(也就是說這個目錄:~/Workspace/kubernetes/docs/getting-started-guides/coreos/azure/) 首先,讓我們設定一下新虛擬機器的大小:

export AZ_VM_SIZE=Large

現在,我們使用先前部署的狀態檔案和新增的一系列節點來執行擴充套件指令碼:

[email protected] ~ $ ./scale-kubernetes-cluster.js ./output/kube_1c1496016083b4_deployment.yml 2
...
azure_wrapper/info: Saved SSH config, you can use it like so: `ssh -F ./output/kube_8f984af944f572_ssh_azure_wrapper/info: The hosts in this deployment are:
[ 'etcd-00',
'etcd-01',
'etcd-02',
'kube-00',
'kube-01',
'kube-02',
'kube-03',
'kube-04' ]
azure_wrapper/info: Saved state into `./output/kube_8f984af944f572_deployment.yml`

注:這一步在 ./output 下產生了一些新檔案。

回到kube-00:

[email protected] ~ $ kubectl get nodes
NAME LABELS STATUS
kube-01 kubernetes.io/hostname=kube-01 Ready
kube-02 kubernetes.io/hostname=kube-02 Ready
kube-03 kubernetes.io/hostname=kube-03 Ready
kube-04 kubernetes.io/hostname=kube-04 Ready

您可以看到又有兩個節點順利地加入進來,現在,讓我們來擴充套件Guestbook例項的數量。

首先,再次檢查一下有多少replication controller:

[email protected] ~ $ kubectl get rc
ONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
frontend php-redis kubernetes/example-guestbook-php-redis:v2 name=frontend 3
redis-master master redis name=redis-master 1
redis-slave worker kubernetes/redis-slave:v2 name=redis-slave 2

基於現在有四個節點,讓我們進行相應地擴充套件:

[email protected] ~ $ kubectl scale --replicas=4 rc redis-slave
>>>>>>> coreos/azure: Updates for 1.0
scaled
[email protected] ~ $ kubectl scale --replicas=4 rc frontend
scaled

現在,再來檢查下:

[email protected] ~ $ kubectl get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
frontend php-redis kubernetes/example-guestbook-php-redis:v2 name=frontend 4
redis-master master redis name=redis-master 1
redis-slave worker kubernetes/redis-slave:v2 name=redis-slave 4

現在,您已經擁有了更多的前端Guestbook和redis slave例項。如果您檢視一下所有 name=fronted 的節點,您會看到每個節點上都執行著一個例項。

[email protected] ~/guestbook-example $ kubectl get pods -l name=frontend
NAME READY STATUS RESTARTS AGE
frontend-0a9xi 1/1 Running 0 22m
frontend-4wahe 1/1 Running 0 22m
frontend-6l36j 1/1 Running 0 22m
frontend-z9oxo 1/1 Running 0 41s

將應用暴露給外部

Kubernetes 1.0 中沒有原生的Azure負載均衡器,不過,下面演示瞭如何將Guestbook應用暴露給Internet。

./expose_guestbook_app_port.sh ./output/kube_1c1496016083b4_ssh_conf
Guestbook app is on port 31605, will map it to port 80 on kube-00
info: Executing command vm endpoint create
+ Getting virtual machines
+ Reading network configuration
+ Updating network configuration
info: vm endpoint create command OK
info: Executing command vm endpoint show
+ Getting virtual machines
data: Name : tcp-80-31605
data: Local port : 31605
data: Protcol : tcp
data: Virtual IP Address : 137.117.156.164
data: Direct server return : Disabled
info: vm endpoint show command OK

然後,您就可以通過上面所展示的kube-00的Azure虛擬ip(在我的例子中,也就是指http://137.117.156.164/),在任何地方連線它。

接下來

現在您已經擁有一個執行在Azure上規模性的叢集,祝賀!

或許,您應該嘗試部署其他的應用示例,或者動手寫一個自己的。

移除…

如果您不希望顧慮Azure的費用問題,您可以移除叢集。正如您看到的,移除它非常簡單:

./destroy-cluster.js ./output/kube_8f984af944f572_deployment.yml

注:確保使用最新的狀態檔案,因為擴充套件之後生成了新的檔案。 順便說一下,如果您喜歡,您可以使用文中所示指令碼部署多個叢集。

K8S中文社群微信公眾號