使用libvirt测试Kubernetes源码集群的一些经验 – Docker.Ren

摘要

[db:摘要]

libvirt安装安装 dnsmasq安装 ebtables安装 qemu安装 libvirt应用并启动libvirt 守护进程:systemctl enable libvirtdsystemctl start libvirtd6. 赋予 libvirt 用户访问权限7. 检查你的 $HOME 可被 qemu 用户使用virsh -c qemu:///system pool-list可以创建 /etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules 来给 libvirt 所有访问当前账户的权限 (直接执行此命令就可以),适用于 Fedora21, Archsudo /bin/sh -c "cat - > /etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules" << EOFpolkit.addRule(function(action, subject) { if (action.id == "org.libvirt.unix.manage" && subject.user == "$USER") { return polkit.Result.YES; polkit.log("action=" + action); polkit.log("subject=" + subject); }});EOF如果你的 LInux 的发行版是 Ubuntu 14.04.1 LTS,可以检查 libvirt unix socket 的权限,ls -l /var/run/libvirt/libvirt-socksrwxrwx--- 1 root libvirtd 0 févr. 12 16:03 /var/run/libvirt/libvirt-sock如果没有权限的话,可以执行下面命令来加入用户到 libvirtd 账户<span style="font-family: Arial, Helvetica, sans-serif;">usermod -a -G libvirtd $USER</span>$USER needs to logout/login to have the new group be taken into account所有的有关 vm 创建的文件全部都存储在 ./cluster/libvirt-coreos/libvirt_storage_pool文件夹里, qemu 用户必须拥有libvirt_storage_pool 的访问权限如果存在访问权限问题可以使用如下命令来纠正:setfacl -m g:kvm:--x ~原文链接: https://github.com/GoogleCloud ... os.md--------------------------  分割线 ------------------------------配置 Fedora/Centos 以支持 kubernetes 小型集群测试安装 dnsmasq安装 ebtables安装 qemu安装 libvirt应用并启动libvirt 守护进程:systemctl enable libvirtdsystemctl start libvirtd6. 赋予 libvirt 用户访问权限7. 检查你的 $HOME 可被 qemu 用户使用virsh -c qemu:///system pool-list可以创建 /etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules 来给 libvirt 所有访问当前账户的权限 (直接执行此命令就可以),适用于 Fedora21, Archsudo /bin/sh -c "cat - > /etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules" << EOFpolkit.addRule(function(action, subject) { if (action.id == "org.libvirt.unix.manage" && subject.user == "$USER") { return polkit.Result.YES; polkit.log("action=" + action); polkit.log("subject=" + subject); }});EOF如果你的 LInux 的发行版是 Ubuntu 14.04.1 LTS,可以检查 libvirt unix socket 的权限,ls -l /var/run/libvirt/libvirt-socksrwxrwx--- 1 root libvirtd 0 févr. 12 16:03 /var/run/libvirt/libvirt-sock如果没有权限的话,可以执行下面命令来加入用户到 libvirtd 账户usermod -a -G libvirtd $USER$USER needs to logout/login to have the new group be taken into account所有的有关 vm 创建的文件全部都存储在 ./cluster/libvirt-coreos/libvirt_storage_pool文件夹里, qemu 用户必须拥有libvirt_storage_pool 的访问权限如果存在访问权限问题可以使用如下命令来纠正:setfacl -m g:kvm:--x ~原文链接: https://github.com/GoogleCloud ... os.md--------------------------  分割线 ------------------------------如何使用 gvm (Go Version Manager go语言版本控制工具)搭建go语言的编译环境在这里使用了gvm go语言版本管理器(go version manager)来对 centos 和 fedora 宿主机 (也适用于ubuntu)的 go 版本进行统一的控制和管理:1 复制代码到本地:sudo yum install -y wget make binutils bison gcc build-essential # 可能需要安装这些packagesudo yum install -y python-pygments yajl # 同上bash < <(curl -s -S -L https://raw.githubusercontent. ... taller) # Get script installing “Go” languagesource /home/${USER}/.gvm/scripts/gvm # Source the script代码将被放在 ~/.gvm 文件夹2 打开 ~/.bashrc 并且 source gvm目录[[ -s “$HOME/.gvm/scripts/gvm” ]] && source “$HOME/.gvm/scripts/gvm”gvm的可执行文件将被加入到系统环境变量中3 确认gvm安装成功$ gvm versionGo Version Manager v1.0.22 installed at /home/myuser/.gvm如果gvm安装正确的话程序将成功执行4 安装 golist 所有的可用的 go 版本$ gvm listall…go1.2rc5go1.3go1.3.1go1.3.2go1.3.3go1.3beta1go1.3beta2go1.3rc1go1.3rc2go1.4go1.4beta1go1.4rc1go1.4rc2这里我们将使用比较新的 go1.4.2$ gvm install go1.4.2Downloading Go source…Installing go1.4.2…* Compiling…5 选择要使用的 go 的版本$ gvm use go1.4Now using version go1.46 执行 go 确认程序正确安装$ go versiongo version go1.4 linux/amd64--------------------------  分割线 ------------------------------Kubernetes 源码编译以及源码基于libvirt/kvm的coreos集群测试介绍本文主要集中介绍基于 centos/Fedora 的 kubernetes 的源码编译以及本地基于kvm的coreos集群的代码测试: 集群的启动速度非常快(几秒钟),因为使用COW减少了磁盘开销,因为使用了KSM减少了内存开销搭建go语言的编译环境请参考另一篇博文:gvm 安装 go2. 下载编译kubernetes<pre name="code" class="plain">$ gvm use go1.4.2Now using version go1.4.2$ git clone https://github.com/googlecloudplatform/kubernetes$ cd kubernetes$ make allhack/build-go.sh +++ [0531 21:35:53] Building go targets for linux/amd64: cmd/kube-proxy cmd/kube-apiserver cmd/kube-controller-manager cmd/kubelet cmd/hyperkube cmd/kubernetes plugin/cmd/kube-scheduler cmd/kubectl cmd/integration cmd/gendocs cmd/genman cmd/genbashcomp examples/k8petstore/web-server github.com/onsi/ginkgo/ginkgo test/e2e/e2e.test+++ [0531 21:36:19] Placing binaries编译完了以后我们就可以找到所有的可执行文件:$ ls -la _output/local/bin/linux/amd64/total 354692drwxrwxr-x 2 mjiao mjiao 4096 May 31 21:36 .drwxrwxr-x 3 mjiao mjiao 4096 May 31 21:36 ..-rwxr-xr-x 1 mjiao mjiao 24849215 May 31 21:36 e2e.test-rwxr-xr-x 1 mjiao mjiao 20107691 May 31 21:36 genbashcomp-rwxr-xr-x 1 mjiao mjiao 20133158 May 31 21:36 gendocs-rwxr-xr-x 1 mjiao mjiao 20306640 May 31 21:36 genman-rwxr-xr-x 1 mjiao mjiao 9512624 May 31 21:36 ginkgo-rwxr-xr-x 1 mjiao mjiao 38847712 May 31 21:36 hyperkube-rwxr-xr-x 1 mjiao mjiao 37920915 May 31 21:36 integration-rwxr-xr-x 1 mjiao mjiao 32126232 May 31 21:36 kube-apiserver-rwxr-xr-x 1 mjiao mjiao 24822056 May 31 21:36 kube-controller-manager-rwxr-xr-x 1 mjiao mjiao 20106480 May 31 21:36 kubectl-rwxr-xr-x 1 mjiao mjiao 32119425 May 31 21:36 kubelet-rwxr-xr-x 1 mjiao mjiao 17635909 May 31 21:36 kube-proxy-rwxr-xr-x 1 mjiao mjiao 39880431 May 31 21:36 kubernetes-rwxr-xr-x 1 mjiao mjiao 17842416 May 31 21:36 kube-scheduler-rwxr-xr-x 1 mjiao mjiao 6943248 May 31 21:36 web-server3. 启动源代码自带集群测试在此之前我们需要为我们的 Linux 主机配置好 KVM/libvirt 环境,清参考这篇博文:Libvirt 环境搭建libvirt-cores 将要创建一个kubernetes master 和 3个 kubernetes minions, 启动本地的 cluster 命令:cd kuberntesexport KUBERNETES_PROVIDER=libvirt-coreosKUBE_PUSH=local cluster/kube-up.shKUBERNETES_PROVIDER 环境变量用来定义 kubernetes 的集群的服务提供者, 默认为 google 云服务 google compute engine.NUM_MINIONS 用来定义集群的 minions 的数量, 默认为 3个KUBE_PUSH 用来指定部署到 minions 的 kubernetes 可执行文件的种类:release: 默认设置,部署 _output/release-tars/kubernetes-server-….tar.gz 到集群,而这个release文件将会是 make release or make release-skip-tests的执行结果local: 部署 _output/local/go/bin (执行 make 命令得到的可执行文件)可以执行以下命令来查看群的状态virsh -c qemu:///system list Id Name State 15 kubernetes_master running 16 kubernetes_minion-01 running 17 kubernetes_minion-02 running 18 kubernetes_minion-03 running也可以使用 kubernetes 的命令来查看$ ./cluster/kubectl.sh get minionsNAME LABELS STATUS192.168.10.2 <none> Ready192.168.10.3 <none> Ready192.168.10.4 <none> Ready这些虚拟机运行的是coreos, ssh key (~/.ssh/id_*.pub)已经被安装到虚拟机里面, 可以使用 core 作为用户名来连接到这些 vm,master vm 的 ip 为 192.168.10.1,minions 的 ip 地址可以在以上的命令的结果里找到。连接到 mater:ssh core@192.168.10.1连接到 kubernetes_minion-01:ssh core@192.168.10.2启动一个5个子节点的集群:NUM_MINIONS=5 cluster/kube-up.sh删除集群:cluster/kube-down.shkubernetes 命令行工具cluster/kubectl.sh可以创建如下的 Pod 来测试集群是否正确运行: apache.json :{ "id": "fedoraapache", "kind": "Pod", "apiVersion": "v1beta1", "desiredState": { "manifest": { "version": "v1beta1", "id": "fedoraapache", "containers": [{ "name": "fedoraapache", "image": "fedora/apache", "ports": [{ "containerPort": 80, "hostPort": 80 }] }] } }, "labels": { "name": "fedoraapache" }}cluster/kubectl create -f apache.jsoncluster/kubectl get pods找到这个 Pod 的 IP 地址,从集群中的Pod所在的主机向 Pod 发送请求:curl http://$POD_IP

docker

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: