1. 程式人生 > >Docker學習筆記 — k8s部署

Docker學習筆記 — k8s部署

本文記錄瞭如何在ubuntu 14.04裸機上部署k8s叢集,參考自官方文件

拓撲結構

1master + 2minion
k8s-master 192.168.0.201 master
k8s-node1 192.168.0.202 minion
k8s-node2 192.168.0.203 minion

準備工作

系統

安裝Ubuntu 14.04 LTS 64bit server版本系統,配置好hostname和ip。
在更新國內的軟體源的時候,由於GFW的原因,經常會出現md5校驗錯誤,建議使用阿里雲的源。

Docker

在minion節點上安裝Docker,版本需要在1.2+,此處安裝的是1.7.1。安裝方法參見Docker安裝(Ubuntu 64bit)
安裝好Docker之後,我們最好還配置一個國內的registry mirror,加快映象拉取速度,參考配置國內免費registry mirror

Google pause

給每個minion下載Google pause映象。之後的工作會用到gcr.io/google_containers/pause映象,國內使用者由於GFW問題總是會出錯,所以我們先從docker.io下載pause映象,並設定tag。

# docker pull docker.io/kubernetes/pause
# docker tag kubernetes/pause gcr.io/google_containers/pause:0.8.0
# docker tag gcr.io/google_containers/pause:0.8.0 gcr.io/google_containers/pause

SSH

需要所有minion節點都能從master節點直接登入,不用密碼。
在master節點上進行如下操作:

$ ssh-keygen
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]

部署叢集

下載

下載部署指令碼及二進位制檔案。

首先從K8S的github倉庫中下載部署指令碼。

$ git clone https://github.com/kubernetes/kubernetes.git

修改各元件的版本,下載所有元件的二進位制檔案。此處我們使用etcd 2.2.0,flannel 0.5.0,k8s 1.0.6。

$ cd kubernetes/cluster/ubuntu
$ vim build.sh   #修改版本號
    # version setting
    FLANNEL_VERSION="0.5.0"
    ETCD_VERSION="2.2.0"
    KUBE_VERSION="1.0.6"
$ ./build.sh

有時候使用非root賬戶下載會出現錯誤,此時我們可以切換到root許可權下下載,完成之後再使用chown命令將檔案許可權設定為原來的賬戶。

目錄binaries中出現如下結構則表示成功。

這裡寫圖片描述

配置

開啟cluster/ubuntu/config-default.sh檔案,修改如下欄位:

export nodes=${nodes:-"[email protected] [email protected] [email protected]"}

export role=${role:-"a i i"}

export NUM_MINIONS=${NUM_MINIONS:-2}

export SERVICE_CLUSTER_IP_RANGE=${SERVICE_CLUSTER_IP_RANGE:-10.0.1.0/24}

export FLANNEL_NET=${FLANNEL_NET:-172.16.0.0/16}

如果需要master節點也作為minion節點的話,只需將role中的a改為ai即可,NUM_MINIONS表示minion節點的個數。

service_cluster_ip_range表示叢集中service所對應的IP範圍。
flannel_net表示pod所分配的IP範圍。

部署

進到cluster/目錄下進行如下操作,

$ export KUBERNETES_PROVIDER=ubuntu
$ ./kube-up.sh

接下來指令碼就會將二進位制檔案拷貝到相應的節點上,不過在執行服務的時候需要root許可權,所以需要我們為每一個節點輸入一次密碼。

測試

我們可以使用kubectl工具進行測試是否安裝成功。

首先我們把kubectl的路徑加入到PATH中,然後我們就可以直接使用該命令了。

這裡寫圖片描述

我們啟動一個Redis服務試一試。
進入examples/guestbook目錄,修改redis-master-controller.yaml檔案如下:

apiVersion: v1
kind: ReplicationController
metadata:
  name: redis-master
  labels:
    name: redis-master
spec:
  replicas: 2
  selector:
    name: redis-master
  template:
    metadata:
      labels:
        name: redis-master
    spec:
      containers:
      - name: master
        image: redis
        ports:
        - containerPort: 6379

然後執行如下命令啟動Redis。

$ kubectl create -f redis-master-controller.yaml

然後使用kubectl get rckubectl get pods 檢視是否成功。

這裡寫圖片描述

如果每個pod的狀態都為Running則部署成功。

這裡可能會遇到pod狀態一直處於Penning的問題,此時可以通過kubectl describe pods/pod-name來檢視pod資訊,如果沒有出錯資訊,那麼Minion一直處於下載映象中,下載好之後pod即會成功啟動。

動態管理Cluster

如果叢集已經部署好,我們希望能夠動態地新增和刪除Minion節點。

一種方法是,使用kube-down.sh將所有節點停掉之後,修改config-default.sh檔案,將新新增的節點資訊加入進去,或者刪掉不用的節點資訊,然後再使用kube-up.sh指令碼重新啟動。

當然我們希望能夠在不關掉已有節點的情況下動態新增新的Minion節點,但是目前我還沒找到方法。等以後研究出來了再更新。