0

编辑:正如乔纳斯的回应中提到的,Kubernetes REST API 实际上可以被认为是声明性的而不是命令性的。

Kubernetes 以其声明性模型而闻名。控制器正在监视 ETCD 中包含所需状态(声明性)的对象。它将其与当前状态进行比较,并为命令式 Kubernetes API生成命令式命令。

哪些原因导致 Kubernetes 项目不公开声明式 HTTP API?

因此,让控制器/操作员进行对账。

我发现声明式 REST API 的一个示例是F5 AS3。而且我猜他们基于这个声明性 API 构建的Kubernetes 运算符非常简单。

4

1 回答 1

2

Kubernetes API 既可以以声明方式使用,也可以以命令方式使用。对于快速开发,命令式工作流可能会更好地工作,而对于可追溯性和生产工作负载,建议使用声明性工作流。

使用 curl 的声明式 HTTP 示例

这需要先运行kubectl proxy

curl -X POST -H 'Content-Type: application/yaml' --data '
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14
        ports:
        - containerPort: 80
' http://127.0.0.1:8001/apis/apps/v1/namespaces/default/deployments

Kubernetes API 是声明性的,因为您总是指定想要的,例如,replicas: 2而不是命令式APIcreate 2 replicas中的情况。然后,控制器将状态“驱动”为您在协调循环中指定的“内容”。

看:

从您的链接:

Application Services 3 Extension 使用声明性模型,这意味着您使用单个 Rest API 调用发送声明文件。

当您使用 yaml-manifest 文件时,Kubernetes API 的工作方式完全相同,例如kubectl apply -f deployment.yaml

于 2020-12-09T22:47:32.877 回答