要资料 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 讲座吧   成长之路  
会员   
 
追随技术信仰

随时听讲座
每天看新闻
 
 

Kubernetes教程
Kubernetes概述
Kubernetes设计架构
kubernetes设计理念
创建Kubernetes集群
基于Docker本地运行Kubernetes
使用Vagrant
本地运行Kubrenetes v1.0
Google Computer Engine入门
AWS EC2快速入门
在Azure上使用CoreOS和Weave的 Kubernetes
从零开始k8s
CoreOS部署Kubernetes集群
 
 

使用Vagrant
 
36 次浏览
4次  
 捐助

使用Vagrant(和VirtualBox)运行Kubernetes是在本地机器(Linux,Mac OS X)进行运行/测试/开发的简单方法。

预备知识

1. 从http://www.vagrantup.com/downloads.html下载最新版 Vagrant >=1.6.2

2. 下载以下中的一项:

i. 从http://www.vagrantup.com/downloads.html下载4.3.28版本的VirtualBox

ii. 版本号>=5的VMWare Fusion和合适的Vagrant VMWare Fusion provider

iii. 版本号>=9的VMWare Workstation以及Vagrant VMWare Fusion provider

iv. 版本号>=9的Parallels Desktop以及Vagrant Parallels provider

v. 支持硬件虚拟化并且带有 libvirt 的KVM。Vagrant-libvirt,为fedora提供官方的rpm,可以使用 yum install vagrant-libvirt 命令安装

设置

简单运行下列代码就能够设置一个集群

export KUBERNETES_PROVIDER=vagrant
curl -sS https://get.k8s.io | bash

或者,你也可以下载Kubernetes发行版、解压归档文件。打开终端运行命令启动本地集群:

cd kubernetes
export KUBERNETES_PROVIDER=vagrant
./cluster/kube-up.sh

环境变量KUBERNETES_PROVIDER用来告诉所有不同的集群管理脚本该使用哪一个脚本管理器(比如Vagrant)。如果你忘记设置这个变量,默认假设你运行Google Compute Engine上运行k8s。

默认情况下,Vagrant会创建一个单独的master VM(被称为kubernetes-master),以及一个节点VM(被称为kubernetes-minion-1)。每个VM会占用1G内存,所以确保你有至少2G-4G

的空余内存(以及合适的空闲硬盘空间)。

Vagrant会提供集群中每台机器运行Kuberbetes所有必须的组件。每台机器会花费几分钟完成初始化设置。

如果你下载了多个Vagrant provider,Kubernetes通常会选择最恰当的那个。但是,你可以通过设置环境变量VAGRANT_DEFAULT_PROVIDER的值来让Kubernetes使用哪个Vagrant

provider:

export VAGRANT_DEFAULT_PROVIDER=parallels
export KUBERNETES_PROVIDER=vagrant
./cluster/kube-up.sh

默认情况下每个集群中的VM运行Fedora系统。

通过下面的命令连接master或任意节点:

vagrant ssh master
vagrant ssh minion-1

如果你运行超过一个节点,可以通过下面命令连接其它节点:

vagrant ssh minion-2
vagrant ssh minion-3

集群中的每个节点会下载docker daemon和kubelet。

The master node instantiates the Kubernetes master components as pods on the

machine.( 这句翻译待讨论 )

master节点会实例化Kubernetes master 组件作为 pods 运行在机器上。

查看kubernetes-master上的服务状态或者日志:

[vagrant@kubernetes-master ~] $ vagrant ssh master
[vagrant@kubernetes-master ~] $ sudo su
[root@kubernetes-master ~] $ systemctl status kubelet
[root@kubernetes-master ~] $ journalctl -ru kubelet
[root@kubernetes-master ~] $ systemctl status docker
[root@kubernetes-master ~] $ journalctl -ru docker
[root@kubernetes-master ~] $ tail -f /var/log/kube-apiserver.log
[root@kubernetes-master ~] $ tail -f /var/log/kube-controller-manager.log
[root@kubernetes-master ~] $ tail -f /var/log/kube-scheduler.log

查看任意节点的服务状态:

[vagrant@kubernetes-master ~] $ vagrant ssh minion-1
[vagrant@kubernetes-master ~] $ sudo su
[root@kubernetes-master ~] $ systemctl status kubelet
[root@kubernetes-master ~] $ journalctl -ru kubelet
[root@kubernetes-master ~] $ systemctl status docker
[root@kubernetes-master ~] $ journalctl -ru docker

使用Vagrant与kubernetes集群交互

启动好你的kubernetes集群后,你可以使用常用的Vagrant命令管理集群中的节点。

源代码改变后推送更新到Kubernetes代码:

./cluster/kube-push.sh

暂停与重启集群:

vagrant halt
./cluster/kube-up.sh

删除集群:

vagrant destroy

一旦你的Vgrant机器运行并且提供相应资源,第一件要做的事情就是检查能否使用kubectl.sh脚本。

你可能需要先编译二进制文件,可以使用make命令:

$ ./cluster/kubectl.sh get nodes

NAME LABELS

10.245.1.4 <none>

10.245.1.5 <none>

10.245.1.3 <none>

验证你的master

当我们使用vagrant provider管理Kubernetes时,cluster/kubectl.sh脚本会创建证书保存在 home 或 ? (ps:Linux中使用 ? 表示当前用户的家目录)目录下的.kubernetes_vagrant_auth文件中,这样以后就不会出现验证的提示了。

cat ~/.kubernetes_vagrant_auth
{ "User": "vagrant",
"Password": "vagrant",
"CAFile": "/home/k8s_user/.kubernetes.vagrant.ca.crt",
"CertFile": "/home/k8s_user/.kubecfg.vagrant.crt",
"KeyFile": "/home/k8s_user/.kubecfg.vagrant.key"
}

现在你可以使用cluster/kubectl.sh脚本了。例如使用下面的命令列出已经启动的节点:

./cluster/kubectl.sh get nodes

运行容器

你的集群已经运行起来了,你可以列出集群中的节点:

$ ./cluster/kubectl.sh get nodes
NAME LABELS
10.245.2.4 <none>
10.245.2.3 <none>
10.245.2.2 <none>

现在开始运行一些容器吧!

现在你可以用cluster/kube-*.sh的任何命令来与你的VMs交互。启动容器之前并没有 pods 、 service 和 replication controller :

$ ./cluster/kubectl.sh get pods
NAME READY STATUS RESTARTS AGE
$ ./cluster/kubectl.sh get services
NAME LABELS SELECTOR IP(S) PORT(S)
$ ./cluster/kubectl.sh get replicationcontrollers
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS

启动一个运行nginx、使用复制控制器并且副本数为3的容器:

$ ./cluster/kubectl.sh run my-nginx --image=nginx --replicas=3 --port=80

(此时)列出pods,会看到3个容器已经被启动了,并且处于等待状态:

$ ./cluster/kubectl.sh get pods
NAME READY STATUS RESTARTS AGE
my-nginx-5kq0g 0/1 Pending 0 10s
my-nginx-gr3hh 0/1 Pending 0 10s
my-nginx-xql4j 0/1 Pending 0 10s

你需要等待(Vagrant)分配好资源,这时可以通过命令来监测节点:

下载好docker nginx镜像后容器就会启动,通过下面的命令查看:

这时再次列举pods、服务和复制控制器,会看到:

$ ./cluster/kubectl.sh get pods
NAME READY STATUS RESTARTS AGE
my-nginx-5kq0g 1/1 Running 0 1m
my-nginx-gr3hh 1/1 Running 0 1m
my-nginx-xql4j 1/1 Running 0 1m
$ ./cluster/kubectl.sh get services
NAME LABELS SELECTOR IP(S) PORT(S)
$ ./cluster/kubectl.sh get replicationcontrollers
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
my-nginx my-nginx nginx run=my-nginx 3

我们没有启动任何服务,因此列举服务是什么也没有。但是我们看到3个副本正常显示。查看guestbook了解如何创建服务。现在你已经可以尝试增加或减少副本了:

$ ./cluster/kubectl.sh scale rc my-nginx --replicas=2
$ ./cluster/kubectl.sh get pods
NAME READY STATUS RESTARTS AGE
my-nginx-5kq0g 1/1 Running 0 2m
my-nginx-gr3hh 1/1 Running 0 2m

祝贺你!

解决常见问题

我一直在下载(很大的)box(ps:box指vagrant封装好的vm,可以下载直接使用,不用自己再从iso安装)

Vagrantfile默认从S3下载box。当调用kube-up.sh脚本是你可以提供name和可选的连接作为参数来修改下载站点:

export KUBERNETES_BOX_NAME=choose_your_own_name_for_your_kuber_box
export KUBERNETES_BOX_URL=path_of_your_kuber_box
export KUBERNETES_PROVIDER=vagrant
./cluster/kube-up.sh

我只是创建了集群,但是遇到授权错误很可能你正试图连接的集群中的~/.kubernetes_vagrant_auth文件不正确:

rm ~/.kubernetes_vagrant_auth

使用kubectl.sh创建正确的证书:

cat ~/.kubernetes_vagrant_auth
{
"User": "vagrant",
"Password": "vagrant"
}

我已经创建了集群,但是看不到运行的容器!

如果是你第一次创建集群,每个节点上的kubelet会制定一个docker下载镜像和依赖镜像的时间表。这可能会占用很多时间并且推迟初始化pod、分配资源。

我想修改Kubernetes代码

你可以设置集群来 hacking ,参考vagrant developer guide

已经运行Vagrant up命令,但是节点没有生效

( vagrant ssh minion-1 )连接到一个节点查看日志和salt minion日志( sudo cat/var/log/salt/minion )

我想修改节点数

我们可以控制通过主机上环境变量NUM_MINIONS实例化的节点的数量。如果你计划使用副本,我们强烈支持你启动足够的节点来满足最大可能的副本大小。如果你不打算使用副本,你可以运行单个节点来节省一些系统资源。只需要设置NUM_MINIONS为1:

export NUM_MINIONS=1

我想给我的VMs分配更多内存

使用环境变量KUBERNETES_MEMORY控制分配给虚拟机的内存大小。只需要把它设置为你想要的大小,比如:

export KUBERNETES_MEMORY=2048

如果你想要更细粒度的控制内存,你可以单独设置master和节点的内存大小,比如:

export KUBERNETES_MASTER_MEMORY=1536
export KUBERNETES_MINION_MEMORY=2048

运行vagrant使VM待机,但是失效

vagrant suspend命令很可能弄混了网络。这种情况下不支持这条命令。

我想通过vagrant通过NFS同步文件

可以设置环境变量KUBERNETES_VAGRANT_USE_NFS的值为true来保证vagrant使用nfs同步虚拟机的文件夹。nfs比virtualbox和vmware的 共享文件夹 都要快并且不需要额外的设置。可以阅读vagrant docs获取在主机上配置nfs的细节。这项设置不会影响libvirt provider,它默认使用nfs:

export KUBERNETES_VAGRANT_USE_NFS=true

您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



36 次浏览
4次  
 捐助
 

每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号