Vagrant是用来管理虚拟机的,如VirtualBox、VMware、AWS等,主要好处是可以提供一个可配置、可移植和复用的软件环境,可以使用shell、chef、puppet等工具部署。所以vagrant不能单独使用,如果你用它来管理自己的开发环境的话,必须在自己的电脑里安装了虚拟机软件,这里使用virtualbox。 virtualbox是免费使用,VMware使用需要购买license。使用Vagrant方便快捷的搭建kubernetes集群.
安装Vagrant
安装Vagrant插件
1 2
| vagrant plugin install vagrant-vbguest vagrant plugin install vagrant-vbox-snapshot
|
1 2 3 4 5 6 7
| # 保存快照 vagrant snapshot take vagrant snapshot list # 恢复快照 vagrant snapshot go # 删除快照 vagrant snapshot delete
|
编写Vagrantfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| Vagrant.configure("2") do |config|
config.vm.define "master" do |master| master.vm.box = "geerlingguy/centos7" master.vm.hostname = "master"
master.vm.provider "virtualbox" do |vb| vb.memory = "2048" vb.cpus = 2 end master.vm.network "private_network", ip: "10.0.100.2" master.vm.synced_folder "./data", "/share" end
config.vm.define "node01" do |node01| node01.vm.box = "geerlingguy/centos7" node01.vm.hostname = "node01"
node01.vm.provider "virtualbox" do |vb| vb.memory = "2048" vb.cpus = 2 end node01.vm.network "private_network", ip: "10.0.100.3" node01.vm.synced_folder "./data", "/share" end
config.vm.define "node02" do |node02| node02.vm.box = "geerlingguy/centos7" node02.vm.hostname = "node02"
node02.vm.provider "virtualbox" do |vb| vb.memory = "2048" vb.cpus = 2 end node02.vm.network "private_network", ip: "10.0.100.4" node02.vm.synced_folder "./data", "/share" end end
|
启动虚拟机
安装kubernetes
参考:安装k8s集群
kubernetes v1.11.1
kubernetes更新到v1.11.1版本,dns服务使用corends替代原有dns插件。其他插件镜像也升级了,国内无法下载,可提前下载Dokcer镜像,如果你机器有科学上网请忽略这一步。我提前将Docker镜像下载到国内私有hub中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
ARCH=amd64 mversion=v1.11.1 username=luoji password=password repo=k8s.gcr.io store_repo=r.xiaozhou.net store_repo_path=r.xiaozhou.net/kubernetes
images=(${repo}/kube-apiserver-${ARCH}:${mversion} \ ${repo}/kube-controller-manager-${ARCH}:${mversion} \ ${repo}/kube-scheduler-${ARCH}:${mversion} \ ${repo}/kube-proxy-${ARCH}:${mversion} \ ${repo}/coredns:1.1.3 \ ${repo}/etcd-${ARCH}:3.2.18 \ ${repo}/pause:3.1 \ ${repo}/kubernetes-dashboard-${ARCH}:v1.8.3 \ quay.io/coreos/flannel:v0.10.0-amd64 \ )
docker login -u $username -p $password $store_repo
for url in ${images[@]} do sub=${url%/*} idx=${#sub} image=${url:$idx+1} echo -e "download -> $store_repo_path/$image -> $url" docker pull $store_repo_path/$image docker tag $store_repo_path/$image $url docker rmi $store_repo_path/$image done
unset ARCH mversion images username password repo store_repo store_repo_path
|
配置Hosts
1 2 3 4
| $ cat /etc/hosts 10.0.100.2 master 10.0.100.3 node01 10.0.100.4 node02
|
主节点初始化命令:
1
| kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.0.100.2
|
因kubernetes的Servie使用NodeType类型时,默认对外暴露的端口范围是30000-32767,如果你的环境有LoadBalancer支持,建议不使用NodeType。由于这是本地环境,不支持Loadalancer(目前只支持一些云服务商)。我将端口范围扩展到1-32767,需要额外的配置,这里使用--config
参数指定配置文件。
创建kubeadm-init.conf配置文件,内容如下:
1 2 3 4 5 6 7 8 9
| apiVersion: kubeadm.k8s.io/v1alpha2 kind: MasterConfiguration kubernetesVersion: v1.11.1 api: advertiseAddress: 10.0.100.2 apiServerExtraArgs: "service-node-port-range": "1-32767" networking: podSubnet: 10.244.0.0/16
|
配置service-node-port-range: 1-32767
指定端口范围。使用kubeadm init --config kubeadm-init.conf
初始化命令。