使用Vagrant部署K8S Ubuntu集羣

背景

雖然官方已有一個vagrant開發環境可用於mac,但是有幾個問題:

  1. guest os是fedora,我不熟悉也不喜歡

  2. 使用了並不是必須的salt來裝k8s,沒有必要

  3. 國內使用的話需要配置翻牆代理,我本人用的不是vpn而是proxy,比較麻煩些

  4. 部分信息稍老,且更新比較慢,而k8s的開發迭代速度很快

因此,我準備按照下述方法構建mac下開發環境:

  1. 使用vagrant+virtualbox用於cluster物理環境管理,即:負責拉起控制節點和K8S集羣節點,掛載外部資源文件到VM內,並配置公共網絡便於訪問各節點和使用代理。其實就是相當於把vagrant當單機版IaaS使用。

  2. 使用官方ubuntu bare-metal cluster的安裝方式,完成K8S集羣軟件安裝

部署方式

爲了節省資源及簡化介紹,下文中只用兩臺VM,功能分別是:

  • k8s-ctl:作爲控制節點,完成待部署的k8s版本準備、kubectl工具安裝等,遠程連接到k8s master

  • k8s-master:k8s集羣master節點,是個standalone的模式,即:master和node都裝在一臺VM上

注:視情況後繼可以增加多個k8s-node節點,參考下文配置流程即可。

部署過程

Vagrant

假定環境已安裝好Vagrant(1.6.2以上)和Virtualbox(4.3),然後需要做三件事:

  1. 準備好box文件,可以到vagrant官方倉庫下載:http://www.vagrantbox.es/。我這裏使用的是:Ubuntu 14.04 with Docker enabled (based on amd64 server iso file)

    vagrant box add ubuntu-14.04-amd64 https://github.com/jose-lpa/packer-ubuntu_14.04/releases/download/v2.0/ubuntu-14.04.box
  2. 創建一個目錄(本文假定路徑爲~/k8s/deploy/),也即vagrantfile所在目錄

    mkdir -p ~/k8s/deploy
    cd ~/k8s/deploy
  3. 編寫Vagrantfile文件:在deploy目錄新建一個文件Vagrantfile,寫入下述內容:

    Vagrant.configure(2) do |config|
     config.vm.define "k8s-ctl" do |c|
     c.vm.box = "ubuntu-14.04-amd64"
     c.vm.network "public_network" end
    
     config.vm.define "k8s-master" do |c|
     c.vm.box = "ubuntu-14.04-amd64"
     c.vm.network "public_network" end end

然後就可以通過vagrant up啓動兩臺VM,然後可以ssh進入k8s-ctl:

vagrant up
vagrant ssh k8s-ctl

安裝k8s

這部分主要參考官方ubuntu安裝guide,但基於使用場景不同做了一些改動。

主要如下步驟:

  1. 獲取可部署的k8s release

    首先下載任意一個k8s release版本(注:此並不是將要部署的版本,而是作爲部署環境),建議在host上的~/k8s/deploy,也即是掛載到VM內的/vagrant目錄。
    cd ~/k8s/deploy
    wget https://github.com/kubernetes/kubernetes/releases/download/v1.0.6/kubernetes.tar.gz -O - | tar -zxf -
    然後,我們就可以進入k8s-ctl,開始進行部署前的準備工作:
    vagrant ssh k8s-ctl
    
    # 可選:配置HTTP代理鏈接github、s3、gcr.io,若用VPN則不需要 export http_proxy=http://<proxy-ip>:<proxy-port>
    export https_proxy=https://<proxy-ip>:<proxy-port>
    
    cd /vagrant/kubernetes/cluster/ubuntu
    修改./build.sh,在文件頭添加:
    FLANNEL_VERSION=0.5.3
    ETCD_VERSION=2.2.0
    KUBE_VERSION=1.0.6
    然後執行 `./build.sh`,正常結束後,當前路徑下會多出一個`binaries/`目錄,保存的是k8s多個二進制執行文件。
    
  2. 修改部署配置

    config-default.sh文件頭部添加如下內容:
    nodes="[email protected]"
    role="ai"
    NUM_MINIONS=1
    注:這裏`nodes`按照自己環境的情況修改
    
  3. 開始部署

    export KUBERNETES_PROVIDER=ubuntu
    cd /vagrant/kubernetes/cluster/
    ./kube-up.sh
    1:如果提示需要sshkey,則`ssh-keygen && ssh-add`2:如果validate不成功,可能是因爲使用的box鏡像缺少一些需要的軟件,ssh進入k8s-master VM進行安裝,如docker、pgrep、bridge-utils、apt-transport-https。 
    注3:部署過程中出錯,可以使用`./kube-down.sh`進行回退
    注4:部署過程如果出現網絡錯誤,注意排查:每個node上/etc/hosts都已經配置了host-name,以及取消了proxy設置: unset http_proxy, https_proxy
    
  4. 驗證部署結果

    通過kubectl命令可以check集羣狀態,以及訪問k8s master的api-server
    vagrant@vagrant:/vagrant/kubernetes/cluster$ ./kubectl.sh get nodes
    NAME LABELS STATUS
    192.168.0.108 kubernetes.io/hostname=192.168.0.108 Ready
    vagrant@vagrant:/vagrant/kubernetes/cluster$ curl 192.168.0.108:8080/api
    {
     "versions": [
     "v1"
     ]
    }

其他

  • 可以把下述內容添加到~/.bashrc便於k8s操作:

    export KUBERNETES_PROVIDER=ubuntu
    export PATH=$PATH:/vagrant/kubernetes/cluster/ubuntu/binaries
    alias kc="kubectl"
  • 可以在集羣上安裝k8s的addons,比如DNS、KubeUI、KubeDash,可以通過下述命令部署自帶的DNS

    cd cluster/ubuntu
    ./deployAddons.sh
  • 國內如果沒用VPN,需要在k8s-master(如果集羣,則在所有節點)上配置Docker代理,否則無法pull鏡像,Ubuntu下:

    sudo echo "export http_proxy=\"http://<proxy-ip>:<proxy-port>\"" >> /etc/default/docker
    sudo echo "export https_proxy=\"https://<proxy-ip>:<proxy-port>\"" >> /etc/default/docker
    sudo service docker restart
  • SSH免賬號登錄的方法:kube-up過程需要多次ssh登錄到各個nodes執行操作,以及scp發送文件,可以配置密鑰對進行免賬號登錄:

    # 在Master節點生成祕鑰文件
    ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
    # 將祕鑰文件拷貝到所有節點
    ssh-copy-id -i ~/.ssh/id_dsa.pub vagrant@<node-ip>
本文轉自中文社區-使用Vagrant部署K8S Ubuntu集羣
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章