【问题标题】:Kubernetes REST API - Create deploymentKubernetes REST API - 创建部署
【发布时间】:2018-04-07 21:00:40
【问题描述】:

我正在查看here 列出的 kubernetes API 端点。我正在尝试创建一个可以使用kubectl ru CLUSTER-NAME IMAGE-NAME PORT 从终端运行的部署。但是,我似乎无法在上面发布的链接中找到此命令的任何端点。我可以使用curl POST /api/v1/namespaces/{namespace}/pods 创建一个节点,然后使用curl -X DELETE http://localhost:8080/api/v1/namespaces/default/pods/node-name 删除,其中节点名称必须是单个节点(如果有100 个节点,每个节点都应该单独完成)。 是否有用于创建和删除部署的 api 端点?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    为了更容易消除字段或重组资源表示,Kubernetes 支持多个 API 版本,每个版本位于不同的 API 路径,例如 /api/v1/apis/extensions/v1beta1,为了扩展 Kubernetes API,实现了 API 组。

    目前有几个 API 组正在使用:

    • core(通常称为legacy,由于没有明确的组名)组,位于 REST 路径 /api/v1,并且未指定为 apiVersion 字段的一部分,例如apiVersion: v1
    • named groups 位于 REST 路径 /apis/$GROUP_NAME/$VERSION,并使用 apiVersion: $GROUP_NAME/$VERSION(例如 apiVersion: batch/v1)。支持的 API 组的完整列表可以在 Kubernetes API reference 中查看。

    要管理IngressDeploymentsReplicaSets等扩展资源,请参阅Extensions APIreference

    如参考中所述,创建部署:

    POST /apis/extensions/v1beta1/namespaces/{namespace}/deployments

    【讨论】:

      【解决方案2】:

      我通过运行带有详细日志记录的kubectl 对此进行了调试:kubectl --v=9 update -f dev_inventory.yaml

      它展示了这样一个 API 调用的使用:

      curl -i http://localhost:8001/apis/extensions/v1beta1/namespaces/default/deployments

      注意第一个路径元素是apis,而不是普通的api。我不知道为什么会这样,但是上面的命令有效。

      【讨论】:

      • 伟大的双胞胎!我既了解了实际的 URL,也了解了未来如何进一步了解 kubectl!
      【解决方案3】:

      我可能为时已晚,无法回答这个问题,但这是我在 v1.9 上尝试部署 StatefulSet 的方法:

      curl -kL -XPOST -H "Accept: application/json" -H "Content-Type: application/json" \
       -H "Authorization: Bearer <*token*>" --data @statefulset.json \
       https://<*ip*>:6443/apis/apps/v1/namespaces/eng-pst/statefulsets
      

      我将 statefulset.yaml 转换为 json,因为我看到 api 执行 POST 时的数据格式是 json。

      我运行了这个命令来找出我需要为我的 k8s 对象进行的 API 调用:

      kubectl --v=10 apply -f statefulset.yaml
      

      (可能不需要 v=10 级别,但我想要尽可能多的信息)

      【讨论】:

        【解决方案4】:

        Kubernetes Rest Api documentation 非常复杂,但遗憾的是缺少部署文档。 由于 Rest 模式与其他资源相同,您可以找出其余的调用:

        GET 按名称检索部署:

        • curl -H "Authorization: Bearer ${KEY}" ${API_URL}/apis/extensions/v1beta1/namespaces/${namespace}/deployments/${NAME}

        POST 创建一个新的部署

        • curl -X POST -d @deployment-definition.json -H "Content-Type: application/json" -H "Authorization: Bearer ${KEY}" ${API_URL}/apis/extensions/v1beta1/namespaces/ ${namespace}/部署

        当您为您的

        提供占位符时,您应该能够立即使用调用
        • API 密钥 ${KEY}
        • API 网址 ${API_URL}
        • 部署名称 ${NAME}
        • 命名空间 ${命名空间}

        【讨论】:

        • 我正在使用github.com/abonas/kubeclient,而get_deploymentsget_deployment 都不起作用。报告的错误是KubeException (the server could not find the requested resource)。我正在构建这样的 API 客户端:Kubeclient::Client.new 'http://localhost:8001/api/', 'extensions/v1beta1'.
        【解决方案5】:

        你试过类似的 URL 吗?

        http://localhost:8080/api/v1/namespaces/default/deployment/deployment-name
        

        【讨论】:

        • 是的。做过。获取could not find a requested resource
        • 出于好奇,您有什么理由不使用kubectl
        • 另外,似乎在apiVersion: extensions/v1beta1 中引入了部署,这就是为什么您可能无法使用v1 端点访问它们的原因。
        • @Beginner kubernetes.io/docs/user-guide/deployments 特别查看用于创建部署的 YAML,例如 here
        • 我知道如何使用kubectl 命令来处理部署。想看看他们是否有他们没有的 API 端点。 v1beta1 有错误。例如,如果您使用 API 端点删除部署,则相应的 pod 仍然存在。
        猜你喜欢
        • 1970-01-01
        • 2019-05-13
        • 2017-04-16
        • 1970-01-01
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        • 2017-09-06
        • 1970-01-01
        相关资源
        最近更新 更多