乐趣区

关于kubernetes:K8S-生态周报-Kubernetes-v1220-正式发布新特性一览

「K8S 生态周报」内容次要蕴含我所接触到的 K8S 生态相干的每周值得举荐的一些信息。欢送订阅知乎专栏「k8s 生态」。

Kubernetes v1.22 曾经在明天正式公布了,这是 2021 年的第二个正式公布的版本。此版本中共蕴含 53 项加强更新,其中 13 项达到 stable,24 项达到 beta 还有 16 项为 alpha。当然,也有 3 项个性被标记为废除。

从往年的 4 月份,Kubernetes 的公布节奏由原来的每 3 个月一个版本批改成了每 4 个月一个版本,这也是第一个利用了此节奏的长周期版本。咱们一起来看看有哪些值得注意的变更吧!

Server-side Apply 个性达到 GA

Server-side Apply 这个个性次要指标是把逻辑从 kubectl apply 挪动到 kube-apiserver 中,这能够修复以后遇到的很多无关所有权抵触的问题。

还记得在之前的『K8S 生态周报』中我曾为你介绍过 Kubernetes 新增的 .meta.managedFields 吗?Server-side Apply 以后就是通过此个性来跟踪对象字段的更改的。

同时此个性的益处在与你能够间接通过 API 实现申明式配置的操作,而无需依赖于特定的 kubectl apply 命令,比方间接通过 curl 即可实现。

此性能的用法如下:

kubectl apply --server-side [--dry-run=server]

Pod Security Policy 的替代品

PodSecurity admission controller 是在 Kubernets v1.21 中被废除的 Pod Security Policies 的替代品。

这个 admission controller 能够按 namespace 级别启用 Pod Security Standards,能够有以下三种模式:

  • enforce: 违反策略的 Pod 将被回绝;
  • audit:违反策略的 Pod 将会增加审计正文,但其余状况下都容许;
  • warn:违反策略的 Pod 将会触发面向用户的正告;

可通过如下配置文件进行管制:

apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
  configuration:
    defaults:  # Defaults applied when a mode label is not set.
      enforce:         <default enforce policy level>
      enforce-version: <default enforce policy version>
      audit:         <default audit policy level>
      audit-version: <default audit policy version>
      warn:          <default warn policy level>
      warn-version:  <default warn policy version>
    exemptions:
      usernames:         [<array of authenticated usernames to exempt>]
      runtimeClassNames: [<array of runtime class names to exempt>]
      namespaces:        [<array of namespaces to exempt>]

Node swap 反对

此个性当初是 Alpha 阶段。

尽管 swap 并不够快,然而当初有很多场景都是须要用到它的,尤其是一些 Java 和 Node 利用。

在 Kubernetes 的 issue 列表中有一个存在了 5 年左右的探讨,就是针对于是否开启 swap 反对的。以后这个个性一旦开启就是针对于整个 Node 的,并不能准确到某个 Pod 中。

你能够通过如下步骤启用此个性:

  • 在 Node 中启用 swap;
  • 开启 kubelet 的 NodeMemorySwap 个性;
  • 设置 --fail-on-swap=false
  • 可选在 Kubelet 的配置中减少 MemorySwap.SwapBehavior=UnlimitedSwap

更多内容可参考:https://github.com/kubernetes…

内部客户端凭证提供工具

这个性能容许 client-go 应用内部工具进行身份验证,比方 LDAP、Kerberos、OAuth2、SAML 等。这个个性是从 v1.10 开始引入的。

应用此个性的话,须要你在 kubeconfig 配置文件中作为 user 字段下的字段进行配置。比方:

apiVersion: v1
kind: Config
users:
- name: my-user
  user:
    exec:
      command: "example-client-go-exec-plugin"
      apiVersion: "client.authentication.k8s.io/v1beta1"

      env:
      - name: "FOO"
        value: "bar"

      args:
      - "arg1"
      - "arg2"
      
      provideClusterInfo: true
clusters:
...

user.exec 字段下配置可用的 client-go-exec plugin 即可。当初也有一个示例我的项目可供参考 https://github.com/ankeesler/…

可索引的 Job API

在 Kubernetes v1.21 中新增的可索引 Job API 能够更加不便的调度并行化的 Job。你能够应用如下的形式通过环境变量让 Job 中的 Pod 晓得本人的索引:

[...]
    spec:
      subdomain: my-job-svc
      containers:
      - name: task
        image: registry.example.com/processing-image
        command: ["./process",  "--index", "$JOB_COMPLETION_INDEX", "--hosts-pattern", "my-job-{{.id}}.my-job-svc"]

为 Job API 减少 suspend 字段

自 v1.21 起,Job 能够通过设置 .spec.suspend=true 字段来长期的挂起。能够比拟不便的去进行管制,相似 Argo workflow 中,也能够对某个 workflow 进行挂起操作。

CSR 的有效期

通过在 CertificateSigningRequestSpec 中减少的 ExpirationSeconds 能够承受的最小值是 600(10 分钟),这样就能够很好的管制其有效期了。当初默认的是 1 年。

内存资源的 QoS

之前 Kubernetes 在应用 cgroups v1,对于 Pod 的 QoS 其实只实用于 CPU 资源。Kubernetes v1.22 中通过引入 cgroups v2 来提供了一个 alpha 个性,容许对内存资源也提供 QoS。(如果没记错,貌似是腾讯云团队提交的 KEP 吧)

其余值得注意的变更,请参考之前公布的每期『K8S 生态周报』及《K8S 生态周报 | Kubernetes v1.22.0-beta.0 公布》

当然,你也能够通过 KIND 应用如下命令来疾速的体验 Kubernetes v1.22:

kind create cluster --image=kindest/node:v1.22.0@sha256:b8bda84bb3a190e6e028b1760d277454a72267a5454b57db34437c34a588d047

欢送订阅我的文章公众号【MoeLove】

退出移动版