在Azure上使用CoreOS和Weave的 Kubernetes
介绍
在本指南中我将演示如何在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
注:配置文件名字可能有所不同,确保使用你所看到的那个。
检查一下集群中的两个节点:
-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
现在,我们使用先前部署的状态文件和添加的一系列节点来运行扩展脚本:
-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:
-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
您可以看到又有两个节点顺利地加入进来,现在,让我们来扩展Guestbook实例的数量。
首先,再次检查一下有多少replication controller:
-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
基于现在有四个节点,让我们进行相应地扩展:
-00 ~ $ kubectl scale --replicas=4 rc redis-slave >>>>>>> coreos/azure: Updates for 1.0 scaled -00 ~ $ kubectl scale --replicas=4 rc frontend scaled
现在,再来检查下:
-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 的节点,您会看到每个节点上都运行着一个实例。
-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
注:确保使用最新的状态文件,因为扩展之后生成了新的文件。 顺便说一下,如果您喜欢,您可以使用文中所示脚本部署多个集群。