使用 kops 启用 Kubernetes PodPresets

Enabling Kubernetes PodPresets with kops

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

  1. You have enabled the api type settings.k8s.io/v1alpha1/podpreset
  2. You have enabled the admission controller PodPreset
  3. You have defined your pod presets

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

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

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

Note: The settings.k8s.io/v1alpha1 API is enabled by default on Kubernetes v1.6 and v1.7 but will be disabled by default in v1.8.

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

这在文档页面 Using A Manifest to Manage kops Clusters, and the full spec for the KubeAPIServerConfig type is available in the 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 spec 块。

  3. 不要推回完整配置。相反,使用

    编辑集群配置
    kops edit cluster name
    
  4. 粘贴 kubeAPI服务器规范块,添加缺少的位,然后保存。

  5. 更新集群资源

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

    kops rolling-update name