初试 Kubernetes 集群中 Spinnaker 平台之集群管理

目录

    • 1、Spinnaker 集群管理介绍
    • 2、环境、软件准备
    • 3、通过 Spinnaker 部署和扩展容器应用到 Kubernetes
      • 3.1、创建应用(Application)
      • 3.2、创建负载均衡策略(Load Balancer)
      • 3.3、创建服务组(Server Group)
    • 4、验证并测试集群服务

1、Spinnaker 集群管理介绍

Spinnaker 是 Netflix 的开源项目,是一个持续交付平台,它提供在多种平台上实现开箱即用的集群管理和部署功能的平台。我们可以通过其强大的集群管理特性,来查看和管理集群中的资源。集群管理主要包括服务组(Server Group)、集群(Cluster)、应用(Applications)、负载均衡(Load Balancer)、安全组(Security Group)几大块。

Spinnaker 官网文档 中对其集群管理的整体描述如下图所示:

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第1张图片

  • Server Group:服务组,是资源管理单位,识别可部署组件和基础配置设置,它并且关联了一个负载均衡器和安全组,当部署完毕后,服务组就相当于一组运行中的软件实例集合,如(VM 实例,Kubernetes pods)。
  • Cluster:集群,由用户定义的,对服务组的逻辑分组。
  • Applications:应用,是对集群的逻辑分组。
  • Load Balancer:负载均衡,用于将外部网络流量重定向到服务组中的机器实例,还可以指定一系列规则,用来对服务组中的机器实例做健康监测。
  • Security Group:安全组,定义了网络访问权限,由IP、端口和通信协议组成的防火墙规则。

2、环境、软件准备

上一篇文章 初试 Kubernetes 集群中使用 Helm 搭建 Spinnaker 平台 中,我们演示了如何在 Kubernetes 集群中通过 Helm 安装 Spinnaker,接下来我们使用该环境,来演示一下 Spinnaker 集群管理功能,如何使用 Spinnaker 执行 deploy 和 scale 一个应用到 Kubernetes 集群中。本次演示环境,我是在本机 MAC OS 上操作,以下是安装的软件及版本:

  • Docker: version 17.09.0-ce
  • Oracle VirtualBox: version 5.1.20 r114628 (Qt5.6.2)
  • Minikube: version v0.22.2
  • Helm: version v2.8.0
  • Kuberctl:
    • Client Version: v1.8.1
    • Server Version: v1.7.5

注意:这里我就不在详细描述安装过程,具体步骤参考 初试 Kubernetes 集群中使用 Helm 搭建 Spinnaker 平台 即可,写的很详细,本次主要通过一个 Demo 演示集群管理的简单操作过程。

3、通过 Spinnaker 部署和扩展容器应用到 Kubernetes

这里我们通过一个简单的 Nginx Server 示例来演示一下如何操作的吧!

3.1、创建应用(Application)

浏览器访问 http://127.0.0.1:9000 进入 Spinnaker UI 页面,点击导航栏 “Applications” 进入应用列表页面,点击页面右上角 “Actions” —> “Create Application” 创建一个应用。

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第2张图片

注意:进入到应用列表页面,默认已经有 5 个应用,这是在安装 Spinnaker、Helm、Kubernetes 时自动创建的应用,可以不用管它们。

在创建应用弹框页面,填写 Name、Owner Email 等信息,这里我填写 nginx 作为应用名称,点击 “Create” 按钮完成应用的创建。

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第3张图片

3.2、创建负载均衡策略(Load Balancer)

创建完 nginx 应用后,自动进入该应用详情页面,点击顶部导航栏 “LOAD BALANCERS”,进入负载均衡列表页面,默认是没有任何记录的。

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第4张图片

点击页面 “Create Load Balancer” 按钮,在创建负载均衡弹框页面填写信息,点击 “Create” 完成负载均衡策略的创建。这里 “Stack” 处填 prod,可以理解为作为生产环境使用标示,当然也可以写 dev、test 等以示区分运用到不同环境。在 “Ports” 栏下边 “Target Port” 处填 80,作为对外转发目标端口。“Advanced Settings” 栏下边 “Type” 处选择 NodeType,这里可选项有 ClusterIP、LoadBalancer、NodeType,针对不同的应用类型和平台,选择所支持的类型,这里我选择 NodeType。

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第5张图片

创建完毕后,我们会发现在 nginx 应用的 Load Balancers 页面就会出现刚上边创建的 nginx-prod 负载均衡记录,只不过该记录下没有关联任何 Service Group。注意:这里 Spinnaker 默认会以 Application Name - LoadBalancer Stack 方式来命名负载均衡策略。

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第6张图片

3.3、创建服务组(Server Group)

创建完 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” 为服务是否发生故障或存活探测。

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第7张图片

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第8张图片

点击完 “Create” 按钮后,就会进入到自动创建该 nginx-prod 服务组过程页面,总共分为 8 个步骤。注意:这里 Spinnaker 默认会以 Application Name - Server Group Stack 方式来命名服务组。

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第9张图片

创建服务组需要一段时间,因为涉及到拉取镜像,启动服务等操作。在等待服务组创建完毕的过程中,我们去 Clusters 页面,会看到 nginx-prod 服务组下会显示 10 个红色的小块,这表示这些实例还没有准备好。

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第10张图片

稍等一会,等这 10 个实例启动完毕,此时该页面 nginx-prod 服务组下会变成 10 个绿色的小块,表示这些实例都已经启动成功啦!

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第11张图片

4、验证并测试集群服务

好了,现在集群服务已经启动啦!我们可以验证一下服务是否正常启动。首先通过 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...

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第12张图片

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

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第13张图片

我们会发现,是一模一样哒!接下来我们人为删除一个 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” 按钮完成删除。

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第14张图片

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第15张图片

最后,我们去 Spinnaker UI 页面查看 Clusters 下 nginx-prod 服务组关联 Pod 已经成功删除并生成了一个新的 Pod 啦!

初试 Kubernetes 集群中 Spinnaker 平台之集群管理_第16张图片

参考资料

  • Spinnaker 官网
  • Spinnaker Guide
  • Spinnaker GitHub

你可能感兴趣的:(持续集成,Kubernetes)