本文共 3439 字,大约阅读时间需要 11 分钟。
虽然官方已有一个vagrant开发环境可用于mac,但是有 几个问题:
guest os是fedora,我不熟悉也不喜欢
使用了并不是必须的salt来装k8s,没有必要
国内使用的话需要配置翻墙代理,我本人用的不是vpn而是proxy,比较麻烦些
部分信息稍老,且更新比较慢,而k8s的开发迭代速度很快
因此,我准备按照下述方法构建mac下开发环境:
使用vagrant+virtualbox用于cluster物理环境管理,即:负责拉起控制节点和K8S集群节点,挂载外部资源文件到VM内,并配置公共网络便于访问各节点和使用代理。其实就是相当于把vagrant当单机版IaaS使用。
使用官方ubuntu bare-metal cluster的安装方式,完成K8S集群软件安装
为了节省资源及简化介绍,下文中只用两台VM,功能分别是:
k8s-ctl:作为控制节点,完成待部署的k8s版本准备、kubectl工具安装等,远程连接到k8s master
k8s-master:k8s集群master节点,是个standalone的模式,即:master和node都装在一台VM上
注:视情况后继可以增加多个k8s-node节点,参考下文配置流程即可。
假定环境已安装好Vagrant(1.6.2以上)和Virtualbox(4.3),然后需要做三件事:
准备好box文件,可以到vagrant官方仓库下载:。我这里使用的是:
vagrant box add ubuntu-14.04-amd64 https://github.com/jose-lpa/packer-ubuntu_14.04/releases/download/v2.0/ubuntu-14.04.box
创建一个目录(本文假定路径为~/k8s/deploy/),也即vagrantfile所在目录
mkdir -p ~/k8s/deploycd ~/k8s/deploy
编写Vagrantfile文件:在deploy目录新建一个文件Vagrantfile,写入下述内容:
Vagrant.configure(2) do |config| config.vm.define "k8s-ctl" do |c| c.vm.box = "ubuntu-14.04-amd64" c.vm.network "public_network" end config.vm.define "k8s-master" do |c| c.vm.box = "ubuntu-14.04-amd64" c.vm.network "public_network" end end
然后就可以通过vagrant up启动两台VM,然后可以ssh进入k8s-ctl:
vagrant upvagrant ssh k8s-ctl
这部分主要参考官方ubuntu安装,但基于使用场景不同做了一些改动。
主要如下步骤:
获取可部署的k8s release
首先下载任意一个k8s release版本(注:此并不是将要部署的版本,而是作为部署环境),建议在host上的~/k8s/deploy,也即是挂载到VM内的/vagrant目录。
cd ~/k8s/deploywget https://github.com/kubernetes/kubernetes/releases/download/v1.0.6/kubernetes.tar.gz -O - | tar -zxf -
然后,我们就可以进入k8s-ctl,开始进行部署前的准备工作:
vagrant ssh k8s-ctl# 可选:配置HTTP代理链接github、s3、gcr.io,若用VPN则不需要 export http_proxy=http://: export https_proxy=https:// : cd /vagrant/kubernetes/cluster/ubuntu
修改./build.sh,在文件头添加:
FLANNEL_VERSION=0.5.3ETCD_VERSION=2.2.0KUBE_VERSION=1.0.6
然后执行 `./build.sh`,正常结束后,当前路径下会多出一个`binaries/`目录,保存的是k8s多个二进制执行文件。
修改部署配置
config-default.sh文件头部添加如下内容:
nodes="vagrant@192.168.0.108"role="ai"NUM_MINIONS=1
注:这里`nodes`按照自己环境的情况修改
开始部署
export KUBERNETES_PROVIDER=ubuntucd /vagrant/kubernetes/cluster/./kube-up.sh
注1:如果提示需要sshkey,则`ssh-keygen && ssh-add`注2:如果validate不成功,可能是因为使用的box镜像缺少一些需要的软件,ssh进入k8s-master VM进行安装,如docker、pgrep、bridge-utils、apt-transport-https。 注3:部署过程中出错,可以使用`./kube-down.sh`进行回退注4:部署过程如果出现网络错误,注意排查:每个node上/etc/hosts都已经配置了host-name,以及取消了proxy设置: unset http_proxy, https_proxy
验证部署结果
通过kubectl命令可以check集群状态,以及访问k8s master的api-server
vagrant@vagrant:/vagrant/kubernetes/cluster$ ./kubectl.sh get nodesNAME LABELS STATUS192.168.0.108 kubernetes.io/hostname=192.168.0.108 Readyvagrant@vagrant:/vagrant/kubernetes/cluster$ curl 192.168.0.108:8080/api{ "versions": [ "v1" ]}
可以把下述内容添加到~/.bashrc便于k8s操作:
export KUBERNETES_PROVIDER=ubuntuexport PATH=$PATH:/vagrant/kubernetes/cluster/ubuntu/binariesalias kc="kubectl"
可以在集群上安装k8s的addons,比如DNS、KubeUI、KubeDash,可以通过下述命令部署自带的DNS
cd cluster/ubuntu./deployAddons.sh
国内如果没用VPN,需要在k8s-master(如果集群,则在所有节点)上配置Docker代理,否则无法pull镜像,Ubuntu下:
sudo echo "export http_proxy=\"http://: \"" >> /etc/default/dockersudo echo "export https_proxy=\"https:// : \"" >> /etc/default/dockersudo service docker restart
SSH免账号登录的方法:kube-up过程需要多次ssh登录到各个nodes执行操作,以及scp发送文件,可以配置密钥对进行免账号登录:
# 在Master节点生成秘钥文件ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa# 将秘钥文件拷贝到所有节点ssh-copy-id -i ~/.ssh/id_dsa.pub vagrant@
转载地址:http://axino.baihongyu.com/