5

我有一个 kubernetes 集群,它使用 1.5 的 kops 设置,然后升级到 1.6.2。我正在尝试使用 PodPresets。文档说明了以下要求:

  1. 您已启用 api 类型 settings.k8s.io/v1alpha1/podpreset
  2. 您已启用准入控制器 PodPreset
  3. 您已经定义了 pod 预设

我看到对于 1.6.x,第一个已处理(我如何验证?)。我该如何申请第二个?我可以看到集群中运行了三个 kube-apiserver-* pod(我想它是用于 3 azs)。我想我可以从 kubernetes 仪表板编辑他们的 yaml 配置,并将 PodPreset 添加到准入控制字符串中。但是有没有更好的方法来实现这一点?

4

1 回答 1

4

您可以使用kubectl 命令或通过向您的端点api-versions发送 GET 请求来列出集群中当前启用的 API 组:/apiskube-apiserver

$ curl localhost:8080/apis
{
  "paths": [
  "/api",
  "/api/v1",
  "...",
  "/apis/settings.k8s.io",
  "/apis/settings.k8s.io/v1alpha1",
  "...",
}

注意:该settings.k8s.io/v1alpha1API 在 Kubernetes v1.6 和 v1.7 上默认启用,但在 v1.8 中将默认禁用

您可以使用 kops ClusterSpec在集群供应期间自定义 Kubernetes 组件的配置,包括 API 服务器。

这在文档页面Using A Manifest to Manage kops Clusters中有描述,KubeAPIServerConfig 类型的完整规范可在 kops GoDoc 中找到

例子:

apiVersion: kops/v1
kind: Cluster
metadata:
  name: k8s.example.com
spec:
  kubeAPIServer:
    AdmissionControl:
      - NamespaceLifecycle
      - LimitRanger
      - PodPreset

要更新现有集群,请执行以下步骤:

  1. 获取完整的集群配置

    kops get cluster name --full
    
  2. 从中复制 kubeAPIServer 规范块。

  3. 不要推回完整的配置。相反,编辑集群配置

    kops edit cluster name
    
  4. 粘贴 kubeAPIServer 规范块,添加缺失的位,然后保存。

  5. 更新集群资源

    kops update cluster nane
    
  6. 执行滚动更新以应用更改:

    kops rolling-update name
    
于 2017-07-03T09:11:23.883 回答