kubernetes叢集部署

來源:互聯網
上載者:User

標籤:

鑒於Docker如此火爆,Google推出kubernetes管理docker叢集,不少人估計會進行嘗試。kubernetes得到了很多大公司的支援,kubernetes叢集部署工具也整合了gce,coreos,aws等iaas平台,部署起來也相當的方便。鑒於網上眾多資料基於的是不少老版本,本篇文章針對最新的kubernetes及其相依元件的部署簡要闡述。通過本文可以比較粗暴的運行你的kubernetes叢集,要優雅還需要更多的工作。部署主要分為三步:

1、準備機器並打通網路

如果要部署kubernetes叢集至少3台機器,一個作為master兩個作為minion。如果有4台機器還可以一個作為etcd服務,如果更多可以部署一個etcd叢集和更多的minion,這裡以4台機器為例子,這裡說的機器可以是物理機也可以是kvm虛擬機器。機器列表:

master:10.180.64.6etcd:    10.180.64.7minion1:10.180.64.8minion2:10.180.64.9至於網路可以使用flannel,或者openvswitch,這方面的資料網上很多,可以google或者baidu下。2、部署相關組件

kubernetes安裝主要分成3部分:etcd叢集、master節點和minions。

本文為了方便以4台雲主機為例搭建一個kubernetes叢集,雲主機機器分配如下所示:

ip

角色

10.180.64.6

Kubernetes master

10.180.64.7

Etcd node

10.180.64.8

Kubernetes minion1

10.180.64.9

Kubernetes minion2

 

 

2.1     etcd叢集

       本次樣本中以一台雲主機作為etcd node,如需etcd叢集請參照後續etcd使用介紹進行搭建。

[email protected]:~# curl -L  https://github.com/coreos/etcd/releases/download/v2.0.0-rc.1/etcd-v2.0.0-rc.1-linux-amd64.tar.gz-o etcd-v2.0.0-rc.1-linux-amd64.tar.gz

[email protected]:~# tar xzvf etcd-v2.0.0-rc.1-linux-amd64.tar.gz

[email protected]:~# cdetcd-v2.0.0-rc.1-linux-amd64

       拷貝etcd下的所有可執行檔到/bin下

2.2.    master節點

       master節點上只涉及kubernetes安裝,首先下載kubernetes執行以下指令。

[email protected]:~#wget https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v0.8.0/kubernetes.tar.gz

[email protected]:~#tar -zxvfkubernetes.tar.gz

[email protected]:~#cdkubernetes/server/kubernetes

[email protected]:~#tar -zxvfkubernetes-server-linux-amd64.tar.gz

[email protected]:~#cd server/bin

       在master節點上將kube-apiserver、kube-controller-manager、kube-scheduler、kubecfg、kubectl拷貝到/bin

 

2.3. minion節點

       minion節點涉及到kubernetes、cadvisor和docker的安裝,master上安裝是已經下載了kubernetes,將解壓出的kubelet和kube-proxy拷貝到所有minion上。

       在minion節點上將kubelet、kube-proxy拷貝到/bin。

(ps:拷不拷貝到/bin都無所謂,將這些可執行檔的路徑加到$PATH中可以)

       安裝cadvisor:

[email protected]:wget https://github.com/google/cadvisor/releases/download/0.7.1/cadvisor

       直接是可執行檔,不用解壓了,拷貝到/bin下

 

       安裝docker:

       在minion上安裝docker,kubernetes會調用docker api建立pod作為worker容器,同時kubernetes本身的agent線程等也可以運行在docker裡面,這樣kubernetes升級也會比較容易。

       debian 7下安裝docker可以使用ubuntu的源,運行以下指令:

[email protected]:echo debhttp://get.docker.io/ubuntu docker main | sudo tee/etc/apt/sources.list.d/docker.list
[email protected]:apt-key adv--keyserver keyserver.ubuntu.com --recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E9
[email protected]:apt-getupdate
[email protected]:apt-getinstall -y lxc-docker

       運行一下dockerversion看看是否正常。


3、運行kubernetes叢集

3.1.     kubernetes設定檔

本節涉及的設定檔和在GCE上以及通過yum安裝的kubernetes的設定檔不一定吻合,是全手動安裝的暫時解決方案,如果已經整合到kubernetes項目下的cluster,可以運行kubernetes本身的一鍵部署採用salt部署整個叢集,不需要手動操作,所以這裡設定檔只適用於尚未被支援的平台上進行部署。所有需要的設定檔和執行指令碼打包為kube-start.tar.gz。

3.1.1.      etcd設定檔

       etcd設定檔為cfg-etcd:

ETCD_NAME="-nameetcd-1" 

etcd節點名稱,如果etcd叢集只有一個node,這一項可以注釋不用配置,預設名稱為default,這個名字後面會用到。

ETCD_PEER_ADDRESS="-initial-advertise-peer-urls http://hostip:7001"

etcd叢集之間node的郵寄地址,一般指定7001或者2380連接埠,這裡etcd node的ip為10.180.64.7,所以這一項配置修改為http://10.180.64.7:7001。

ETCD_CLIENT_ADDRESS="-advertise-client-urls http://hostip:4001" 

etcd node對外服務的地址,一般指定4001或者2379連接埠,這裡修改為http://10.180.64.7:4001。

ETCD_DATA_DIR="-data-dir /home/data/etcd" 

etcd儲存資料的目錄,自己指定,不同的目錄相同的配置也會導致產生不同的etcd叢集。

ETCD_LISTEN_PEER_ADDRESS="-listen-peer-urls http://0.0.0.0:7001"

etcd node監聽的地址,如果為0.0.0.0將會監聽所有介面,這裡配置為http://0.0.0.0:7001。

ETCD_LISTEN_CLIENT_ADDRESS="-listen-client-urls http://0.0.0.0:4001" 

對外服務監聽地址,配置為http://0.0.0.0:4001。

ETCD_CLUSTER_MEMBERS="-initial-clusteretcd-1=http://ip_etcd-1:7001 etcd-2=http://ip_etcd-2:7001" 

etcd叢集成員地址的列表,因為為etcd叢集內部,所以需指定7001或者2380連接埠,這裡只有一個node,而且沒有配置ETCD_NAME,那麼預設名稱為default,這裡配置為default=http://10.180.64.7:70001。

ETCD_CLUSTER_STATE="-initial-cluster-statenew" 

etcd叢集狀態,new表示建立一個叢集,existing表示已經存在。

ETCD_ARGS="" 

需要額外添加的參數,可以自己添加,etcd的所有參數可以通過etcd -h查看。

 

3.1.2.      kubernetes叢集設定檔

       cfg-common:

KUBE_ETCD_SERVERS="--etcd_servers=http://10.180.64.7:4001" 

etcd服務地址,前面已經啟動了etcd服務,這裡配置為http://10.180.64.7:4001。

KUBE_LOGTOSTDERR="--logtostderr=true" 

表示錯誤記錄檔記錄到檔案還是輸出到stderr。

KUBE_LOG_LEVEL="--v=0" 

日誌等級。

KUBE_ALLOW_PRIV="--allow_privileged=false" 

允許運行特權容器。

 

3.1.3.      apiserver設定檔

       cfg-apiserver:

KUBE_API_ADDRESS="--address=0.0.0.0"

監聽的介面,如果配置為127.0.0.1則只監聽localhost,配置為0.0.0.0會監聽所有介面,這裡配置為0.0.0.0。

KUBE_API_PORT="--port=8080"

apiserver的監聽連接埠,預設8080,不用修改。

KUBE_MASTER="--master=10.180.64.6:8080"

apiserver的服務地址,controller-manager、scheduler及kubelet都會用到這個配置,這裡配置為10.180.64.6:8080

KUBELET_PORT="--kubelet_port=10250"

minion上kubelet監聽的連接埠,預設10250,無需修改

KUBE_SERVICE_ADDRESSES="--portal_net=10.254.0.0/16"

kubernetes可以分配的ip的範圍,kubernetes啟動的每一個pod以及serveice都會分配一個ip地址,將從這個範圍分配。

KUBE_API_ARGS=""

需要額外添加的配置項,簡單地啟用一個叢集無需配置。

 

3.1.4.      controller設定檔

       cfg-controller-manager:

KUBELET_ADDRESSES="--machines=10.180.64.8,10.180.64.9"

kubernetes叢集中minion的列表,這裡配置為10.180.64.8,10.180.64.9

KUBE_CONTROLLER_MANAGER_ARGS=""

需要額外添加的參數

 

3.1.5.      scheduler設定檔

       cfg-schedule:

       如果需要額外參數可以自行添加,這裡暫時不添加新的參數。

 

3.1.6.      kubelet設定檔

       cfg-kubelet:

KUBELET_ADDRESS="--address=10.180.64.8"

minion監聽的地址,每個minion根據實際的ip配置,這裡minion1上為10.180.64.8,minion2上為10.180.64.9。

KUBELET_PORT="--port=10250"

監聽連接埠,不要修改,如果修改,同時需要修改master上設定檔中涉及的配置項。

KUBELET_HOSTNAME="--hostname_override=10.180.64.8"

kubernetes看到的minion的名稱,使用kubecfglist minions時看到的將是這個名稱而不是hostname,設定和ip地址一樣便於識別。

KUBELET_ARGS=""

額外增加的參數

 

3.1.7.      proxy設定檔

       cfg-proxy:

       如有額外參數自行配置,這裡不需要添加。

 

3.2.         kubernetes啟動

將kube-start.tar.gz解壓,拷貝cfg-etcd、kube-etcd到etcd node上,為kube-etcd增加可執行許可權。拷貝其中的cfg-common、cfg-apiserver、cfg-controller-manager、cfg-schedule、apiserver、controller、schedule拷貝到master上,為apiserver、controller和schedule增加可執行許可權。拷貝cfg-common、cfg-kubelet、cfg-proxy、cadv、kube、proxy到所有minion主機上,同時確保每一個minion的cfg-kubelet修改正確,為cadv、kube、proxy增加可執行許可權。

首先在etcd node上運行etcd服務,執行

[email protected]:./kube-etcd &

檢驗etcd是否正常,在master上執行

[email protected]:curl -L http://10.180.64.7:4001/version

etcd 2.0.0-rc.1

然後在master上順序執行

[email protected]:./apiserver&

[email protected]:./controller &

[email protected]:./schedule &

最後在所有的節點上順序執行

[email protected]:./cadv &

[email protected]:./kube &

[email protected]:./proxy &

所有組件都運行之後,到master上檢測下狀態。

查看下叢集狀況

[email protected]:~# kubecfg listminions 

Minionidentifier   Labels

----------         ----------

10.180.64.9

10.180.64.8

可以看出叢集中有兩個節點10.180.64.8和10.180.64.9,正是部署的2個節點。

查看當前叢集的pod

[email protected]:~#kubecfg list pods 
Name                                   Image(s)         Host       Labels      Status 
---------- ---------- ---------- ---------- ---------- 
e473c35e-961d-11e4-bc28-fa163e8b5289 dockerfile/redis 10.180.64.9/ name=redisRunning 

這裡的redis你就當沒看見,如果剛建立的叢集這個時候是沒有pod的,當然如果你是在gce或者aws上一鍵建立的,預設可能會看到kubernetes命名的pod,這是預設啟動的狀態監測的東東。

叢集已經建立好了,那就來建立個tomcat的replicationController玩玩吧。有多種介面方式可以實現這個,這裡選擇json,需要寫一個tomcat-controller.json的檔案告訴kubernetes該怎麼建立這個controller。當然檔案的名字可以隨意點,只要能看懂就行。tomca-controller.json大概長這個樣子:

{

  "id":"tomcatController",

  "kind":"ReplicationController",

  "apiVersion":"v1beta1",

  "desiredState": {

    "replicas": 2,

    "replicaSelector":{"name":"tomcatCluster"},

    "podTemplate":{

      "desiredState": {

        "manifest": {

          "version": "v1beta1",

          "id": "tomcat",

          "containers": [{

            "name": "tomcat",

            "image":"tutum/tomcat",

            "ports":[{

              "containerPort":8080,"hostPort":80}

            ]

          }]

        }

      },

      "labels": {"name":"tomcatCluster"}}

    },

  "labels": {

    "name":"tomcatCluster",

  }

}

裡面各項值的含義看完kubernetes實現分析之後就會明白了。寫好檔案之後就讓kubernetes執行吧。

[email protected]:/home/pod# kubecfg -ctomcat-pod.json create replicationControllers

如果告訴你success,那麼可以查看下叢集的controller

[email protected]:/home/pod# kubecfg listreplicationControllers

Name                Image(s)            Selector             Replicas

----------          ----------          ----------           ----------

redisController     dockerfile/redis    name=redis           1

tomcatController    tutum/tomcat        name=tomcatCluster   2

請無視redis,這時候看到tomcat的replicationController已經起來了,Replicas=2表示要在叢集裡面運行2個docker,docker啟動並執行鏡像就是tutum/tomcat了,如果你的minion上面沒有這個鏡像那麼kubernetes就要去docker hub上為你下載了,如果本地有這個鏡像那麼kubernetes就直接在minion上為你運行2個tomcat的container(pod),來看看這一切是不是真的。

[email protected]:/home/pod# kubecfg listpods

Name                                         Image(s)                   Host                  Labels                    Status

----------                                  ----------          ----------           ----------               ----------

643582db-97d1-11e4-aefa-fa163e8b5289   tutum/tomcat     10.180.64.9/        name=tomcatCluster      Running

e473c35e-961d-11e4-bc28-fa163e8b5289   dockerfile/redis    10.180.64.9/        name=redis                Running

64348fde-97d1-11e4-aefa-fa163e8b5289   tutum/tomcat        10.180.64.8/        name=tomcatCluster      Running

更多的使用請看介面章節。



來自為知筆記(Wiz)

kubernetes叢集部署

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.