從0到1使用Kubernetes系列(三)——使用Ansible安裝Kubernetes叢集

Choerodon豬齒魚發表於2018-11-05

上一篇文章《從0到1使用Kubernetes系列(二):安裝工具介紹》中,說到了Ansible的功能以及使用Ansible進行叢集部署的優勢,接下來將在本文中介紹如何通過Virtualbox + Vagrant啟動CentOS虛擬機器,並且使用ansible指令碼在虛擬機器中搭建kubernetes叢集以及現有叢集如何新增新的節點。

啟動虛擬機器

首先,通過下面命令克隆並進入專案:

git clone https://github.com/choerodon/kubeadm-ansible.git && cd kubeadm-ansible
複製程式碼

通過 Virtualbox + Vagrant啟動三臺CentOS系統虛擬機器,在專案根目錄中有編寫好的Vagrantfile檔案,直接使用就可以了。

Vagrantfile檔案如下:

Vagrant.configure(2) do |config|

(1..3).each do |i|
    config.vm.define "node#{i}" do |s|
    s.vm.box = "bento/centos-7.3"
    s.vm.box_url = "http://file.choerodon.com.cn/vagrant/box/bento_centos-7.3.box"
    s.vm.hostname = "node#{i}"
    n = 10 + i
    s.vm.network "private_network", ip: "192.168.56.#{n}"
    s.vm.provider "virtualbox" do |v|
        v.cpus = 2
        v.memory = 4096
    end
    end
end
end
複製程式碼

其中box_url指定box映象下載地址,hostname指虛擬機器主機名,private_network指內網ip地址,cpus和memory指虛擬機器的硬體資源要求。

vagrant-cachier外掛用於不同虛擬機器中共享公共包快取,減少虛擬機器的包下載時間。 根據上述Vagrantfile檔案啟動的虛擬機器相關資訊如下:

Hostname CPU Memory IP System
node1 2 4G 192.168.56.11 CentOS 7.3
node2 2 4G 192.168.56.12 CentOS 7.3
node3 2 4G 192.168.56.13 CentOS 7.3

在專案根目錄中執行下面命令啟動虛擬機器:

*啟動前請確認主機已開啟CPU虛擬化支援。

vagrant up
複製程式碼

登入虛擬機器node1

vagrant ssh node1
複製程式碼

部署Kubernetes

在node1中部署Ansible所需的環境

sudo yum install -y epel-release && \
sudo yum install -y \
    ansible \
    git \
    httpd-tools \
    pyOpenSSL \
    python-cryptography \
    python-lxml \
    python-netaddr \
    python-passlib \
    python-pip
複製程式碼

在node1中再次克隆專案程式碼(防止換行符改變導致後期部署出錯)

git clone https://github.com/choerodon/kubeadm-ansible.git && cd kubeadm-ansible
複製程式碼

在node1中編輯專案下的kubeadm-ansible/inventory/hosts檔案,修改各機器的訪問地址、使用者名稱、密碼,並維護好各節點與角色的關係,前面的名稱為機器的hostname。該使用者必須是具有root許可權的使用者,但並非要求一定是root使用者,其他具有root許可權的使用者也可以。比如,想要部署單master節點叢集,只需要這樣配置(參考):

*在all分割槽中每一行為一個節點的資訊,node1為該節點的hostname,ansible_host指節點內網IP,ip指Kubernetes目標繫結網路卡IP,ansible_user為該節點具有管理員許可權的一個使用者,ansible_ssh_pass為該使用者的密碼,ansible_become代表執行命令時使用管理員許可權。

其中Kube-Master節點為Kubernetes主節點、Kube-Node節點為Kubernetes普通節點、Etcd節點為將部署Etcd的節點,按本教程安裝Kube-Master節點與Etcd節點必須一致,Etcd官方建議Etcd叢集節點個數為奇數個(比如1、3、5)以防止腦裂。

[all]
node1 ansible_host=192.168.56.11 ip=192.168.56.11 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
node2 ansible_host=192.168.56.12 ip=192.168.56.12 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
node3 ansible_host=192.168.56.13 ip=192.168.56.13 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
[kube-master]
node1
[etcd]
node1
[kube-node]
node1
node2
node3
複製程式碼

*在專案下的kubeadm-ansible/inventory/hosts檔案預設配置的是3個master節點叢集。

在node1中執行下面命令部署叢集:

ansible-playbook -i inventory/hosts -e @inventory/vars cluster.yml
複製程式碼

在cluster.yml中我們將叢集的安裝劃分為6個階段,分別為:

  • 安裝預備
    • 安裝前檢查:檢查系統,確認Yum庫,下載cfssl。
    • Docker相關檢查:檢查Docker Engine,Configuration,Proxy。
  • Etcd安裝
    • 生成Etcd證照
    • 安裝Docker
    • 配置系統環境
  • kube-master:kube-node必須元件安裝
    • kubelet
  • kube-master安裝
    • 檢查kubeadm
    • 生成證照
    • 修改配置
  • kube-node安裝
    • 生成配置檔案
    • kubeadm join
  • 其他元件安裝
    • 配置flannel網路
    • 安裝ingress-nginx
    • 安裝dashboard
    • 安裝heapster
    • 安裝kube-lego

至此,叢集部署到此結束,可以執行下面命令檢視pod狀態,都為Running狀態則部署成功:

kubectl get po -n kube-system
複製程式碼

從0到1使用Kubernetes系列(三)——使用Ansible安裝Kubernetes叢集

如果部署失敗,想要重置叢集(所有資料),執行:

ansible-playbook -i inventory/hosts reset.yml
複製程式碼

新增節點

如果想再新增一個節點,進入已有叢集當中可以按下面步驟進行: 編輯kubeadm-ansible/inventory/hosts,將新節點資訊新增進去。比如新節點hostname為node4,ip為192.168.56.14,其餘資訊與其他節點相同,那麼進行如下新增資訊:

[all]
node1 ansible_host=192.168.56.11 ip=192.168.56.11 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
node2 ansible_host=192.168.56.12 ip=192.168.56.12 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
node3 ansible_host=192.168.56.13 ip=192.168.56.13 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
node4 ansible_host=192.168.56.14 ip=192.168.56.14 ansible_user=root ansible_ssh_pass=vagrant ansible_become=true
[kube-master]
node1
[etcd]
node1
[kube-node]
node1
node2
node3
node4
複製程式碼

節點資訊新增完成後,就可以進行節點新增操作了:

ansible-playbook -i inventory/hosts -e @inventory/vars scale.yml
複製程式碼

新增完成後檢視節點資訊:

kubectl get node
複製程式碼

叢集部署的介紹就到此結束了,下一篇我們將為大家介紹如何搭建第一個應用程式。

更多關於Kubernetes系列的文章,歡迎點選閱讀 ▼

關於Choerodon豬齒魚

Choerodon豬齒魚是一個開源企業服務平臺,是基於Kubernetes的容器編排和管理能力,整合DevOps工具鏈、微服務和移動應用框架,來幫助企業實現敏捷化的應用交付和自動化的運營管理的開源平臺,同時提供IoT、支付、資料、智慧洞察、企業應用市場等業務元件,致力幫助企業聚焦於業務,加速數字化轉型。

大家也可以通過以下社群途徑瞭解豬齒魚的最新動態、產品特性,以及參與社群貢獻:

歡迎加入Choerodon豬齒魚社群,共同為企業數字化服務打造一個開放的生態平臺。

相關文章