求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 
 

Kubernetes教程
Kubernetes概述
Kubernetes设计架构
kubernetes设计理念
创建Kubernetes集群
基于Docker本地运行Kubernetes
使用Vagrant
本地运行Kubrenetes v1.0
Google Computer Engine入门
AWS EC2快速入门
在Azure上使用CoreOS和Weave的 Kubernetes
从零开始k8s
CoreOS部署Kubernetes集群
CloudStack部署Kubernetes集群
vSphere部署Kubernetes集群
Ferdora部署Kubernetes集群
CentOS部署Kubernetes集群
Ubuntu物理节点上部署Kubernets集群
Mesos部署Kubernetes集群
Kubernetes用户指南:应用程序管理
名词解释 Pods
名词解释 Labels
名词解释:Namespace
名词解释 Replication Controller
名词解释:Node
名词解释:ReplicaSets
名词解释 Services
名词解释 Volumes
名词解释:PV/PVC/StorageClass
名称解释:Deployment
名词解释:Secret
名词解释:StatefulSet
名词解释:DaemonSet
名词解释:Service Account
名词解释:CronJob
名词解释:Job
名词解释:Security Context和PSP
名词解释:Resource Quotas
名词解释:Network Policy
名词解释:Ingress
名词解释:ThirdPartyResources
名词解释:ConfigMap
名词解释:PodPreset
配置Kubernetes
管理应用:部署持续运行的应用
Horizontal Pod Autoscaling
管理应用:连接应用
管理应用: 在生产环境中使用Pods和容器
Kubernetes UI
Kube-API Server
授权插件
认证插件
API Server端口配置
Admission Controller
Service Accounts集群管理指南
使用Kubernetes在云上原生部署cassandra
Spark例子
Storm 示例
示例: 分布式任务队列 Celery, RabbitMQ和Flower
Kubernetes在Hazelcast平台上部署原生云应用
Meteor on Kuberenetes
配置文件使用入门
环境向导示例
在Kubernetes上运行你的第一个容器
kubectl
安装和设置kubectl
kubectl annotate
kubectl api-versions
kubectl apply
kubectl attach
kubectl cluster-info
kubectl config
kubectl config set-cluster
kubectl config set-context
kubectl config set-credentials
kubectl config set
kubectl config unset
kubectl config use-context
kubectl config view
kubectl create
kubectl delete
kubectl describe
kubectl edit
kubectl exec
kubectl logs
kubectl version
故障排查
应用程序相关的故障排查
 
 

使用Vagrant
 
1488 次浏览
63次  

使用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元





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



1488 次浏览
63次
 捐助