要资料 文章 文库 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集群
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
 
 

在Azure上使用CoreOS和Weave的 Kubernetes
 
37 次浏览
7次  
 捐助

介绍

在本指南中我将演示如何在Azure云端部署Kubernetes集群。您将使用CoreOS与Weave,Weave以透明而可靠的方式实现了简单、安全的网络。本指南的目的是提供一个即开即装即用的实现方法,以便最终可以稍加改变就可以投入到生产环境中。本文将演示如何提供一个专门的Kubernetes主节点和ETCD节点,并展示如何轻松地扩展集群。

前提条件

1.您需要一个Azure账号。

开始吧!

开始之前,您需要checkout下代码:

git clone https://github.com/kubernetes/kubernetes
cd kubernetes/docs/getting-started-guides/coreos/azure/

您需要在您的机器上安装Node.js,如果您之前使用过Azure CIL,那么您应该已经安装了。

首先,您需要安装一些依赖:

npm install

现在,您需要做的是:

./azure-login.js -u <your_username>
./create-kubernetes-cluster.js

这个脚本会提供适用于生产环境的集群,集群中有一个3个专用的ETCD节点形成环形:1个kubernetes主节点和2个kubernetes节点。KUBE-00虚拟机将是主节点,您的工作负荷只会部署在KUBE-01节点和KUBE-02节点上。最初,所有的虚拟机都是单核的,以确保自由层的用户无需额外的代价就可以复制它。稍后我将展示如何添加更多更大的虚拟机。

一旦Azure虚拟机创建完成,你应该可以看到下面这样的信息:

...
azure_wrapper/info: Saved SSH config, you can use it like so: `ssh -F ./output/kube_1c1496016083b4 _ssh_azure_wrapper/info: The hosts in this deployment are:
[ 'etcd-00', 'etcd-01', 'etcd-02', 'kube-00', 'kube-01', 'kube-02' ]
azure_wrapper/info: Saved state into `./output/kube_1c1496016083b4_deployment.yml`

像下面这样登陆进主节点:

ssh -F ./output/kube_1c1496016083b4_ssh_conf kube-00

注:配置文件名字可能有所不同,确保使用你所看到的那个。

检查一下集群中的两个节点:

core@kube-00 ~ $ kubectl get nodes
NAME LABELS STATUS
kube-01 kubernetes.io/hostname=kube-01 Ready
kube-02 kubernetes.io/hostname=kube-02 Ready

部署工作负载

现在让我们按照Guestbook的实例来部署:

kubectl create -f ~/guestbook-example

您需要等待pod部署完成,然后执行下面的命令,等待STATUS 从Pending变为Running:

kubectl get pods --watch

注:大部分的时间将会花在下载每个节点的Docker容器镜像上。 最后您将会看到:

NAME READY STATUS RESTARTS AGE
frontend-0a9xi 1/1 Running 0 4m
frontend-4wahe 1/1 Running 0 4m
frontend-6l36j 1/1 Running 0 4m
redis-master-talmr 1/1 Running 0 4m
redis-slave-12zfd 1/1 Running 0 4m
redis-slave-3nbce 1/1 Running 0 4m

扩展

两个单核的节点肯定是无法满足现如今的生产系统,让我们通过添加几个更大的节点来扩展集群。 您需要再打开一个您机器上的终端窗口,进入相同的工作目录(也就是说这个目录:~/Workspace/kubernetes/docs/getting-started-guides/coreos/azure/) 首先,让我们设置一下新虚拟机的大小:

export AZ_VM_SIZE=Large

现在,我们使用先前部署的状态文件和添加的一系列节点来运行扩展脚本:

core@kube-00 ~ $ ./scale-kubernetes-cluster.js ./output/kube_1c1496016083b4_deployment.yml 2
...
azure_wrapper/info: Saved SSH config, you can use it like so: `ssh -F ./output/kube_8f984af944f572_ ssh_azure_wrapper/info : The hosts in this deployment are:
[ 'etcd-00',
'etcd-01',
'etcd-02',
'kube-00',
'kube-01',
'kube-02',
'kube-03',
'kube-04' ]
azure_wrapper/info: Saved state into `./output/kube_8f984af944f572 _deployment.yml`

注:这一步在 ./output 下产生了一些新文件。

回到kube-00:

core@kube-00 ~ $ kubectl get nodes
NAME LABELS STATUS
kube-01 kubernetes.io/hostname=kube-01 Ready
kube-02 kubernetes.io/hostname=kube-02 Ready
kube-03 kubernetes.io/hostname=kube-03 Ready
kube-04 kubernetes.io/hostname=kube-04 Ready_deployment.yml`

您可以看到又有两个节点顺利地加入进来,现在,让我们来扩展Guestbook实例的数量。

首先,再次检查一下有多少replication controller:

core@kube-00 ~ $ kubectl get rc
ONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
frontend php-redis kubernetes/example-guestbook-php-redis:v2 name=frontend 3
redis-master master redis name=redis-master 1
redis-slave worker kubernetes/redis-slave:v2 name=redis-slave 2

基于现在有四个节点,让我们进行相应地扩展:

core@kube-00 ~ $ kubectl scale --replicas=4 rc redis-slave
>>>>>>> coreos/azure: Updates for 1.0
scaled
core@kube-00 ~ $ kubectl scale --replicas=4 rc frontend
scaled

现在,再来检查下:

core@kube-00 ~ $ kubectl get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
frontend php-redis kubernetes/example-guestbook-php-redis:v2 name=frontend 4
redis-master master redis name=redis-master 1
redis-slave worker kubernetes/redis-slave:v2 name=redis-slave 4

现在,您已经拥有了更多的前端Guestbook和redis slave实例。如果您查看一下所有 name=fronted 的节点,您会看到每个节点上都运行着一个实例。

core@kube-00 ~/guestbook-example $ kubectl get pods -l name=frontend
NAME READY STATUS RESTARTS AGE
frontend-0a9xi 1/1 Running 0 22m
frontend-4wahe 1/1 Running 0 22m
frontend-6l36j 1/1 Running 0 22m
frontend-z9oxo 1/1 Running 0 41s

将应用暴露给外部

Kubernetes 1.0 中没有原生的Azure负载均衡器,不过,下面演示了如何将Guestbook应用暴露给Internet。

./expose_guestbook_app_port.sh ./output/kube_1c1496016083b4_ssh_conf
Guestbook app is on port 31605, will map it to port 80 on kube-00
info: Executing command vm endpoint create
+ Getting virtual machines
+ Reading network configuration
+ Updating network configuration
info: vm endpoint create command OK
info: Executing command vm endpoint show
+ Getting virtual machines
data: Name : tcp-80-31605
data: Local port : 31605
data: Protcol : tcp
data: Virtual IP Address : 137.117.156.164
data: Direct server return : Disabled
info: vm endpoint show command OK

然后,您就可以通过上面所展示的kube-00的Azure虚拟ip(在我的例子中,也就是指http://137.117.156.164/),在任何地方连接它。

接下来

现在您已经拥有一个运行在Azure上规模性的集群,祝贺!

或许,您应该尝试部署其他的应用示例,或者动手写一个自己的。

移除…

如果您不希望顾虑Azure的费用问题,您可以移除集群。正如您看到的,移除它非常简单:

./destroy-cluster.js ./output/kube_8f984af944f572_deployment.yml

注:确保使用最新的状态文件,因为扩展之后生成了新的文件。 顺便说一下,如果您喜欢,您可以使用文中所示脚本部署多个集群。


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

1元 10元 50元





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



37 次浏览
7次
 捐助
 

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

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