zoukankan      html  css  js  c++  java
  • 使用Vagrant

    使用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
  • 相关阅读:
    winform+c#之窗体之间的传值 Virus
    ASP.NET 2.0 利用 checkbox获得选中行的行号, 在footer中显示 Virus
    .NET中的winform的listview控件 Virus
    我的书橱
    Expert .NET 2.0 IL Assembler·译者序一 写在一稿完成之即
    Verbal Description of Custom Attribute Value
    AddressOfCallBacks in TLS
    下一阶段Schedule
    2008 Oct MVP OpenDay 第二天 博客园聚会
    2008 Oct MVP OpenDay 第二天 颁奖·讲座·晚会
  • 原文地址:https://www.cnblogs.com/guarderming/p/12876760.html
Copyright © 2011-2022 走看看