Kubernetes 集群中使用 Helm 搭建 Spinnaker
在我们部署Spinnaker之前,我们需要一个YAML格式的配置文件,它会包含了一些配置信息。可以从Spinnaker Helm Chart repository[2]获得这个文件。
$curl -Lo values.yaml https://raw.githubusercontent.com/kubernetes/charts/master/stable/spinnaker/values.yaml
%Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2950 100 2950 0 0 2950 0 0:00:01 --:--:-- 0:00:01 10535
现在我们可以安装Spinnaker了。用下面的命令可以把它部署在我们的Kubernetes集群里:
$ helm install-n kubelive stable/spinnaker -f values.yaml --timeout 300 --version 0.3.5 --namespace spinnaker
这里的-f参数的意思是指出安装的配置文件。--timeout会让Helm在遇到错误的时候等待至少300秒再退出。这篇文章中我们用的是0.3.5的版本,是用--version指定的。最后我们用--namespace指定了安装Spinnaker的namespace。
过了一会儿,我们应该可以看到下面的输出。
NAME: kubelive
LAST DEPLOYED: Wed Jan 3 11:26:12 2018
NAMESPACE: spinnaker
STATUS: DEPLOYED
RESOURCES:
…..
NOTES:
You will need to create2port forwarding tunnels inordertoaccessthe Spinnaker UI:
exportDECK_POD=$(kubectl getpods --namespace spinnaker -l "component=deck,app=kubelive-spinnaker" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward --namespace spinnaker $DECK_POD 9000
Visit the Spinnaker UI byopening your browser to: http://127.0.0.1:9000
Formore info onthe Kubernetes integration forSpinnaker, visit:
http://www.spinnaker.io/docs/kubernetes-source-to-prod
如果你遇到错误超时退出,可以用helm del --purge kubelive 命令去删除,并且重新运行安装命令。
所有的Spinnaker的相关组件都已经部署到了Spinnaker的namespace里了,我们可以用下面的命令去确认。
$ kubectl get pod --namespace=spinnaker
NAME READY STATUS RESTARTS AGE
kubelive-jenkins -67bb8f6b96-w5rdp 1/ 1Running 053m
kubelive-minio -5946fc9bcc-fcvv8 1/ 1Running 053m
kubelive-redis -7bb9d95468-kt2vq 1/ 1Running 153m
kubelive-spinnaker-clouddriver -6cd89c9bd5 -8rwln 1/ 1Running 153m
kubelive-spinnaker-deck -7846d6497-bjg7b 1/ 1Running 053m
kubelive-spinnaker-echo -6fd649469d -2pxzd 1/ 1Running 153m
kubelive-spinnaker-front50 -85dd9fd58c-ktj6j 1/ 1Running 153m
kubelive-spinnaker-gate -5868d9f8ff-hjpvg 1/ 1Running 053m
kubelive-spinnaker-igor-fdbdcc9c8-hldsk 1/ 1Running 053m
kubelive-spinnaker-orca-dd79c8bc7-xmwc7 1/ 1Running 053m
kubelive-spinnaker-rosco -7b9f77b5bb-drxhs 1/ 1Running 053m
在我们通过浏览器访问Spinnaker之前,我们需要用下面命令打开端口转发功能。也就是说这个命令将会把Spinnaker Web UI的端口映射到主机的端口上。
$ export DECK_POD=$(kubectl get pods --namespace spinnaker -l "component=deck,app=kubelive-spinnaker"-o jsonpath= "{.items[0].metadata.name}")
$ kubectl port-forward --namespace spinnaker $DECK_POD 9000

现在可以通过http://localhost:9000去访问Spinnaker了。
通过Spinnaker去部署一个容器化的应用
现在我们可以通过部署一个Nginx Web服务器去熟悉Spinnaker的概念和术语。
首先在右上角的“操作”菜单下单击“Create Application”来创建应用程序。“application”是一个资源的逻辑集合,包括负载均衡、安全组、服务组和集群。

现在我们在这个application里去创建一个负载均衡器。单击菜单顶部的"Load Balancer",并且点击“Create Load Balancer” 按钮。


当你创建了一个新的负载均衡器,输入prod作为堆栈的名字。80端口作为Target Port,并且选择NodePort类型,点击Create按钮。

在 Clusters里,选择 Create Server Group。

在下拉框里选择nginx:latest作为容器。选择nginx-prod作为负载均衡器,输入10作为副本数。

在Container设置里,选择Probes去创建Readiness Probe和Liveness Probe。最后点击Create按钮。

当这个实例在Server Group里状态变成可用,如果是红色则代表这个实例还是不可能的状态。


切换到终端,并且运行下面命令可以得到服务的NodePort。
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none>443/TCP 50m
nginx-prod NodePort 10.99.164.47 <none>80:31728/TCP 18m
这个负载均衡器已经被Spinnaker创建好,并且通过Kubernetes的NodePort对外提供访问。我们现在可以直接通过Minikube的命令访问了。
$ minikube service nginx-prod
Opening kubernetes service default/nginx-prod indefaultbrowser...

运行kubectl get pods可以显示一共有10个Nginx的Pod被创建出来了。
$ kubectl getpods
NAME READY STATUS RESTARTS AGE
nginx-prod-v000 -6m642 1/ 1Running 09m
nginx-prod-v000 -9kxtv 1/ 1Running 09m
nginx-prod-v000-bpzw4 1/ 1Running 09m
nginx-prod-v000-f87gn 1/ 1Running 09m
nginx-prod-v000-h629g 1/ 1Running 09m
nginx-prod-v000-hkhjc 1/ 1Running 09m
nginx-prod-v000-jhnv2 1/ 1Running 09m
nginx-prod-v000-jmkgx 1/ 1Running 09m
nginx-prod-v000-s59pm 1/ 1Running 09m
nginx-prod-v000-ssz85 1/ 1Running 09m
在Spinnaker的仪表板扩展服务组(Server Group)一样相同。

这篇文章涵盖了在开发环境中,使用和运行Spinnaker的所有步骤。在本系列的下一篇文章里,我们会用Spinnaker去建立一个end-to-end的CI/CD pipeline环境,然后去发布一个应用的蓝绿部署。敬请关注!
- https://www.thenewstack.io/tag/Learn-Spinnaker
- https://github.com/kubernetes/charts/tree/master/stable/spinnaker
Kubernetes 集群中使用 Helm 搭建 Spinnaker的更多相关文章
- 在Kubernetes集群中安装Helm及证书认证
安装Kubernetes 测试环境使用kubeadm安装kubernetes v1.6.3版本, 安装过程略过. 为Helm创建客户端认证 客户端认证是为了能够使用helm命令行调用Helm的服务端T ...
- 初试 Kubernetes 集群中使用 Traefik 反向代理
初试 Kubernetes 集群中使用 Traefik 反向代理 2017年11月17日 09:47:20 哎_小羊_168 阅读数:12308 版权声明:本文为博主原创文章,未经博主允许不得转 ...
- 在kubernetes集群中创建redis主从多实例
分类 > 正文 在kubernetes集群中创建redis主从多实例 redis-slave镜像制作 redis-master镜像制作 创建kube的配置文件yaml 继续使用上次实验环境 ht ...
- kubernetes集群中的pause容器
昨天晚上搭建好了k8s多主集群,启动了一个nginx的pod,然而每启动一个pod就伴随这一个pause容器,考虑到之前在做kubelet的systemd unit文件时有见到: 1 2 3 4 5 ...
- ingress-nginx 的使用 =》 部署在 Kubernetes 集群中的应用暴露给外部的用户使用
文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247488189&idx=1&sn=8175f067 ...
- 在Kubernetes集群中使用calico做网络驱动的配置方法
参考calico官网:http://docs.projectcalico.org/v2.0/getting-started/kubernetes/installation/hosted/kubeadm ...
- Kubernetes集群中Service的滚动更新
Kubernetes集群中Service的滚动更新 二月 9, 2017 0 条评论 在移动互联网时代,消费者的消费行为已经“全天候化”,为此,商家的业务系统也要保持7×24小时不间断地提供服务以满足 ...
- 【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式
一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...
- Kubernetes集群中Jmeter对公司演示的压力测试
6分钟阅读 背景 压力测试是评估Web应用程序性能的有效方法.此外,越来越多的Web应用程序被分解为几个微服务,每个微服务的性能可能会有所不同,因为有些是计算密集型的,而有些是IO密集型的. 基于微服 ...
随机推荐
- js 的静态获取和动态获取
静态获取方法 document.getElementById obj.querySelector obj.querySelectorAll 动态获取方法(每次使用时候会回去重新获取一次) obj.ge ...
- 前端安全 xss
整体的 XSS 防范是非常复杂和繁琐的,不仅需要在全部需要转义的位置,对数据进行对应的转义.而且要防止多余和错误的转义,避免正常的用户输入出现乱码. 虽然很难通过技术手段完全避免 XSS,但可以总结以 ...
- 封装一个获取module.exports内容的方法
let fs = require('fs') let req = (moduleName) => { //content代表的是文件内容 let content = fs.readFileSyn ...
- [luogu3573 POI2014] RAJ-Rally (拓扑排序 权值线段树)
传送门 Solution 在DAG中我们可以\(O(n)\)预处理\(Ds(u)\)表示从u表示以s为起点的最长路\(Dt(u)\)表示以u为终点的最长路,那么经过\((u,v)\)的最长路即为\(D ...
- Linux---文件目录管理
1. Linux文件目录架构 Linux的目录结构与win的目录有很大不同,首先,没有盘符的概念:然后Linux使用斜杠/标识目录,Linux首先建立一个根目录,然后将其他文件系统挂载到这个目录下. ...
- pxc增量备份
###增备数据库,如果后续还需要再次增备,则可以再次指定--extra-lsndir,如果与上次备份指定相同的位置,该文件被覆盖# innobackupex --compress --incremen ...
- 高德地图将字符串地址转为经纬度的一个demo
<!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...
- MySQL Connector/Python 接口 (二)
连接数据库 本文参见这里,示例如何连接MySQL 数据库. import mysql.connector from mysql.connector import errorcode # 连接数据库需要 ...
- java多线程synchronized volatile解析
先简单说说原子性:具有原子性的操作被称为原子操作.原子操作在操作完毕之前不会线程调度器中断.即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行.在Java中,对除了l ...
- 从“菜鸟”码农到“资深”架构师,我到底经历了什么?--------http://baijiahao.baidu.com/s?id=1585813883835208757&wfr=spider&for=pc
http://baijiahao.baidu.com/s?id=1585813883835208757&wfr=spider&for=pc