Autor | Sun Jianbo (Tianyuan) expertos en tecnología Ali nube
Introducción : Espec OAM después de casi tres meses de iteraciones, v1alpha2 versión que finalmente liberado! Sobre la base de la nueva versión de OAM independiente de la plataforma Spec insistir en toda la tecnología más Kubernetes ambiente convertido, en gran medida balance de las normas y escalabilidad, mejor soporte CRD. Si usted ha escrito fuera de la plataforma del operador CRD, se puede suavizar el acceso al sistema OAM, y disfrutar de los dividendos de modelo de OAM.
Actualmente OAM ha convertido en la arquitectura de núcleo, incluyendo Ali, Microsoft, Upbond, nube armónica y otras empresas a las ofertas de acumulación de nubes. Construyeron por el "centrado en las aplicaciones" la facilidad de uso de la Kubernetes PaaS OAM; dar pleno juego a la estandarización y la escalabilidad de OAM, el núcleo OAM Controller al mismo tiempo, el rápido acceso a la capacidad existente del operador; abierto lateralmente a través de OAM múltiples módulos, deshacerse del operador original, aislados unos de otros, no podemos volver a utilizar el dilema.
-
Para entender los antecedentes y el origen de la OAM, se refieren a "la profundidad de la interpretación! Las lecciones y la práctica "Ali mejoras de la infraestructura de gestión de aplicaciones unificada ;
-
¿Qué valor puede traer OAM para los usuarios finales? Se puede hacer referencia a la "interpretación profundidad OAM: aplicaciones nativas OAM para la nube, que aportan un valor? "
A continuación Más cerca de casa, veamos v1alpha2 al final hacer lo que cambia?
Los principales cambios explicados
Con el fin de facilitar la lectura, aquí sólo muestra los cambios más importantes, hasta el punto, algunos de los detalles o el sentido ascendente OAM Spec Github repositorio prevalecen.
término Descripción
-
CRD (Custom Resource Definition): En el OAM dijo que la CRD es una descripción de recurso personalizado refiere a la definición de. K8S implementadas en el OAM puede corresponder exactamente a la CRD de K8S, en la ejecución de las no K8S, OAM comprende el CRD necesidad APIVersion / Tipo y puede verificar el campo de descripción;
-
CR (recurso personalizado), OAM CR es un ejemplo de la CRD, un recurso se describe en línea con el formato de campo de definición de CRD. K8S implementa en el OAM de los correspondientes K8S CR completamente en el logro de los no K8S, la alineación puede ser necesaria APIVersion Kind y formato de campo de definición /.
Los principales cambios en el uso de 1 Referencia definiciones del modelo de carga de trabajo, Trait y alcance
v1alpha1 manera original es la siguiente:
// 老版本,仅对比使用
apiVersion: core.oam.dev/v1alpha1
kind: WorkloadType
metadata:
name: OpenFaaS
annotations:
version: v1.0.0
description: "OpenFaaS a Workload which can serve workload running as functions"
spec:
group: openfaas.com
version: v1alpha2
names:
kind: Function
singular: function
plural: functions
workloadSettings: |
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": [
"name", "image"
],
"properties": {
"name": {
"type": "string",
"description": "the name to the function"
},
"image": {
"type": "string",
"description": "the docker image of the function"
}
}
}
En el modelo original, el grupo / versión / tipo son campo, jsonschema comprobación de las especificaciones representado por el formato general es en realidad la CRD es similar, pero no idéntico.
El nuevo v1alpha2 cambió completamente el modelo de referencia, a través de WorkloadDefinition
TraitDefinition
ScopeDefinition
la forma de una referencia para describir la relación. Puede ser una referencia directa a un CRD, el nombre es el nombre de la CRD. Para lograr OAM no K8S de él, aquí es el nombre de un índice, se puede encontrar el archivo CRD suma de comprobación similar, compruebe el archivo contiene apiVersion y amable, y la validación del esquema correspondiente.
- carga de trabajo
apiVersion: core.oam.dev/v1alpha2
kind: WorkloadDefinition
metadata:
name: containerisedworkload.core.oam.dev
spec:
definitionRef:
# Name of CRD.
name: containerisedworkload.core.oam.dev
- Rasgo
apiVersion: core.oam.dev/v1alpha2
kind: TraitDefinition
metadata:
name: manualscalertrait.core.oam.dev
spec:
appliesToWorkloads:
- containerizedworkload.core.oam.dev
definitionRef:
name: manualscalertrait.core.oam.dev
- Alcance
apiVersion: core.oam.dev/v1alpha2
kind: ScopeDefinition
metadata:
name: networkscope.core.oam.dev
spec:
allowComponentOverlap: true
definitionRef:
name: networkscope.core.oam.dev
nota:
-
Aquí para lograr OAM K8S de ella, el nombre CRD es K8S dentro del nombre, por la
<plural-kind>.<group>
composición. La mejor práctica es una comunidad de CRD sólo una versión que se ejecuta en el clúster, será compatible con él la mayor parte de la nueva versión, se sustituyen por una actualización en tiempo uno a la última versión. Si hay una escena 2 están presentes simultáneamente versión, el usuario puedekubectl get crd <name>
seleccionar aún más la forma; -
Definición Esta capa no se enfrenta el usuario final, la plataforma principal para su uso, para su aplicación no K8S, si existe una pluralidad de escenas versión, la plataforma de implementación OAM a un usuario final puede seleccionar una versión diferente de la serie.
Directamente en cambios importantes K8S CR 2 de componentes como ejemplos y Trait
La carga de trabajo y el nivel Rasgo manera original, que son sólo una parte de la especificación fuera de CR, respectivamente, en workloadSettings
e properties
campo.
A pesar de esta manera puede "deriva" K8S CR, pero no es propicio para el acceso en el CRD K8S ecológica, necesidad de cambiar formatos redefinido especificación de nuevo.
// 老版本,仅对比使用
apiVersion: core.oam.dev/v1alpha1
kind: ComponentSchematic
metadata:
name: rediscluster
spec:
workloadType: cache.crossplane.io/v1alpha1.RedisCluster
workloadSettings:
engineVersion: 1.0
region: cn
// 老版本,仅对比使用
apiVersion: core.oam.dev/v1alpha1
kind: ApplicationConfiguration
metadata:
name: custom-single-app
annotations:
version: v1.0.0
description: "Customized version of single-app"
spec:
variables:
components:
- componentName: frontend
instanceName: web-front-end
parameterValues:
traits:
- name: manual-scaler
properties:
replicaCount: 5
Ahora incrustado directamente CR manera, se puede ver en workload
y trait
descrito a continuación es un CR campo completo.
apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
name: example-server
spec:
prameters:
- name: xxx
fieldPaths:
- "spec.osType"
workload:
apiVersion: core.oam.dev/v1alpha2
kind: Server
spec:
osType: linux
containers:
- name: my-cool-server
image:
name: example/very-cool-server:1.0.0
ports:
- name: http
value: 8080
env:
- name: CACHE_SECRET
apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:
name: cool-example
spec:
components:
- componentName: example-server
traits:
- trait:
apiVersion: core.oam.dev/v1alpha2
kind: ManualScalerTrait
spec:
replicaCount: 3
La ventaja es obvia:
- Puede fácilmente K8S sistema de acoplamiento en el CRD convencional, incluso K8S nativa
Deployment
(como un acceso de carga de trabajo de encargo) y otros recursos; - campo K8S CR define el nivel de maduro, completo de análisis y validación también denominados sistema de CRD.
Aquí observamos que los siguientes rasgos es []trait{CR}
no la []CR
estructura, más de una capa de aparentemente inútil trait
de campo, principalmente por las siguientes dos razones:
- En esta dimensión para el rasgo subsiguiente hacer dejar espacio para la expansión, como la posible disposición (
ordering
) y así sucesivamente. - sistema no K8S en esta capa puede no ser estrictamente de acuerdo con el texto del CR, completamente personalizable, no se une K8S descripción de formato.
3 principales parámetros de transmisión utilizadas cambios jsonPath reemplazar el original de fromParam
I + D puede dejar un campo para la operación y mantenimiento de cubierta , que ha sido un OAM función muy importante.
Esto se refleja en el flujo de la OAM Spec: desarrollo de componentes en el interior del parámetro, operación y mantenimiento se define para cubrir los parámetros correspondientes parameterValue AppConfig interior.
El paso de parámetros inicial, hay un campo en la parte posterior de cada fromParam
campo, el apoyo a un esquema personalizado, de esta manera claramente no puede cubrir todos los escenarios:
// 老版本,仅对比使用
apiVersion: core.oam.dev/v1alpha1
kind: ComponentSchematic
metadata:
name: rediscluster
spec:
workloadType: cache.crossplane.io/v1alpha1.RedisCluster
parameters:
- name: engineVersion
type: string
workloadSettings:
- name: engineVersion
type: string
fromParam: engineVersion
Después habíamos propuesto esquema de un ejemplo:
// 老版本,仅对比使用
apiVersion: core.oam.dev/v1alpha1
kind: ComponentSchematic
metadata:
name: rediscluster
spec:
workloadType: cache.crossplane.io/v1alpha1.RedisCluster
parameters:
- name: engineVersion
type: string
workloadSettings:
engineVersion: "[fromParam(engineVersion)]"
El mayor problema de este programa es estática IAD (Infraestructura como de datos) que funciona se han añadido dinámica de entender y utilizar trae complejidad.
Después de mucha discusión, se describe un nuevo programa en la posición de parámetros a ser inyectado en forma de JsonPath, en la comprensión del usuario para garantizar la AppConfig es estática.
apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
name: example-server
spec:
workload:
apiVersion: core.oam.dev/v1alpha2
kind: Server
spec:
containers:
- name: my-cool-server
image:
name: example/very-cool-server:1.0.0
ports:
- name: http
value: 8080
env:
- name: CACHE_SECRET
value: cache
parameters:
- name: instanceName
required: true
fieldPaths:
- ".metadata.name"
- name: cacheSecret
required: true
fieldPaths:
- ".workload.spec.containers[0].env[0].value"
fieldPaths es una matriz, cada elemento define los parámetros y la correspondiente carga de trabajo en el campo.
apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:
name: my-app-deployment
spec:
components:
- componentName: example-server
parameterValues:
- name: cacheSecret
value: new-cache
En AppConfig en parameterValues o ir a cubrir Componente del parámetro.
El principal nombre cambia a Componente 4 ComponentSchematic
componentes originales de este concepto llamado ComponentSchematic, la principal razón de este nombre se mezcla en el interior de algunos de la sintaxis y las opciones de descripción, como por la carga de trabajo Core ( container
) y para la extensión de carga de trabajo ( workloadSettings
), no es la misma que la redacción container
de la definición de parámetros específicos, workloadSettings
como es el esquema (explicar cómo llenar los parámetros). v1alpha1 versión de WorkloadSetting también integrado en el tipo / descripción de la clase, aún más ambigua.
// 老版本,仅对比使用
apiVersion: core.oam.dev/v1alpha1
kind: ComponentSchematic
metadata:
name: rediscluster
spec:
containers:
...
workloadSettings:
- name: engineVersion
type: string
description: engine version
fromParam: engineVersion
...
En la versión v1alpha2, los componentes de este concepto cambió de componentes, claro como un ejemplo de la carga de trabajo, todas las definiciones de sintaxis se hace referencia en WorkloadDefinition CRD realidad definida.
En aplicación K8S, WorkloadDefinition es una referencia al CRD, Component.spec.workload está escrito en la instancia correspondiente CRD CR.
apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
name: example-server
spec:
workload:
apiVersion: core.oam.dev/v1alpha2
kind: Server
spec:
...
5 Ámbito grandes cambios creados solamente por CR, ya no creados por AppConfig
se crea Ámbito de v1alpha1 AppConfig, se puede ver del ejemplo, también es esencialmente un CR puede ser "derivado" para crear CR. Sin embargo, debido a la colocación de la Alcance puede acomodar diferente AppConfig en el Componente, y alcance en sí mismo no es una aplicación, a fin de utilizar AppConfig Crear ámbito sido inadecuado.
// 老版本,仅对比使用
apiVersion: core.oam.dev/v1alpha1
kind: ApplicationConfiguration
metadata:
name: my-vpc-network
spec:
variables:
- name: networkName
value: "my-vpc"
scopes:
- name: network
type: core.oam.dev/v1alpha1.Network
properties:
network-id: "[fromVariable(networkName)]"
subnet-ids: "my-subnet1, my-subnet2"
v1alpha2 uso completo de la nueva versión de la CR a la instancia correspondiente, con el fin de hacer que el concepto Alcance de la más clara y más conveniente para corresponder a diferentes tipos de Alcance, el alcance a cabo directamente definido por el correspondiente ScopeDefinition CRD CR creado. Ejemplos son los siguientes:
apiVersion: core.oam.dev/v1alpha2
kind: ScopeDefinition
metadata:
name: networkscope.core.oam.dev
spec:
allowComponentOverlap: true
definitionRef:
name: networkscope.core.oam.dev
apiVersion: core.oam.dev/v1alpha2
kind: NetworkScope
metadata:
name: example-vpc-network
labels:
region: us-west
environment: production
spec:
networkId: cool-vpc-network
subnetIds:
- cool-subnetwork
- cooler-subnetwork
- coolest-subnetwork
internetGatewayType: nat
Se utiliza en el ámbito AppConfig referencia de la siguiente manera:
apiVersion: core.oam.dev/v1alpha2
kind: ApplicationConfiguration
metadata:
name: custom-single-app
annotations:
version: v1.0.0
description: "Customized version of single-app"
spec:
components:
- componentName: frontend
scopes:
- scopeRef:
apiVersion: core.oam.dev/v1alpha2
kind: NetworkScope
name: my-vpc-network
- componentName: backend
scopes:
- scopeRef:
apiVersion: core.oam.dev/v1alpha2
kind: NetworkScope
name: my-vpc-network
Lista de variables 6 Cambios elimina principalmente y función dinámica [fromVariable ()]
Hay versión v1alpha1 variable de referencia de código abierto AppConfig en algunas variables públicas a reducir la redundancia, se unió a la lista de variables. Pero el punto de vista práctico, lo que reduce significativamente el redundante y no reducir la complejidad de especificación OAM, por el contrario, para aumentar la función dinámica aumenta significativamente la complejidad.
Por otro lado, fromVariable por esa capacidad de una plantilla puede timón / kustomiz hacer otras herramientas, estas herramientas hacen a una especificación OAM completa, entonces se utiliza.
Así que aquí una lista de variables y fromVariable asociada se eliminan, que no afecta a ninguna funcionalidad.
// 老版本,仅对比使用
apiVersion: core.oam.dev/v1alpha1
kind: ApplicationConfiguration
metadata:
name: my-app-deployment
spec:
variables:
- name: VAR_NAME
value: SUPPLIED_VALUE
components:
- componentName: my-web-app-component
instanceName: my-app-frontent
parameterValues:
- name: ANOTHER_PARAMETER
value: "[fromVariable(VAR_NAME)]"
traits:
- name: ingress
properties:
DATA: "[fromVariable(VAR_NAME)]"
Los principales cambios a 7 para reemplazar la carga de trabajo original de seis núcleos con ContainerizedWorkload
En la actualidad se define de manera uniforme por WorkloadDefinition carga de trabajo, Componente convertirse en un ejemplo de, por lo que los seis originales núcleo de carga de trabajo en realidad se convirtió en el mismo WorkloadDefinition, descripción del campo exactamente lo mismo, la única diferencia es un rasgo no son las mismas limitaciones y exigencias. Por lo tanto, el original de carga de trabajo de seis núcleo de spec, unificado tipo de modificación de carga de trabajo se llama ContainerizedWorkload de.
Mientras tanto, aquí se prevé aumentar por conceptos tales como la política, la investigación y el desarrollo para hacer expresar sus demandas para las estrategias de operación y mantenimiento que se pueden expresar la esperanza de componentes aumenta la cual rasgo.
apiVersion: core.oam.dev/v1alpha2
kind: WorkloadDefinition
metadata:
name: containerizedworkloads.core.oam.dev
spec:
definitionRef:
name: containerizedworkloads.core.oam.dev
Uso ContainerizedWorkload una muestra:
apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
name: frontend
annotations:
version: v1.0.0
description: "A simple webserver"
spec:
workload:
apiVersion: core.oam.dev/v1alpha2
kind: ContainerizedWorkload
metadata:
name: sample-workload
spec:
osType: linux
containers:
- name: web
image: example/charybdis-single:latest@@sha256:verytrustworthyhash
resources:
cpu:
required: 1.0
memory:
required: 100MB
env:
- name: MESSAGE
value: default
parameters:
- name: message
description: The message to display in the web app.
required: true
type: string
fieldPaths:
- ".spec.containers[0].env[0].value"
Los próximos pasos
- Entre los componentes de nivel de aplicación y dependencias de paso de parámetros ( flujo de trabajo );
- los programas de política , para facilitar la investigación y el desarrollo ponen demandas hacia adelante para rasgo en componentes;
- Componente aumento concepto de versiones, mientras que da una dirección de la MAO versión de la aplicación de forma relevante .
Preguntas comunes
- La transformación de nuestro modelo de OAM plataforma original para lograr lo que hay que hacer?
Para la gestión de aplicación de la plataforma estaba originalmente en K8S, la transformación de acceso de las implementaciones OAM se puede dividir en dos etapas:
- Implementar OAM Controller ApplicationConfiguration (Controller AppConfig abreviado), que contiene el componente controlador de OAM, WorkloadDefinition, TraitDefinition, ScopeDefinition como CRD. El OAM AppConfig Controller AppConfig como se describe en, tirón CRD operador plataforma original;
- Poco a poco el original CRD Operador de acuerdo con la idea de la separación de intereses, dividido en la carga de trabajo y el rasgo. Al mismo tiempo el acceso de la comunidad y OAM reutilización más carga de trabajo, Rasgo, rica en más escenas.
- CRD operador para acceder OAM existente lo que hay que hacer a cambio?
Existente CRD operador ** funciones OAM sistema sin problemas de acceso, tal como una extensión de carga de trabajo acceso independiente. Sin embargo, con el fin de permitir una mejor a los usuarios finales a darse cuenta de los beneficios de la separación de las preocupaciones OAM, se recomienda encarecidamente CRD mando En función de I + D y preocupaciones operacionales separamos en diferentes CRD, atención de la investigación CRD como la carga de trabajo OAM de acceso, problemas operacionales CRD es un rasgo acceso OAM.
Actualmente, las especificaciones de OAM y el modelo de realidad resuelven muchos de los problemas existentes, pero su viaje acaba de comenzar. OAM es un proyecto de código abierto neutro, damos la bienvenida a más personas a participar, definir conjuntamente el futuro de la distribución de aplicaciones de nube natal.
involucrados:
- Código de uñas de escaneo para entrar en los grupos de discusión del proyecto OAM chinos
- Por Gitter directamente involucrados en la discusión
- implementación de código abierto de la dirección de la MAO
- Haga clic mirada de la estrella
Sobre el autor
Sun Jianbo (apodo: Tianyuan) experto en tecnología de la nube Ali, es uno de los principales fabricantes de especificaciones OAM, comprometidos con la promoción de la estandarización de las aplicaciones en la nube natal. Mientras que también participa en la nube de Alibaba entrega de aplicaciones nativas y aplicaciones de gestión a gran escala de los trabajos relacionados. invita equipo de gestión de aplicaciones, Serverless experto, PaaS de campo para unirse, por favor contacto jianbo.sjb EN alibaba-inc.com
Reclutar personas que!
Nativo nube de plataforma de aplicaciones invita Kubernetes / sin servidor / PaaS / especialistas de entrega de aplicaciones (P6-P8) se unan a:
- Experiencia laboral: recomendaciones de P6-7 tres años, cinco años a partir de P8, específicamente para ver la capacidad real;
- Ubicación: China (Beijing / Hangzhou / Shenzhen); ultramar (San Francisco Bay Area / Seattle);
- Mensajes incluyen: arquitectos, ingenieros y tecnólogos, otra pila completa.
Reanudar inmediatamente responder, de 2 a 3 semanas, los resultados, entrega curriculum vitae: jianbo.sjb AT alibaba-inc.com.
" Alibaba nube nativa preocupación servicio de micro, sin servidor, contenedor, Servicio de malla y otros campos técnicos, centrándose tendencias tecnológicas populares nativas nube, nube de la práctica de aterrizaje a gran escala nativa, la mayoría lo hace entender círculos de tecnología de nube nativos de los desarrolladores."