Kubernetes应用部署模型解析(部署篇)

【编者按】Kubernetes可用来管理Linux容器集群,加速开发和简化运维(即DevOps)。但目前网络上关于Kubernetes的文章介绍性远多于实际使用。本系列文章着眼于实际部署,带您快速掌握Kubernetes。在介绍部署之前需要了解的原理和概念之后,作者在本文中以一个简单的nginx服务来展示了复制器和Service的使用,特别通过对Service的cluster IP和NodePort的分析,使得读者能够了解这个模型中的网络特性。

一个简单的应用

讲了这么多的原理和概念,本章我们就部署一个简单应用来感受一下Kubernetes的部署模型。

部署Kubernetes集群

kubernetes github站点 上有数十种针对各种环境的部署文档,本文选择基于Ubuntu的集群部署方案。在没有使用本地docker镜像的情况下,在部署过程中需要确保能够访问站点gcr.io。

基于 Ubuntu的集群部署方案文档 写得比较详细,按照它的步骤几乎不会出错。在进行真正的部署之前,一定要确保:

所有的节点安装了docker version 1.2+ 和 bridge-utils

如果没有本地的docker registry, 要确保节点能访问互联网gcr.io

确保管理节点能够ssh 访问所有节点。比如ssh gongysh@192.168.0.201 ls

这里我们集群将采用下图显示的结构。我们将在管理节点上运行集群管理命令。我们将有一个服务和代理混合的节点,还有两个纯的代理节点。

Kubernetes应用部署模型解析(部署篇)

首先我们要下载kubernetes的代码到管理节点上:

$ git clone https://github.com/GoogleCloudPlatform/kubernetes.git

然后进行本地构建:

cd kubernetes ./build/run.sh hack/build-do.sh

修改config-default.sh定义集群,本文使用的几个关键配置如下:

gongysh@Fedora20:~/git/kubernetes/cluster/ubuntu$ cat config-default.sh #!/bin/bash # Define all your cluster nodes, MASTER node comes first" # And separated with blank space like <user_1@ip_1> <user_2@ip_2> <user_3@ip_3> export nodes="gongysh@192.168.0.201 gongysh@192.168.0.202 gongysh@192.168.0.203" # Define all your nodes role: a(master) or i(minion) or ai(both master and minion), must be the order same export roles=("ai" "i" "i") # Define minion numbers export NUM_MINIONS=${NUM_MINIONS:-3} # define the IP range used for service portal. # according to rfc 1918 ref: https://tools.ietf.org/html/rfc1918 choose a private ip range here. export SERVICE_CLUSTER_IP_RANGE=192.168.3.0/24 # define the IP range used for flannel overlay network, should not conflict with above SERVICE_CLUSTER_IP_RANGE range export FLANNEL_NET=172.16.0.0/16 ....

最后运行集群构建命令:

$ cd cluster $ KUBERNETES_PROVIDER=ubuntu ./kube-up.sh

当你看到:

Kubernetes cluster is running. The master is running at: ... calling validate-cluster Found 3 nodes. 1 NAME LABELS STATUS 2 192.168.0.201 <none> Ready 3 192.168.0.202 <none> Ready 4 192.168.0.203 <none> Ready Validate output: Cluster validation succeeded Done, listing cluster services: Kubernetes master is running at :8080

表明集群构建成功。

部署nginx应用

我们以下面的图来安装一个简单的静态内容的nginx应用:

Kubernetes应用部署模型解析(部署篇)

首先,我们用复制器启动一个2个备份的nginx Pod。然后在前面挂Service,一个service只能被集群内部访问,一个能被集群外的节点访问。下面所有的命令都是在管理节点上运行的。

部署nginx pod 和复制器

如下表所示:

$ cat nginx-rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: nginx-controller spec: replicas: 2 selector: name: nginx template: metadata: labels: name: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80

我们定义了一个nginx pod复制器,复制份数为2,我们使用nginx docker镜像。

执行下面的操作创建nginx pod复制器:

$ kubectl -s :8080 create -f nginx-rc.yaml

由于kubernetes要去gcr.io下载gcr.io/google_containers/pause镜像,然后下载nginx镜像,所以所创建的Pod需要等待一些时间才能处于running状态。

$ kubectl -s :8080 get pods NAME READY REASON RESTARTS AGE nginx-controller-6zr34 1/1 Running 0 48m nginx-controller-njlgt 1/1 Running 0 48m

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/39cc0e621f62520e8b139fcc8dd327d1.html