從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
集群部署的介紹就到此結束了,下一篇我們將為大家介紹如何搭建第一個應用程序。