- runtimes/go1.23/server.go: HTTP-wrapper + job-runner (SLESS_MODE=job) - runtimes/go1.23/go.mod: module sless/fn (изолирует от корневого go.mod) - runtimes/go1.23/Dockerfile: multi-stage build (golang:1.23-alpine → alpine:3.20) - internal/builder/context.go: go1.23 в runtimeBaseImage + generateDockerfile - controllers/functionjob_controller.go: go1.23 runner (nil cmd + SLESS_MODE=job env) - api/v1alpha1/function_types.go: enum go1.21 → go1.23 - config/crd/bases/...: CRD обновлён - terraform/provider: OneOf обновлён - examples/hello-go: HTTP + job примеры на go1.23 - deployments/k8s/operator.yaml: v0.1.25
187 lines
8.8 KiB
YAML
187 lines
8.8 KiB
YAML
---
|
||
apiVersion: apiextensions.k8s.io/v1
|
||
kind: CustomResourceDefinition
|
||
metadata:
|
||
annotations:
|
||
controller-gen.kubebuilder.io/version: v0.14.0
|
||
name: functions.sless.kube5s.ru
|
||
spec:
|
||
group: sless.kube5s.ru
|
||
names:
|
||
kind: Function
|
||
listKind: FunctionList
|
||
plural: functions
|
||
singular: function
|
||
scope: Namespaced
|
||
versions:
|
||
- additionalPrinterColumns:
|
||
- jsonPath: .spec.runtime
|
||
name: Runtime
|
||
type: string
|
||
- jsonPath: .status.phase
|
||
name: Phase
|
||
type: string
|
||
- jsonPath: .metadata.creationTimestamp
|
||
name: Age
|
||
type: date
|
||
name: v1alpha1
|
||
schema:
|
||
openAPIV3Schema:
|
||
description: Function — основной ресурс для управления serverless функцией.
|
||
properties:
|
||
apiVersion:
|
||
description: |-
|
||
APIVersion defines the versioned schema of this representation of an object.
|
||
Servers should convert recognized schemas to the latest internal value, and
|
||
may reject unrecognized values.
|
||
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||
type: string
|
||
kind:
|
||
description: |-
|
||
Kind is a string value representing the REST resource this object represents.
|
||
Servers may infer this from the endpoint the client submits requests to.
|
||
Cannot be updated.
|
||
In CamelCase.
|
||
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||
type: string
|
||
metadata:
|
||
type: object
|
||
spec:
|
||
description: |-
|
||
FunctionSpec — желаемое состояние функции.
|
||
Описывает всё необходимое для сборки и запуска пользовательского кода.
|
||
properties:
|
||
entrypoint:
|
||
description: 'Entrypoint — точка входа в код функции (например: handler.handle)'
|
||
type: string
|
||
env:
|
||
additionalProperties:
|
||
type: string
|
||
description: Env — переменные окружения, передаются в контейнер функции
|
||
type: object
|
||
memoryMB:
|
||
default: 128
|
||
description: 'MemoryMB — лимит памяти в мегабайтах (default: 128)'
|
||
format: int32
|
||
type: integer
|
||
runtime:
|
||
description: Runtime — язык и версия выполнения (go1.23, python3.11,
|
||
nodejs20)
|
||
enum:
|
||
- go1.23
|
||
- python3.11
|
||
- nodejs20
|
||
type: string
|
||
s3Bucket:
|
||
description: S3Bucket — бакет S3 где хранится zip архив с кодом
|
||
type: string
|
||
s3Key:
|
||
description: S3Key — ключ объекта в S3 (путь до zip архива)
|
||
type: string
|
||
timeoutSec:
|
||
default: 30
|
||
description: 'TimeoutSec — максимальное время выполнения в секундах
|
||
(default: 30)'
|
||
format: int32
|
||
type: integer
|
||
required:
|
||
- entrypoint
|
||
- runtime
|
||
- s3Bucket
|
||
- s3Key
|
||
type: object
|
||
status:
|
||
description: FunctionStatus — наблюдаемое состояние функции (заполняет
|
||
контроллер).
|
||
properties:
|
||
conditions:
|
||
description: Conditions — стандартные k8s conditions для интеграции
|
||
с инструментами
|
||
items:
|
||
description: "Condition contains details for one aspect of the current
|
||
state of this API Resource.\n---\nThis struct is intended for
|
||
direct use as an array at the field path .status.conditions. For
|
||
example,\n\n\n\ttype FooStatus struct{\n\t // Represents the
|
||
observations of a foo's current state.\n\t // Known .status.conditions.type
|
||
are: \"Available\", \"Progressing\", and \"Degraded\"\n\t //
|
||
+patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t
|
||
\ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\"
|
||
patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t
|
||
\ // other fields\n\t}"
|
||
properties:
|
||
lastTransitionTime:
|
||
description: |-
|
||
lastTransitionTime is the last time the condition transitioned from one status to another.
|
||
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
|
||
format: date-time
|
||
type: string
|
||
message:
|
||
description: |-
|
||
message is a human readable message indicating details about the transition.
|
||
This may be an empty string.
|
||
maxLength: 32768
|
||
type: string
|
||
observedGeneration:
|
||
description: |-
|
||
observedGeneration represents the .metadata.generation that the condition was set based upon.
|
||
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
|
||
with respect to the current state of the instance.
|
||
format: int64
|
||
minimum: 0
|
||
type: integer
|
||
reason:
|
||
description: |-
|
||
reason contains a programmatic identifier indicating the reason for the condition's last transition.
|
||
Producers of specific condition types may define expected values and meanings for this field,
|
||
and whether the values are considered a guaranteed API.
|
||
The value should be a CamelCase string.
|
||
This field may not be empty.
|
||
maxLength: 1024
|
||
minLength: 1
|
||
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
||
type: string
|
||
status:
|
||
description: status of the condition, one of True, False, Unknown.
|
||
enum:
|
||
- "True"
|
||
- "False"
|
||
- Unknown
|
||
type: string
|
||
type:
|
||
description: |-
|
||
type of condition in CamelCase or in foo.example.com/CamelCase.
|
||
---
|
||
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
|
||
useful (see .node.status.conditions), the ability to deconflict is important.
|
||
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
|
||
maxLength: 316
|
||
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
|
||
type: string
|
||
required:
|
||
- lastTransitionTime
|
||
- message
|
||
- reason
|
||
- status
|
||
- type
|
||
type: object
|
||
type: array
|
||
imageRef:
|
||
description: ImageRef — полный путь к собранному Docker образу в registry
|
||
type: string
|
||
lastBuiltAt:
|
||
description: LastBuiltAt — время последней успешной сборки образа
|
||
format: date-time
|
||
type: string
|
||
message:
|
||
description: Message — человекочитаемое сообщение об ошибке или статусе
|
||
type: string
|
||
phase:
|
||
description: 'Phase — текущая фаза: Pending, Building, Ready, Failed'
|
||
type: string
|
||
type: object
|
||
type: object
|
||
served: true
|
||
storage: true
|
||
subresources:
|
||
status: {}
|