启动虚拟机
首先,通过下面命令克隆并进入项目:
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
如果部署失败,想要重置集群(所有数据),执行:
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