Netflix es un modelo de organizaciones de microservicios y DevOps en la industria y tiene prácticas exitosas en microservicios de nivel de producción a gran escala. Algunas empresas han realizado microservicios incluso antes que Netflix, pero Netflix es probablemente el más destacado de los microservicios de nivel de producción a gran escala.
Netflix ha hecho una gran contribución a la comunidad de código abierto y ha lanzado muchas herramientas de código abierto para implementación, empaquetado y otras funciones. Spinnaker es un proyecto de código abierto de Netflix para implementación en un entorno de nube híbrida, que puede realizar la orquestación de tareas de implementación en plataformas de nube. Use Spinnaker en Netflix para publicar 4000 cambios en las máquinas de Amazon todos los días. Google Cloud también está utilizando Spinnaker para la implementación. También usan Jenkins al compilar, y hay un proceso llamado hornear. Bake empaqueta la aplicación en un espejo y luego implementa el espejo con deploy. La práctica de DevOps de Netflix es muy digna de atención, y también tienen muchos proyectos y herramientas de código abierto que vale la pena revisar.
Este artículo analiza principalmente el modelo de desarrollo, la integración continua y las prácticas de implementación de Spinnaker.
Arquitectura de servicio
Spinnaker
Está compuesto por varios microservicios. Deck
Es la página de front-end; Gate
la API
puerta de enlace Spinnaker UI
y todos los api
programas de llamadas se Gate与Spinnaker
comunican a través ; Orca
el motor de orquestación maneja todas las operaciones y canalizaciones temporales; CloudDriver
es responsable de todas las llamadas de cambio al proveedor de la nube e indexa / almacena en caché todos los recursos implementados; se Front50
usa para guardar la aplicación Metadatos para programas, pipelines, proyectos y notificaciones; Rosco
generan imágenes, que generan imágenes de VM inmutables para varios proveedores de nube; se Igor
utilizan Jenkins和Travis CI
para activar pipelines esperando trabajos de integración continua en el sistema, y permite que las Jenkins / Travis
etapas se utilicen en el pipeline ; Echo
Responsable de notificación de mensaje; Fiat
Responsable de la gestión de autorización de usuario; Kayenta
para Spinnaker
proporcionar análisis automatizado canario, sino que Halyard
es una Spinnaker
herramienta de gestión de la configuración del ciclo de vida.
Gestión de almacén de códigos
Los microservicios de Spinnaker son crear una base de código para cada microservicio. Puede visitar el almacén de Spinnaker en Github, donde cada microservicio tiene un código de gestión de almacén correspondiente. Ingrese al proyecto para ver la estrategia de la sucursal, el desarrollo de la sucursal principal, la versión de la sucursal.
Integración continua
La herramienta utilizada es GitHub Actions. Solo hay un trabajo en este archivo ci branch-build
, que es principalmente para ejecutar la compilación de gradle.
.github/workflows/build.yml
El contenido del archivo CI es el siguiente: Se activa automáticamente cuando hay una master
bifurcación y se version-*tag
confirma. Por env
la configuración de los gradle
parámetros de la construcción.
name: Branch Build
on:
push:
branches:
- master
- version-*
env:
GRADLE_OPTS: -Dorg.gradle.daemon=false -Xmx2g -Xms2g
jobs:
branch-build:
# Only run this on repositories in the 'spinnaker' org, not on forks.
if: startsWith(github.repository, 'spinnaker/')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Install Java 8 for cross-compilation support. Setting it up before
# Java 11 means it comes later in $PATH (because of how setup-java works)
- uses: actions/setup-java@v1
with:
java-version: 8
- uses: actions/setup-java@v1
with:
java-version: 11
- uses: actions/cache@v1
with:
path: ~/.gradle
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build
run: ./gradlew -PenableCrossCompilerPlugin=true build --stacktrace
Despliegue de aplicaciones
La instalación e implementación de Spinnaker es un dolor de cabeza, porque muchos archivos de recursos deben obtenerse del exterior. Cuando importamos los archivos de recursos necesarios a China, en realidad no es tan doloroso. Al menos ahora es muy realista desplegar un spinnaker en 30 minutos. (Si no cuenta el tiempo de extracción de la imagen de Alibaba Cloud, un script implementará una instancia en 5 minutos)
Echemos un vistazo a este archivo de versión, que registra toda la información de la versión del microservicio de los productos Spinnaker. De hecho, driza despliega Spinnaker para leer este archivo y obtener los recursos necesarios en función del contenido del archivo.
version: 1.19.4
timestamp: '2020-04-03 08:01:05'
services:
echo:
version: 2.11.2-20200401121252
commit: 5e2b673d1d658f88a3ae7741ab99cc0fd4a9df48
clouddriver:
version: 6.7.3-20200401190525
commit: 77c774d185de42bb83dffde1f813f719f712994b
deck:
version: 3.0.2-20200324040016
commit: 7c228ce82928f73a0f3051c4233242a6f87e0bec
fiat:
version: 1.10.1-20200401121252
commit: aaebd07d8134d48630b056d6877a799a09ed282b
front50:
version: 0.22.1-20200401121252
commit: ef1e7feff41797beb2d1695c1c3c0face550fe4b
gate:
version: 1.15.1-20200403040016
commit: 365aa9fc5b1351207731c4445d7bbb79885d6da1
igor:
version: 1.9.2-20200401121252
commit: 576235bcfce0c48bc139e9c94fe98b3467d3d170
kayenta:
version: 0.14.0-20200304112817
commit: 85f590de74db46d54f016d88862418c990a17747
orca:
version: 2.13.2-20200401144746
commit: 8460456e8380d370d1678b06acd015900a94f515
rosco:
version: 0.18.1-20200401121252
commit: 9a20165e9c0d33e538d0038d5d02cb480e27f8c3
defaultArtifact: {}
monitoring-third-party:
version: 0.16.2-20200228142642
commit: 94c6e9cd3006347efe3101c0e6d8f98ce65f9053
monitoring-daemon:
version: 0.16.2-20200228142642
commit: 94c6e9cd3006347efe3101c0e6d8f98ce65f9053
dependencies:
redis:
version: 2:2.8.4-2
consul:
version: 0.7.5
vault:
version: 0.7.0
artifactSources:
debianRepository: https://dl.bintray.com/spinnaker-releases/debians
dockerRegistry: gcr.io/spinnaker-marketplace
googleImageProject: marketplace-spinnaker-release
gitPrefix: https://github.com/spinnaker
Este es un archivo en formato Yaml. La parte superior se version
refiere al número de versión de Spinnaker, la services
parte inferior contiene la información (versión, envío) de cada servicio. dependencies
Es un servicio dependiente requerido para la implementación de spinnaker. Analicemos version
el rol del campo en cada servicio , este campo es muy útil. Utilice este campo para especificar la etiqueta de imagen de Docker y la adquisición del archivo de configuración en la rama de servicio.
echo:
version: 2.11.2-20200401121252
Echo es uno de los microservicios de Spinnaker, responsable de la notificación de mensajes. Halyard leerá el archivo de configuración en el directorio de la version-2.11.2
etiqueta y descargará el espejo. Otros servicios se pueden deducir por analogía.halconfig
echo.yml
gcr.io/spinnaker-marketplace/echo:2.11.2-20200401121252
Finalmente, realizamos la hal deploy apply
implementación con un clic para lanzar Spinnaker.
Para el proyecto del modelo de microservicio, se pueden aprender muchos detalles del modelo de Spinnaker. Por ejemplo: también podemos crear un archivo yaml correspondiente al número de versión en el almacén de gitlab, que contiene la etiqueta espejo de cada microservicio en la versión actual. Al prepararse para el lanzamiento, seleccione la rama de versión en Jenkins y luego lea el archivo yaml de la versión correspondiente en el almacén de gitlab de acuerdo con el número de versión en la rama de versión, y luego impleméntelo con un clic. Cuando necesite revertir, ingrese el mismo proceso que el número de versión anterior para revertir.