「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】