kubernetes集羣部署

kubernetes獲得了不少大公司的支持,kubernetes集羣部署工具也集成了gce,coreos,aws等iaas平臺,部署起來也至關的方便。鑑於網上衆多資料基於的是很多老版本,本篇文章針對最新的kubernetes及其依賴組件的部署簡要闡述。經過本文能夠比較粗暴的運行你的kubernetes集羣,要優雅還須要更多的工做。部署主要分爲三步:node

一、準備機器和網絡

若是要部署kubernetes集羣至少3臺機器,一個做爲master兩個做爲minion。若是有4臺機器還能夠一個做爲etcd服務,若是更多能夠部署一個etcd集羣和更多的minion,這裏以4臺機器爲例子,這裏說的機器能夠是物理機也能夠是kvm虛擬機。linux

  • 機器列表:
master:10.180.64.6

etcd:    10.180.64.7

minion1:10.180.64.8

minion2:10.180.64.9

至於網絡可使用flannel,或者openvswitch,這方面的資料網上不少,能夠google或者baidu下。git

二、部署相關組件

kubernetes安裝主要分紅3部分:etcd集羣、master節點和minions。github

本文爲了方便以4臺雲主機爲例搭建一個kubernetes集羣,雲主機機器分配以下所示:redis

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使用介紹進行搭建。docker

root@cnsdev-paas-master:~# 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

root@cnsdev-paas-master:~# tar xzvf etcd-v2.0.0-rc.1-linux-amd64.tar.gz

root@cnsdev-paas-master:~# cdetcd-v2.0.0-rc.1-linux-amd64

拷貝etcd下的全部可執行文件到/bin下。json

2.2. master節點

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

root@cnsdev-paas-master:~#wget https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v0.8.0/kubernetes.tar.gz

root@cnsdev-paas-master:~#tar -zxvfkubernetes.tar.gz

root@cnsdev-paas-master:~#cdkubernetes/server/kubernetes

root@cnsdev-paas-master:~#tar -zxvfkubernetes-server-linux-amd64.tar.gz

root@cnsdev-paas-master:~#cd server/bin

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

2.3. minion節點

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

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

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

  • 安裝cadvisor:
root@cnsdev-paas-master: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的源,運行如下指令:

root@cnsdev-paas-master:echo debhttp://get.docker.io/ubuntu docker main | sudo tee/etc/apt/sources.list.d/docker.list root@cnsdev-paas-master:apt-key adv--keyserver keyserver.ubuntu.com --recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E9 root@cnsdev-paas-master:apt-getupdate root@cnsdev-paas-master:apt-getinstall -y lxc-docker

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

三、運行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集羣之間node的通信地址,通常指定7001或者2380端口,這裏etcd node的ip爲10.180.64.7,因此這一項配置修改成http://10.180.64.7:7001。

etcd node對外服務的地址,通常指定4001或者2379端口,這裏修改成http://10.180.64.7:4001。

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

etcd存儲數據的目錄,本身指定,不一樣的目錄相同的配置也會致使產生不一樣的etcd集羣。

etcd node監聽的地址,若是爲0.0.0.0將會監聽全部接口,這裏配置爲http://0.0.0.0:7001。

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

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:

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服務,執行

root@cnsdev-paas-master:./kube-etcd &

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

root@cnsdev-paas-master:curl -L http://10.180.64.7:4001/version

etcd 2.0.0-rc.1

而後在master上順序執行

root@cnsdev-paas-master:./apiserver&

root@cnsdev-paas-master:./controller &

root@cnsdev-paas-master:./schedule &

最後在全部的節點上順序執行

root@cnsdev-paas-master:./cadv &

root@cnsdev-paas-master:./kube &

root@cnsdev-paas-master:./proxy &

全部組件都運行以後,到master上檢測下狀態。

查看下集羣情況

root@cnsdev-paas-master:~# kubecfg listminions 

Minionidentifier   Labels 

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

10.180.64.9 

10.180.64.8

能夠看出集羣中有兩個節點10.180.64.8和10.180.64.9,正是部署的2個節點。

查看當前集羣的pod

root@cnsdev-paas-master:~#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執行吧。

root@cnsdev-paas-master:/home/pod# kubecfg -ctomcat-pod.json create replicationControllers

若是告訴你success,那麼能夠查看下集羣的controller

root@cnsdev-paas-master:/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),來看看這一切是否是真的。

root@cnsdev-paas-master:/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

更多的使用請看接口章節。

相關文章
相關標籤/搜索