初试 Kubernetes 集群中使用 Helm 搭建 Spinnaker 平台
2018-03-07 09:57
1281 查看
目录
1、Helm 介绍
2、环境、软件准备
3、安装并配置 Minikube
4、安装并初始化 Helm
5、使用 Helm 安装 Spinnaker
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 集群搭建我使用 Minikube 来完成,Minikube 启动的单节点 k8s Node 实例是需要运行在本机的 VM 虚拟机里面,所以需要提前安装好 VM,这里我选择 Oracle VirtualBox。k8s 运行底层使用 Docker 容器,所以本机需要安装好 Docker 环境,这里忽略 Docker、VirtualBox 的安装过程,着重介绍下 Minikube、Kuberctl 和 Helm 的安装。
首先我们需要安装 Minikube 到本机 MacOS 上,具体操作命令如下:
其次我们还需要 kubectl 来管理 Kubernetes 集群,具体操作命令如下:
当然,针对我们 MacOS 系统,可以使用 Homebrew 工具执行
设置完成后,就可以执行
此时,去 VirtualBox 界面可以看到 Minikube 虚拟机已经成功启动了。我们也可以通过命令行查看一下集群状态。
这里要提醒一下,如果是第一次启动 Minikube,很有可能因为网络的问题,下载国外镜像失败导致启动服务失败,参照上边文章中提到的解决办法,替代需要翻墙下载的 images 即可。我这里是已经替换完毕,并且是启动过一次以后的输出日志。这里我贴一下我替换的 images ,注意:直接在当前窗口上执行
系统用两种方式安装一下。
方式一:下载最新版 release 版 Helm 二进制码安装。
方式二:使用 Homebrew 安装。
接下来,我们需要初始化并验证 Helm 了。
稍等一会,你就会发现服务端 Tiller 已经安装到我们的 Minikube 集群中了,并且作为Kubernetes Pod 服务运行在 kube-system 的 namespace 中.
这里值的一提的是,由于国内网络的问题,在安装 Tiller 的时候,需要下载镜像
执行上述操作后,再执行
我们先来看一下 Package 描述文件 Chart.yaml。
这个描述文件主要是针对 Spinnaker 资源包进行一些必要的说明,比如 description 描述信息、version 版本信息、home 官网地址等等。
然后我们再来看一下应用需要安装的 Kubernetes 清单文件的模板文件,一般这些模板文件会放到项目 templates 目录下。以下是 Spinnaker 需要安装的清单模板文件。
可以看到,这些清单模板文件,包括 configmap、deployments、ingress、secrets、service 等 Kubernetes 启动 Spinnaker 需要的一系列配置 yaml 文件。而且这些配置文件支持表达式,来生成满足特定条件的文件,配置更加灵活。我们以 ingress/deck.yaml 文件为例。
配置文件中,加入了很多条件判断和变量取值,比如
通过上一遍对 Spinnaker 的介绍,我们知道 Spinnaker 是由很多组件组织在一起的,需要有一个全局的配置文件 spinnaker.yml 来配置各个组件信息。这里也是一样,在开始安装之前,也需要一个 Yaml 配置文件(values.yaml)来配置各个组件信息。我们可以从 Spinnaker Helm Chart GitHub 中获取最新版下载到本地。
1、Helm 介绍
2、环境、软件准备
3、安装并配置 Minikube
4、安装并初始化 Helm
5、使用 Helm 安装 Spinnaker
1、Helm 介绍
Helm 是一个管理 Kubernetes Charts 的工具,Charts 可以理解为预先配置的 Kubernetes 资源包,通过 Helm 可以轻松的安装和管理 Kubernetes 应用,类似我们平时使用的 apt、yum、homebrew 工具。Helm 包含两部分:客户端 Helm 和服务端 Tiller,服务端 Tiller 运行在 Kubernetes 集群内部,作为一个代理 Pod 管理安装我们的 Charts。 而 Charts 配置至少需要两样:一是 Package 描述文件(Chart.yaml),主要用来针对该资源包进行一些必要的说明信息。二是一个或多个包含应用需要安装的 Kubernetes 清单文件的模板文件。2、环境、软件准备
上一篇文章 初试 Netflix 开源持续云交付平台 Spinnaker 中,我安装的是 Development Spinnaker,安装过程比较繁琐,而且没有跟 Kubernetes 集群集成起来,只能演示其部署管理功能中的 Pipeline 功能,而 Spinnaker 的另一个核心内容集群管理功能没法操作。本次我将实际操作演示如何在 Kubernetes 集群中安装 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 集群搭建我使用 Minikube 来完成,Minikube 启动的单节点 k8s Node 实例是需要运行在本机的 VM 虚拟机里面,所以需要提前安装好 VM,这里我选择 Oracle VirtualBox。k8s 运行底层使用 Docker 容器,所以本机需要安装好 Docker 环境,这里忽略 Docker、VirtualBox 的安装过程,着重介绍下 Minikube、Kuberctl 和 Helm 的安装。
3、安装并配置 Minikube
之前文章 初试 minikube 本地部署运行 kubernetes 实例 中,我有详细介绍 Minikube 以及 kubectl 安装,这里我再次简单描述一下,有一点点要注意的地方。首先我们需要安装 Minikube 到本机 MacOS 上,具体操作命令如下:
# 安装指定版本,例如:v0.22.3 $ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.22.3/minikube-darwin-amd64 2、赋二进制文件执行权限 $ chmod +x minikube 3、将二进制文件移到 PATH 中 $ sudo mv minikube /usr/local/bin/
其次我们还需要 kubectl 来管理 Kubernetes 集群,具体操作命令如下:
1、安装最新版 curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectl 2、赋二进制文件执行权限 chmod +x ./kubectl 3、将二进制文件移到 PATH 中 sudo mv ./kubectl /usr/local/bin/kubectl
当然,针对我们 MacOS 系统,可以使用 Homebrew 工具执行
brew install kubectl命令安装即可。以上都安装完毕后,就可以启动 Minikube 了。不过在启动之前,还需要配置一下,因为应用配置的需要,我们要保证 Minikube VM 至少分配 4G 内存和 4核 CPU,可以通过以下命令行操作:
# 设置内存大小 $ minikube config set memory 4096 # 设置 CPU 核数 $ minikube config set cpus 4
设置完成后,就可以执行
minikube start操作了。当然如果觉得这样比较麻烦,我们也可以在执行
minikube start命令时,指定参数配置也可以。
$ minikube start --memory 4096 --cpus 4 Starting local Kubernetes v1.7.5 cluster... Starting VM... Getting VM IP address... Moving files into cluster... Setting up certs... Connecting to cluster... Setting up kubeconfig... Starting cluster components... Kubectl is now configured to use the cluster.
此时,去 VirtualBox 界面可以看到 Minikube 虚拟机已经成功启动了。我们也可以通过命令行查看一下集群状态。
$ kubectl version Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.1", GitCommit:"f38e43b221d08850172a9a4ea785a86a3ffa3b3a", GitTreeState:"clean", BuildDate:"2017-10-12T00:44:36Z", GoVersion:"go1.9.1", Compiler:"gc", Platform:"darwin/amd64"} Server Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.5", GitCommit:"17d7182a7ccbb167074be7a87f0a68bd00d58d97", GitTreeState:"clean", BuildDate:"2017-09-18T20:30:29Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"} $ kubectl get cs NAME STATUS MESSAGE ERROR scheduler Healthy ok controller-manager Healthy ok etcd-0 Healthy {"health": "true"} $ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default hello-minikube-2754686071-0g6h3 1/1 Running 1 1d kube-system kube-addon-manager-minikube 1/1 Running 1 1d kube-system kube-dns-910330662-04l0k 3/3 Running 3 1d kube-system kubernetes-dashboard-2lvgh 1/1 Running 1 1d
这里要提醒一下,如果是第一次启动 Minikube,很有可能因为网络的问题,下载国外镜像失败导致启动服务失败,参照上边文章中提到的解决办法,替代需要翻墙下载的 images 即可。我这里是已经替换完毕,并且是启动过一次以后的输出日志。这里我贴一下我替换的 images ,注意:直接在当前窗口上执行
docker images是不会列举出来 Minikube 虚拟机内部镜像列表的,需要通过命令设置 Minikube 虚拟机的 Docker 环境变量。
$ minikube docker-env export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/wanyang3/.minikube/certs" export DOCKER_API_VERSION="1.23" # Run this command to configure your shell: # eval $(minikube docker-env) # 设置 Docker 环境变量 $ eval $(minikube docker-env) $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/google-containers/kube-addon-manager v6.4-beta.2 51a9cd46a30c 2 months ago 79.2MB gcr.io/google_containers/kubernetes-dashboard-amd64 v1.6.3 4da5a945ae40 4 months ago 88.9MB gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14.4 dbe106a365a5 6 months ago 41.4MB gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14.4 db6d003fad04 6 months ago 41.8MB gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14.4 a8e00546bcf3 8 months ago 49.4MB gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 22 months ago 747kB
4、安装并初始化 Helm
好了,Kubernetes 集群有了,在正式安装 Spinnaker 之前,我们需要安装 Helm 客户端到本地,同时安装服务端 Tiller 到 Kubernetes 中。Helm 安装方式有很多种,这里我就针对本机 MacOS系统用两种方式安装一下。
方式一:下载最新版 release 版 Helm 二进制码安装。
$ wget https://storage.googleapis.com/kubernetes-helm/helm-v2.8.0-darwin-amd64.tar.gz $ tar -zxvf helm-v2.7.2-darwin-amd64.tar.gz $ chmod +x ./darwin-amd64/helm $ mv ./darwin-amd64/helm /usr/local/bin/
方式二:使用 Homebrew 安装。
$ brew install kubernetes-helm
接下来,我们需要初始化并验证 Helm 了。
$ helm init Creating /Users/wanyang3/.helm Creating /Users/wanyang3/.helm/repository Creating /Users/wanyang3/.helm/repository/cache Creating /Users/wanyang3/.helm/repository/local Creating /Users/wanyang3/.helm/plugins Creating /Users/wanyang3/.helm/starters Creating /Users/wanyang3/.helm/cache/archive Creating /Users/wanyang3/.helm/repository/repositories.yaml Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com Adding local repo with URL: http://127.0.0.1:8879/charts $HELM_HOME has been configured at /Users/wanyang3/.helm.
稍等一会,你就会发现服务端 Tiller 已经安装到我们的 Minikube 集群中了,并且作为Kubernetes Pod 服务运行在 kube-system 的 namespace 中.
$ helm version Client: &version.Version{SemVer:"v2.8.0", GitCommit:"14af25f1de6832228539259b821949d20069a222", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.8.0", GitCommit:"14af25f1de6832228539259b821949d20069a222", GitTreeState:"clean"} $ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default hello-minikube-2754686071-0g6h3 1/1 Running 1 1d kube-system kube-addon-manager-minikube 1/1 Running 1 1d kube-system kube-dns-910330662-04l0k 3/3 Running 3 1d kube-system kubernetes-dashboard-2lvgh 1/1 Running 1 1d kube-system tiller-deploy-246345418-sqx12 1/1 Running 3 1d
这里值的一提的是,由于国内网络的问题,在安装 Tiller 的时候,需要下载镜像
gcr.io/kubernetes-helm/tiller:v2.8.0,很有可能会安装失败,这里我借鉴网上下载国外镜像的方式,通过 DockerHub 官网中 “Create Automated Build” 功能中的 “Create Auto-build Github”,关联自己的 GitHub 项目,可以选择对应的 dockerfile 文件,来执行自动构建,从而将生成的指定 Docker Image 镜像上传到 DockerHub 上。通过这个功能,我将 Tiller 需要的镜像上传到了我的 DockerHub 仓库里面去了,然后在本地 Minikube 中下载镜像,修改镜像名称即可,虽然麻烦了点,但是解决了我们不能下载国外镜像的难题。
$ docker pull huwanyang168/tiller:v2.8.0 $ docker tag huwanyang168/tiller:v2.8.0 gcr.io/kubernetes-helm/tiller:v2.8.0
执行上述操作后,再执行
helm init命令,就可以避开镜像下载不到的问题,从而完成 Tiller 的安装和启动。如果 Tiller 安装失败,通过
helm version命令会提示连接不到 Tiller。
5、使用 Helm 安装 Spinnaker
好了,现在 Minikube 和 Helm 已经运行起来了,接下来我们可以安装 Spinnaker 到 kubernetes 中了。在 Kubernetes Charts GitHub 中已经支持 Spinnaker Chart 方式安装,安装过程非常简单,就一条命令就可以完成整个安装。不过这里我要多说一点,就是 Kubernetes Chart 预配置资源包,上边说道 Chart 至少需要两样:一是 Package 描述文件(Chart.yaml),主要用来针对该资源包进行一些必要的说明信息。二是一个或多个包含应用需要安装的 Kubernetes 清单文件的模板文件。这里通过 Spinnaker Chart 来了解一下 Kubernetes Charts 吧。我们先来看一下 Package 描述文件 Chart.yaml。
apiVersion: v1 description: Open source, multi-cloud continuous delivery platform for releasing software changes with high velocity and confidence. name: spinnaker version: 0.3.15 appVersion: 1.1.0 home: http://spinnaker.io/ sources: - https://github.com/spinnaker - https://github.com/viglesiasce/images icon: https://pbs.twimg.com/profile_images/669205226994319362/O7OjwPrh_400x400.png maintainers: - name: viglesiasce email: viglesias@google.com
这个描述文件主要是针对 Spinnaker 资源包进行一些必要的说明,比如 description 描述信息、version 版本信息、home 官网地址等等。
然后我们再来看一下应用需要安装的 Kubernetes 清单文件的模板文件,一般这些模板文件会放到项目 templates 目录下。以下是 Spinnaker 需要安装的清单模板文件。
$ tree stable/spinnaker/templates/ stable/spinnaker/templates/ ├── NOTES.txt ├── _helpers.tpl ├── configmap │ ├── _jenkins-config.tpl │ ├── jenkins-jobs.yaml │ ├── s3-config.yaml │ ├── spinnaker-config.yaml │ └── test-config.yaml ├── deployments │ ├── clouddriver.yaml │ ├── deck.yaml │ ├── echo.yaml │ ├── front50.yaml │ ├── gate.yaml │ ├── igor.yaml │ ├── orca.yaml │ └── rosco.yaml ├── hooks │ ├── create-bucket.yaml │ ├── delete-jobs.yaml │ ├── test.yaml │ ├── upload-build-image.yaml │ ├── upload-run-pipeline.yaml │ └── upload-run-script.yaml ├── ingress │ └── deck.yaml ├── secrets │ ├── gcs.yaml │ └── registry.yaml └── svc ├── clouddriver.yaml ├── deck.yaml ├── echo.yaml ├── front50.yaml ├── gate.yaml ├── igor.yaml ├── orca.yaml └── rosco.yaml
可以看到,这些清单模板文件,包括 configmap、deployments、ingress、secrets、service 等 Kubernetes 启动 Spinnaker 需要的一系列配置 yaml 文件。而且这些配置文件支持表达式,来生成满足特定条件的文件,配置更加灵活。我们以 ingress/deck.yaml 文件为例。
$ cat stable/spinnaker/templates/ingress/deck.yaml {{- if .Values.deck.ingress.enabled }} apiVersion: extensions/v1beta1 kind: Ingress metadata: {{- if .Values.deck.ingress.annotations }} annotations: {{ toYaml .Values.deck.ingress.annotations | indent 4 }} {{- end }} name: {{ template "fullname" . }} spec: rules: - host: {{ .Values.deck.host | quote }} http: paths: - path: / backend: serviceName: {{ template "fullname" . }}-deck servicePort: {{ .Values.deck.port }} {{- if .Values.deck.ingress.tls }} tls: {{ toYaml .Values.deck.ingress.tls | indent 4 }} {{- end -}} {{- end }}
配置文件中,加入了很多条件判断和变量取值,比如
{{- if .Values.deck.ingress.enabled }}这里只有满足
Values.deck.ingress.enabled条件,也即是全局 Value 值配置中 deck.ingress 的值为 enabled 开启时,才会生成 deck.yaml 文件。
{{ template "fullname" . }}或
{{ .Values.deck.port }}这些是取对应的变量值,如果我们修改了全局的变量值,所有配置文件中针对该变量的取值都会跟着改变,非常方便生成配置。好了,扯了那么多,现在介入正题,使用 Helm 安装 Spinnaker 到 Kubernetes 中。
通过上一遍对 Spinnaker 的介绍,我们知道 Spinnaker 是由很多组件组织在一起的,需要有一个全局的配置文件 spinnaker.yml 来配置各个组件信息。这里也是一样,在开始安装之前,也需要一个 Yaml 配置文件(values.yaml)来配置各个组件信息。我们可以从 Spinnaker Helm Chart GitHub 中获取最新版下载到本地。
$ curl -Lo values.yaml https://raw.githubusercontent.com/kubernetes/charts/master/stable/spinnaker/values.yaml[/code]
接下来就简单了,使用 Helm 执行一条命令即可完成安装。$ helm install -n my-spinnaker stable/spinnaker -f values.yaml --timeout 3600 --version 0.3.5 --namespace spinnaker
说明一下各参数:
-n my-spinnaker 指明安装的 Spinnaker 别名为 my-spinnaker,生成的 Pod 都会以该名称开头。
-f values.yaml 指明安装时使用 values.yaml 作为默认配置。
–timeout 3600 指明 Helm 安装等待超时时间为 3600s,因为这里需要下载一些镜像需要些时间,可以设置长一些,当然也可以直接不设置,就永远不超时。
–version 0.3.5 指明本次安装的 Spinnaker 版本为 0.3.5。
–namespace spinnaker 指明本次安装的 Chart 都将在名称为 spinnaker 的命名空间内,方便隔离区分其他应用。
执行完毕,稍等一会,就会发现控制台输出 Spinnaker 已经完成并启动完成啦!NAME: my-spinnaker LAST DEPLOYED: Fri Mar 2 16:39:34 2018 NAMESPACE: spinnaker STATUS: DEPLOYED RESOURCES: ==> v1/PersistentVolumeClaim NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-spinnaker-jenkins Bound pvc-3be80026-1df5-11e8-9ce5-08002744a3f1 8Gi RWO standard 2m my-spinnaker-minio Bound pvc-3be86272-1df5-11e8-9ce5-08002744a3f1 10Gi RWO standard 2m my-spinnaker-redis Bound pvc-3be8f21b-1df5-11e8-9ce5-08002744a3f1 8Gi RWO standard 2m ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-spinnaker-jenkins-agent ClusterIP 10.0.0.241 <none> 50000/TCP 2m my-spinnaker-jenkins ClusterIP 10.0.0.91 <none> 8080/TCP 2m my-spinnaker-minio-svc ClusterIP 10.0.0.217 <none> 9000/TCP 2m my-spinnaker-redis ClusterIP 10.0.0.67 <none> 6379/TCP 2m my-spinnaker-spinnaker-clouddriver ClusterIP 10.0.0.36 <none> 7002/TCP 2m my-spinnaker-spinnaker-deck ClusterIP 10.0.0.254 <none> 9000/TCP 2m my-spinnaker-spinnaker-echo ClusterIP 10.0.0.57 <none> 8089/TCP 2m my-spinnaker-spinnaker-front50 ClusterIP 10.0.0.21 <none> 8080/TCP 2m my-spinnaker-spinnaker-gate ClusterIP 10.0.0.141 <none> 8084/TCP 2m my-spinnaker-spinnaker-igor ClusterIP 10.0.0.247 <none> 8088/TCP,8080/TCP,50000/TCP 2m my-spinnaker-spinnaker-orca ClusterIP 10.0.0.88 <none> 8083/TCP 2m my-spinnaker-spinnaker-rosco ClusterIP 10.0.0.44 <none> 8087/TCP 2m ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE my-spinnaker-jenkins 1 1 1 1 2m my-spinnaker-minio 1 1 1 1 2m my-spinnaker-redis 1 1 1 1 2m my-spinnaker-spinnaker-clouddriver 1 1 1 1 2m my-spinnaker-spinnaker-deck 1 1 1 1 2m my-spinnaker-spinnaker-echo 1 1 1 1 2m my-spinnaker-spinnaker-front50 1 1 1 1 2m my-spinnaker-spinnaker-gate 1 1 1 1 2m my-spinnaker-spinnaker-igor 1 1 1 1 2m my-spinnaker-spinnaker-orca 1 1 1 1 2m my-spinnaker-spinnaker-rosco 1 1 1 1 2m ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE my-spinnaker-jenkins-767424918-vtjfd 1/1 Running 0 2m my-spinnaker-minio-2647693359-zt1hv 1/1 Running 0 2m my-spinnaker-redis-1045542930-pqmf8 1/1 Running 0 2m my-spinnaker-spinnaker-clouddriver-3480110284-r1g09 1/1 Running 0 2m my-spinnaker-spinnaker-deck-3148024512-lr5g5 1/1 Running 0 2m my-spinnaker-spinnaker-echo-617171252-r9vzw 1/1 Running 0 2m my-spinnaker-spinnaker-front50-1422959058-ccmp2 1/1 Running 0 2m my-spinnaker-spinnaker-gate-2792520975-qfn1h 1/1 Running 1 2m my-spinnaker-spinnaker-igor-1021674758-4pk44 1/1 Running 0 2m my-spinnaker-spinnaker-orca-1766638633-tzk9v 1/1 Running 0 2m my-spinnaker-spinnaker-rosco-4007146930-hcf4s 1/1 Running 0 2m ==> v1/Secret NAME TYPE DATA AGE my-spinnaker-jenkins Opaque 2 2m my-spinnaker-minio-user Opaque 2 2m my-spinnaker-redis Opaque 1 2m my-spinnaker-spinnaker-registry Opaque 1 2m ==> v1/ConfigMap NAME DATA AGE my-spinnaker-jenkins-tests 1 2m my-spinnaker-minio-config-cm 1 2m my-spinnaker-jenkins 3 2m my-spinnaker-jenkins-jobs 3 2m my-spinnaker-spinnaker-s3-config 1 2m my-spinnaker-spinnaker-spinnaker-config 18 2m my-spinnaker-spinnaker-tests 1 2m NOTES: 1. You will need to create 2 port forwarding tunnels in order to access the Spinnaker UI: export DECK_POD=$(kubectl get pods --namespace spinnaker -l "component=deck,app=my-spinnaker-spinnaker" -o jsonpath="{.items[0].metadata.name}") kubectl port-forward --namespace spinnaker $DECK_POD 9000 2. Visit the Spinnaker UI by opening your browser to: http://127.0.0.1:9000 For more info on the Kubernetes integration for Spinnaker, visit: http://www.spinnaker.io/docs/kubernetes-source-to-prod[/code]
注意:如果安装过程中,出现超时或者其他问题导致安装失败,可以使用helm delete --purge my-spinnaker命令删除,重新执行安装命令。
此时,我们已经将 Spinnaker 各组件服务安装到 Kubernetes 集群的 spinnaker 命名空间内,通过 kubectl 命令可以查看服务运行情况。$ kubectl get pod --namespace=spinnaker NAME READY STATUS RESTARTS AGE my-spinnaker-jenkins-767424918-vtjfd 1/1 Running 0 8m my-spinnaker-minio-2647693359-zt1hv 1/1 Running 0 8m my-spinnaker-redis-1045542930-pqmf8 1/1 Running 0 8m my-spinnaker-spinnaker-clouddriver-3480110284-r1g09 1/1 Running 0 8m my-spinnaker-spinnaker-deck-3148024512-lr5g5 1/1 Running 0 8m my-spinnaker-spinnaker-echo-617171252-r9vzw 1/1 Running 0 8m my-spinnaker-spinnaker-front50-1422959058-ccmp2 1/1 Running 0 8m my-spinnaker-spinnaker-gate-2792520975-qfn1h 1/1 Running 1 8m my-spinnaker-spinnaker-igor-1021674758-4pk44 1/1 Running 0 8m my-spinnaker-spinnaker-orca-1766638633-tzk9v 1/1 Running 0 8m my-spinnaker-spinnaker-rosco-4007146930-hcf4s 1/1 Running 0 8m
不过,在我们从浏览器访问 Spinnaker Web 页面之前,还需要做最后一步操作,就是对 Spinnaker Web UI 做一下端口转发来暴漏服务到本机 host。$ export DECK_POD=$(kubectl get pods --namespace spinnaker -l "component=deck,app=my-spinnaker-spinnaker" -o jsonpath="{.items[0].metadata.name}") $ kubectl port-forward --namespace spinnaker $DECK_POD 9000
OK 现在就可以通过浏览器访问http://127.0.0.1:9000地址来打开 Spinnaker UI 页面啦!是不是跟之前 Development 安装的页面一样一样的。
这里还要提一下,第一次通过 Helm 安装 Spinnaker 可能会安装失败,因为国内网络的问题,安装过程中下载 Spinnaker 组件镜像失败(Spinnaker 组件镜像可以从 values.yaml 文件中找到)。此时,我们依旧可以使用上边提到的方式,通过 DockerHub 的 “Create Automated Build“ 功能提前下载好镜像,下边我提供一下我已经 Build 好的当前版本所需的各个组件镜像,以及 pull & tag 脚本。#!/bin/bash images=( spinnaker-clouddriver:0.5.0-72 spinnaker-deck:1.3.0-72 spinnaker-orca:0.5.0-72 spinnaker-front50:0.4.1-72 spinnaker-gate:0.5.0-72 spinnaker-echo:0.4.0-72 spinnaker-rosco:0.4.0-72 spinnaker-igor:0.4.0-72) for imageName in ${images[@]} ; do docker pull docker.io/huwanyang168/$imageName imageName_suffix=$(echo "${imageName}"| awk -F 'spinnaker-' '{print $2}') docker tag docker.io/huwanyang168/$imageName gcr.io/spinnaker-marketplace/$imageName_suffix docker rmi docker.io/huwanyang168/$imageName done
好了,到此 Kubernetes 集群中使用 Helm 搭建 Spinnaker 已经完成了,上一篇文章 初试 Netflix 开源持续云交付平台 Spinnaker 中由于没有集成 Kubernetes,所以 Spinnaker 另一个核心内容集群管理未涉及到,下一篇文章我会基于本次安装环境,介绍一下 Spinnaker 如何在 Kubernetes 集群中执行 Deploy 和 Scale,来展示 Spinnaker 集群管理中 Server Group(服务组)、Cluster(集群)、Applications(应用)、Load Balancer(负载均衡)等几个核心功能。
参考资料
Spinnaker
Spinnaker Github
Kubernetes Helm Github
Spinnaker Chart Github
Helm Documentation
相关文章推荐
- 使用kubeadm搭建kubernetes集群或者单节点环境(1.9版本)
- Kubernetes(三) - 使用Rancher部署K8S集群(搭建Kubernetes)
- Window平台搭建Redis分布式缓存集群 ---redis 安装和使用
- centos7 使用二进制包搭建kubernetes 1.9.0集群
- 初试 Kubernetes 集群中使用 Traefik 反向代理
- 初试 Kubernetes 集群使用 CephFS 文件存储
- CentOS7.2中使用Kubernetes(k8s)1.4.6源码搭建k8s容器集群环境
- Hadoop平台搭建使用系列教程(2)-预定义集群环境
- 初试 Kubernetes 集群使用 Ceph RBD 块存储
- Hadoop平台搭建使用系列教程(2)-预定义集群环境
- 初试 Kubernetes 集群中使用 Traefik 反向代理
- 国内使用 kubeadm 在 Centos 7 搭建 Kubernetes 集群
- Kubernetes(二) - 使用Rancher部署K8S集群(搭建Rancher)
- 10分钟搭建Kubernetes容器集群平台【转】
- 10分钟快速搭建Kubernetes容器集群平台
- 使用drbd搭建一个存储复制的集群
- 如何使用 Spinnaker 和 Kubernetes 进行数据库变更发布
- 使用kubeadm安装kubernetes集群
- 如何使用一个IP搭建ES集群——Docker如你所愿
- 使用lambda实现微信牌九平台搭建的尾递归