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
  • 相关阅读:
    蛇形填数字 (附书上例题答案)
    排列 (C++实现)
    分数化小数(C++)
    Operating System 1.2 什么是操作系统
    Python知识点入门笔记——基本控制流程
    Python知识点入门笔记——基本运算和表达式
    Python知识点入门笔记——Python的基本数据类型
    网络架构遵循原则
    浏览器输入网址后发生了这些
    JAVA解析XML有哪几种方法?并简述各自的优缺点
  • 原文地址:https://www.cnblogs.com/guarderming/p/12876760.html
Copyright © 2011-2022 走看看