Spinnaker采用了微服务体系,而对于整套微服务体系的搭建官方是推荐采用halyard来搭建的。

Halyard对于spinnaker的黑盒使用者比较友好,把对spinnaker的安装、部署、配置、管理等都封装成命令(其实命令也是够复杂的),但对于具有研发基础或者说对于spinnaker比较了解的人来说这种方式有点本末倒置了,本篇在原理上介绍下如何绕过halyard自己搭建spinnaker的微服务。

从原理上来讲spinnaker分为“软件包启动”和“源码启动”,从运行环境来讲spinnaker部署分为“虚机部署”和“容器云”部署。

非deck服务(java):

nohup sh -c "./gradlew --daemon 2>&1 | tee /tmp/clouddriver.log | cat >/dev/null" >/dev/null &

deck服务(angular.js):

yarn install
nohup yarn run start &

软件包启动:

直接运行编译包install中bin里的启动文件,启动迅速,缺点是修改代码后需要重新发布。

非deck服务:

${SpinnakerHome}/clouddriver/bin/clouddriver

deck服务:

${SpinnakerHome}/deck/start.sh

开发推荐用源码启动方式, 生产推荐用软件包启动方式,以下对部署的讲解都是基于软件包的。

无论哪种部署方式,整体思路都是类似的,以虚机部署为例,分为如下几步:

1 准备语言环境

非deck服务(也就是java环境):

sudo apt-get install openjdk-8-jdk
##设置JAVA_HOME和PATH

deck服务:

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
source .bashrc
nvm install v10.15.3
npm install -g yarn
npm install -g pm2

2 部署软件包

将java项目的install内容和deck项目根目录下的内容拷贝到机器中。

3 部署依赖的组件

为某些特殊服务节点安装运行依赖的组件,为rosco节点安装packer,为clouddriver节点安装kubectl。

4 修改配置文件

这个没什么好说的,应用启动用到的各种配置:云平台账号、redis配置、CI集成相关配置。

5 设置开机启动和守护

Java系依赖supervisor,deck依赖pm2,部署在容器云的话依赖replicaset

容器云部署更便捷,但准备工作更繁琐,需要准备镜像Dockerfile和执行时的manifest,以rosco为例。

DockerFile:

#指定镜像
FROM hub.imgo.tv/spinnaker/basic:v1.0#作者信息
MAINTAINER YeJingtao <jingtao@mgtv.com>#准备目录
RUN ["mkdir", "-p", "/opt/spinnaker/config"]#复制软件包
COPY ./rosco.tar /opt
COPY ./packer.tar /opt
COPY ./packer /usr/bin
COPY ./packer-builder-huaweicloud-ecs /usr/bin#添加执行权限
RUN ["chmod", "+x", "/usr/bin/packer"]
RUN ["chmod", "+x", "/usr/bin/packer-builder-huaweicloud-ecs"]#解压软件包
WORKDIR /opt
RUN ["tar", "-xvf", "rosco.tar"]
RUN ["tar", "-xvf", "packer.tar"]#完成日志
RUN echo "rosco docker file is ok"

service.yml:

apiVersion: v1
kind: Service
metadata:annotations:field.cattle.io/creatorId: u-xridxugrsmfield.cattle.io/ipAddresses: "null"field.cattle.io/targetDnsRecordIds: "null"field.cattle.io/targetWorkloadIds: "null"creationTimestamp: "2021-05-21T07:39:29Z"labels:cattle.io/creator: normanname: spinnaker-rosconamespace: devopsresourceVersion: "214861147"selfLink: /api/v1/namespaces/devops/services/spinnaker-roscouid: 5bc17ac4-1270-48da-9655-864ef8bd08e5
spec:clusterIP: Noneports:- name: defaultport: 8087protocol: TCPtargetPort: 8087selector:spinnaker.service: roscosessionAffinity: Nonetype: ClusterIP
status:loadBalancer: {}

configMap.yml

apiVersion: v1
data:rosco.yml: |-spectator:applicationName: ${spring.application.name}webEndpoint:enabled: false
kind: ConfigMap
metadata:annotations:field.cattle.io/creatorId: u-xridxugrsmcreationTimestamp: "2021-05-21T11:35:51Z"labels:cattle.io/creator: normanname: spinnaker-rosco-configmapnamespace: devopsresourceVersion: "214857661"selfLink: /api/v1/namespaces/devops/configmaps/spinnaker-rosco-configmapuid: f1d9522c-7450-462a-a012-f7dbf4ae54d2

deploy.yml

apiVersion: apps/v1beta1
kind: Deployment
metadata:annotations:artifact.spinnaker.io/location: devopsartifact.spinnaker.io/name: spinnaker-roscoartifact.spinnaker.io/type: kubernetes/deploymentmoniker.spinnaker.io/application: spinnakermoniker.spinnaker.io/cluster: spinnaker-roscostrategy.spinnaker.io/max-version-history: '1'strategy.spinnaker.io/use-source-capaspinnakerty: 'true'labels:app.kubernetes.io/managed-by: spinnakerapp.kubernetes.io/name: spinnaker-rosconame: spinnaker-rosconamespace: devops
spec:replicas: 1selector:matchLabels:spinnaker.service: roscostrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:annotations:artifact.spinnaker.io/location: devopsartifact.spinnaker.io/name: spinnaker-roscoartifact.spinnaker.io/type: kubernetes/deploymentmoniker.spinnaker.io/application: spinnakermoniker.spinnaker.io/cluster: spinnaker-roscolabels:app.kubernetes.io/managed-by: spinnakerapp.kubernetes.io/name: spinnaker-roscospinnaker.service: roscotask: monitoringspec:containers:- command:- /opt/rosco/bin/roscoimage: 'hub.imgo.tv/spinnaker/rosco:${ parameters.image_version}'imagePullPolicy: IfNotPresentlivenessProbe:initialDelaySeconds: 300tcpSocket:port: 8087timeoutSeconds: 60name: spinnaker-roscovolumeMounts:- mountPath: /opt/spinnaker/config/rosco.ymlname: app-confsubPath: rosco.yml- mountPath: /opt/spinnaker/config/spinnaker.ymlname: main-confsubPath: spinnaker.yml- mountPath: /opt/spinnaker/config/packername: packer-tempvolumes:- configMap:items:- key: rosco.ymlpath: rosco.ymlname: spinnaker-rosco-configmapname: app-conf- configMap:items:- key: spinnaker.ymlpath: spinnaker.ymlname: spinnaker-main-configmapname: main-conf- name: packer-temppersistentVolumeClaim:claimName: spinnaker-pvc

Spinnaker微服务如何自建相关推荐

  1. 耦合式是什么意思_什么是微服务?一篇文章让你彻底搞明白

    一.微服务介绍 1. 什么是微服务 在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微".什么是"服务", 微 狭义来讲就 ...

  2. 关于【微服务】,你必须了解这些

    微服务Micro service ,就是将单体应用拆分成多个高内聚低耦合的小型服务,每个小型服务运行在独立的进程,当用户请求API Gateway被路由到下游服务,而服务之间采用轻量级通信机制,独立部 ...

  3. 了解认识微服务——助力小白成长

    微服务 前言 到底什么是微服务?为什么要用微服务?微服务主要来做一些什么?微服务有哪些优势?什么样的服务属于微服务?本文所有资料来源网络. 一. 微服务介绍 1. 什么是微服务 在介绍微服务时,首先得 ...

  4. 高级篇-Docker微服务实战

    三个步骤: 通过IDEA新建一个普通微服务模块 编写微服务的dockerfile文件 通过dockerfile发布微服务部署到docker容器 1. 通过IDEA新建一个普通微服务模块 1) 建Mod ...

  5. 什么是微服务以及微服务的技术点

    一.微服务介绍 1. 什么是微服务 在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微".什么是"服务", 微 狭义来讲就 ...

  6. 入门、复习微服务的同学看过来,一篇文章让你彻底搞懂微服务

    废话不多说,各位先看下微服务的简介 微服务简介 微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务 ...

  7. [阶段4 企业开发进阶] 7. 微服务--SpringCloud

    开源代码 文章目录 1 微服务 1.1 微服务概念 1.2 SpringCloud 1.3 工程搭建 1.4 支付模块构建 cloud-provider-payment-8001 1.5 消费者订单模 ...

  8. 使用Turbine监控多个微服务

    一 为了让Turbine监控2个以上的微服务,先建一个项目microservice-consumer-movie-feign-hystrix-fallback-stream,确保该项目的applica ...

  9. 微服务(概念篇)| 什么是微服务?

    本章目录 前言 一.微服务介绍 1.什么是微服务 微服务由来 为什么需要微服务? 3.1 早期的单体架构带来的问题 3.2 微服务与单体架构区别 3.3 微服务与SOA区别 微服务本质 什么样的项目适 ...

最新文章

  1. [Mac] mac linux 多线程下载利器 axel
  2. mysql数据库映射到内存_基于共享内存的数据库映射
  3. php组件化开发composer,PHP组件化开发 - JimmyJaw的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. VTK:可视化之BackfaceCulling
  5. Shell脚本之IP网络地址和广播地址计算
  6. 学计算机后悔转专业,大学转专业容易吗 会后悔吗
  7. dom4j的读写xml文件,读写xml字符串
  8. android 底部导航,Android 底部导航之BottomNavigationBar
  9. 开启MySQL的binlog日志
  10. 虚拟化技术(1)——介绍
  11. 个人博客作业-Week2 (代码规范, 代码复审)
  12. java验证码功能一般怎么做的_java制作简单验证码功能
  13. 杭电多校HDU 6601 Keen On Everything But Triangle(主席树)题解
  14. chrome浏览器设置思源黑体
  15. 自学FPGA第一期:初学FPGA
  16. 高等数学总结(无穷级数)
  17. MongoDB学习笔记
  18. photoshop多选文字_60多个Photoshop文字效果教程
  19. 腾讯如何打造一款实时对战手游
  20. python中的进度条tqdm模块, 让进度可视

热门文章

  1. (二)unity优化方案:利用BMFont工具制作font字体(在UGUI和NGUI中使用)
  2. JavaScript3
  3. h5调用移动端摄像头实现拍照获取图片
  4. 冰河KS2:革新数字货币挖矿,引领Kaspa(KAS)矿机新纪元
  5. 模型加速之INT8量化原理及实践(基于TensorRT)
  6. Cadence 17.2 软件使用(1)— 软件安装
  7. Javascript Object和Map之间的转换
  8. 如何将 iOS 工程打包速度提升十倍以上
  9. uniapp中使用vuex
  10. 【裸机开发】按键输入实验