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

前兩期的文章介紹了Kubernetes基本概念和架構用Kubeadm+Ansible搭建Kubernetes集群所需要的工具及其作用。本篇介紹怎麼使用Ansible安裝Kubernetes集群。

 

啟動虛擬機

首先,通過下面命令克隆並進入項目:

git clone //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 = "//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 //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

如果部署失敗,想要重置集群(所有數據),執行:

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

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

 


本文由豬齒魚技術團隊原創,轉載請註明出處