目录
Spinnaker 是 Netflix 的开源项目,是一个持续交付平台,它提供在多种平台上实现开箱即用的集群管理和部署功能的平台。我们可以通过其强大的集群管理特性,来查看和管理集群中的资源。集群管理主要包括服务组(Server Group)、集群(Cluster)、应用(Applications)、负载均衡(Load Balancer)、安全组(Security Group)几大块。
Spinnaker 官网文档 中对其集群管理的整体描述如下图所示:
上一篇文章 初试 Kubernetes 集群中使用 Helm 搭建 Spinnaker 平台 中,我们演示了如何在 Kubernetes 集群中通过 Helm 安装 Spinnaker,接下来我们使用该环境,来演示一下 Spinnaker 集群管理功能,如何使用 Spinnaker 执行 deploy 和 scale 一个应用到 Kubernetes 集群中。本次演示环境,我是在本机 MAC OS 上操作,以下是安装的软件及版本:
注意:这里我就不在详细描述安装过程,具体步骤参考 初试 Kubernetes 集群中使用 Helm 搭建 Spinnaker 平台 即可,写的很详细,本次主要通过一个 Demo 演示集群管理的简单操作过程。
这里我们通过一个简单的 Nginx Server 示例来演示一下如何操作的吧!
浏览器访问 http://127.0.0.1:9000
进入 Spinnaker UI 页面,点击导航栏 “Applications” 进入应用列表页面,点击页面右上角 “Actions” —> “Create Application” 创建一个应用。
注意:进入到应用列表页面,默认已经有 5 个应用,这是在安装 Spinnaker、Helm、Kubernetes 时自动创建的应用,可以不用管它们。
在创建应用弹框页面,填写 Name、Owner Email 等信息,这里我填写 nginx 作为应用名称,点击 “Create” 按钮完成应用的创建。
创建完 nginx 应用后,自动进入该应用详情页面,点击顶部导航栏 “LOAD BALANCERS”,进入负载均衡列表页面,默认是没有任何记录的。
点击页面 “Create Load Balancer” 按钮,在创建负载均衡弹框页面填写信息,点击 “Create” 完成负载均衡策略的创建。这里 “Stack” 处填 prod,可以理解为作为生产环境使用标示,当然也可以写 dev、test 等以示区分运用到不同环境。在 “Ports” 栏下边 “Target Port” 处填 80,作为对外转发目标端口。“Advanced Settings” 栏下边 “Type” 处选择 NodeType,这里可选项有 ClusterIP、LoadBalancer、NodeType,针对不同的应用类型和平台,选择所支持的类型,这里我选择 NodeType。
创建完毕后,我们会发现在 nginx 应用的 Load Balancers 页面就会出现刚上边创建的 nginx-prod 负载均衡记录,只不过该记录下没有关联任何 Service Group。注意:这里 Spinnaker 默认会以 Application Name - LoadBalancer Stack 方式来命名负载均衡策略。
创建完 nginx-prod 负载均衡策略之后,点击导航栏 “CLUSTERS”,进入集群列表页面,默认也是没有任何记录的。点击 “Create Service Group” 按钮,在创建服务组弹框页面填写信息,点击 “Create” 完成服务组的创建。这里 “Stack” 处依旧填 prod,意思跟上边一样,“Containers” 处填写容器 Docker 镜像地址,这里我们直接可以使用 DockerHub 官方提供的 index.docker.io/library/nginx:latest
最新镜像地址作为本次演示的镜像。“Load Balancers” 处选择上边创建的 nginx-prod 负载均衡策略。“Replicas” 栏下方 “Capacity” 处填 10,意味着该服务组将启动 10 个由该容器镜像启动的 Pod 实例,这里我为了好演示,故意多启动一些服务,实际应用中按需填写即可。“Container” 栏下方 “Pull Policy” 处选择 IFNOTPRESENT,当然也可以选择 ALWAYS、NEVER 来作为镜像拉取策略。点击 “Probes” 栏,点击 “Enable Readiness Probe” 和 “Enable Liveness Probe” 按钮来添加探测,默认配置即可,这里 “Readiness Probe” 为服务是否准备就绪的探测,“Liveness Probe” 为服务是否发生故障或存活探测。
点击完 “Create” 按钮后,就会进入到自动创建该 nginx-prod 服务组过程页面,总共分为 8 个步骤。注意:这里 Spinnaker 默认会以 Application Name - Server Group Stack 方式来命名服务组。
创建服务组需要一段时间,因为涉及到拉取镜像,启动服务等操作。在等待服务组创建完毕的过程中,我们去 Clusters 页面,会看到 nginx-prod 服务组下会显示 10 个红色的小块,这表示这些实例还没有准备好。
稍等一会,等这 10 个实例启动完毕,此时该页面 nginx-prod 服务组下会变成 10 个绿色的小块,表示这些实例都已经启动成功啦!
好了,现在集群服务已经启动啦!我们可以验证一下服务是否正常启动。首先通过 kubectl get service
命令行获取 Kubernetes 集群运行中的服务。
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 38d
nginx-prod NodePort 10.0.0.71 <none> 80:32056/TCP 6m
我们发现已经成功创建了 nginx-prod 服务,并且 nginx-prod 负载均衡策略将 NodePort 端口 32056 映射到 80 端口上了。此时,通过 minikube service nginx-prod
命令行,浏览器会自动打开该 nginx-prod 服务对应的 Web 页面 http://192.168.99.100:32056
。
$ minikube service nginx-prod
Opening kubernetes service default/nginx-prod in default browser...
OK 是可以正常访问的,妥妥没问题。接下来我们通过 kubectl get pods
命令查看启动的 nginx-prod Pod 列表,跟 Spinnaker UI 页面上 Cluster 服务组列表显示对比是否一致。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-minikube-2754686071-0g6h3 1/1 Running 2 2d
nginx-prod-v000-24z8p 1/1 Running 0 3m
nginx-prod-v000-3kplw 1/1 Running 0 3m
nginx-prod-v000-58329 1/1 Running 0 3m
nginx-prod-v000-8cvb3 1/1 Running 0 3m
nginx-prod-v000-c7pjr 1/1 Running 0 3m
nginx-prod-v000-drpds 1/1 Running 0 3m
nginx-prod-v000-g4vxp 1/1 Running 0 3m
nginx-prod-v000-jdmvp 1/1 Running 0 3m
nginx-prod-v000-szllm 1/1 Running 0 3m
nginx-prod-v000-xvhqt 1/1 Running 0 3m
我们会发现,是一模一样哒!接下来我们人为删除一个 nginx-prod 服务组中的一个 Pod,看下能否自动开启新一个新的 Pod 来达到之前定义的容量 10 吧。删除 Pod 很简单,可以通过 kubectl delete ...
命令行删除,当然也可以通过 Kubernetes Dashboard UI 页面删除,这里我演示下通过 Dashboard UI 页面删除吧。首先通过 minikube dashboard
命令打开其 UI 页面。
$ minikube dashboard
Opening kubernetes dashboard in default browser...
访问 Dashboard UI 页面,点击左侧 “Services”,右侧弹出所有服务列表,点击 nginx-prod 服务,进入到该服务详情页面,这里会列出来所有的与 nginx-prod 关联的 Pod 列表,我们选择任意一个 Pod 点击记录最后 “Actions” 弹出下拉菜单中点击 “Delete” 项,弹出确认删除对话框,点击 “DELETE” 按钮完成删除。
最后,我们去 Spinnaker UI 页面查看 Clusters 下 nginx-prod 服务组关联 Pod 已经成功删除并生成了一个新的 Pod 啦!
参考资料