「K8S 生态周报」内容次要蕴含我所接触到的 K8S 生态相干的每周值得举荐的一些信息。欢送订阅知乎专栏「k8s生态」。
Kubernetes v1.23 行将公布,这是 2021 年公布的第三个版本,也是往年最初一个正式公布的版本。
此版本中次要包含 47 项加强更新,其中 11 项达到 stable, 17 项达到 beta 还有 19 项达到 alpha 。 当然,也有 1 项被标记为废除。相比于 v1.22 从数量上来说是少了一点(v1.22 有 53 项加强更新),但这并不影响这是一个很棒的版本!
在 Kubernetes 的公布周期变更为 每4个月一个版本 后,很显著的感觉就是不必在降级下面破费太多工夫了,毕竟 Kubernetes 的降级操作是个体力活,大家感觉呢?
咱们一起来看看这个版本中有哪些值得关注的变更吧!
新增 kubectl alpha events 命令
在之前的 《K8S 生态周报| Helm 新版本公布加强对 OCI 的反对》 文章的上游停顿中我曾为大家介绍了该性能。它是依照 KEP #1440 施行的。
减少此命令次要是因为在不批改kubectl get
的前提下,查看event
有一些限度,所以间接减少kubectl events
命令能够更不便的去获取到须要的信息,尤其是 event 是在 Kubernetes 中常常须要查看的一个信息。kubectl get events
比拟典型的一些问题, 比方排序(尽管能够通过加参数解决), watch,以及无奈依照工夫线形式去查看 events 等。
咱们来看看这个命令具体如何应用。
咱们先来创立两个 Pod,别离叫 redis
和 redis2
。
(MoeLove) ➜ kubectl run redis --image="ghcr.io/tao12345666333/redis:alpine" pod/redis created(MoeLove) ➜ kubectl run redis2 --image="ghcr.io/tao12345666333/redis:alpine"pod/redis2 created(MoeLove) ➜ kubectl get podsNAME READY STATUS RESTARTS AGEredis 1/1 Running 0 12mredis2 1/1 Running 0 2m23s
执行 kubectl alpha events
能够看到以后 namespace 下的所有 events 。如果减少 --for
条件能够用来筛选只展现特定资源相干的 events 。同时 默认状况下就是按工夫排序的
(MoeLove) ➜ kubectl alpha eventsLAST SEEN TYPE REASON OBJECT MESSAGE12m Normal Scheduled Pod/redis Successfully assigned default/redis to kind-control-plane12m Normal Pulling Pod/redis Pulling image "ghcr.io/tao12345666333/redis:alpine"12m Normal Pulled Pod/redis Successfully pulled image "ghcr.io/tao12345666333/redis:alpine" in 4.028873745s12m Normal Created Pod/redis Created container redis12m Normal Started Pod/redis Started container redis3m5s Normal Scheduled Pod/redis2 Successfully assigned default/redis2 to kind-control-plane3m5s Normal Pulled Pod/redis2 Container image "ghcr.io/tao12345666333/redis:alpine" already present on machine3m4s Normal Created Pod/redis2 Created container redis23m4s Normal Started Pod/redis2 Started container redis2(MoeLove) ➜ kubectl alpha events --for pod/redis2LAST SEEN TYPE REASON OBJECT MESSAGE3m23s Normal Scheduled Pod/redis2 Successfully assigned default/redis2 to kind-control-plane3m23s Normal Pulled Pod/redis2 Container image "ghcr.io/tao12345666333/redis:alpine" already present on machine3m22s Normal Created Pod/redis2 Created container redis23m22s Normal Started Pod/redis2 Started container redis2
IPv4/IPv6 双栈反对达到 GA
在配置双栈网络的 Kubernetes 时,须要同时指定 --node-cidr-mask-size-ipv4
和 --node-cidr-mask-size-ipv6
以便于设置每个 Node 上的子网大小。在此之前咱们都是间接应用 --node-cidr-mask-size
进行设置即可。
如果咱们依然应用单栈 Kubernetes 集群的话,失常来说不须要做什么调整,当然咱们也能够应用下面提到的选项,来独自设置集群的 IPv4/IPv6 子网。
PodSecurity Admission 达到 Beta
PodSecurity Admission 是之前的 PSP 的代替,对于 Kubernetes Admission 能够参考我之前的文章 《理清 Kubernetes 中 Admission 机制》,这里就不开展了。
IngressClass 反对 namespace 级别的参数
IngressClass.Spec.Parameters.Namespace
字段以后达到 GA ,这样咱们就能够为 IngressClass 设置参数为 namespace 级别了。比方:
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: external-lb spec: controller: example.com/ingress-controller parameters: apiGroup: k8s.example.com kind: IngressParameters name: external-lb namespace: external-configuration scope: Namespace
Probe 中减少 gRPC 协定的反对
通过 KEP #2727 ,在此版本中为 Pod.Spec.Container.{Liveness,Readiness,Startup} 的 Probe 增加了 gRPC 协定的反对。 例如:
readinessProbe: grpc: port: 9090 service: moelove-service initialDelaySeconds: 5 periodSeconds: 10
可通过 GRPCContainerProbe
feature gate 开启此个性。具体细节可参考 #106463
新增 OpenAPI V3
这个个性是 Alpha 级别,可通过 OpenApiv3
feature gate 进行开启。
减少此个性次要是因为 CRD 目前可通过 OpenApi V3 进行定义,然而 api-server 目前还不反对。当从 OpenApi V3 转换为 V2 时,局部信息将会失落。
更多详细信息可参考 KEP #2896
CRD Validation 表达式语言
这是一项 Alpha 级别的个性,默认是不开启的。可通过减少 CustomResourceValidationExpressions
feature gate 来进行开启。独自介绍此 Alpha 级别的个性是因为目前基于 Custom Resource Definitions (CRDs) 的形式对 Kubernetes 进行扩大曾经成为支流,然而在 CRD 中目前能增加的校验规定无限,更多的场景都须要通过额定的 Admission 来实现。
此性能应用一种叫做 Common Expression Language (CEL) 的语言进行规定定义,通过 x-kubernetes-validation-rules
字段进行规定的增加。
例如,某个 CRDs 的内容如下,其中定义了 minReplicas
小于 replicas
并且 replicas
小于 maxReplicas
。
...openAPIV3Schema: type: object properties: spec: type: object x-kubernetes-validation-rules: - rule: "self.minReplicas <= self.replicas" message: "replicas should be greater than or equal to minReplicas." - rule: "self.replicas <= self.maxReplicas" message: "replicas should be smaller than or equal to maxReplicas." properties: ... minReplicas: type: integer replicas: type: integer maxReplicas: type: integer required: - minReplicas - replicas - maxReplicas
那么,当有如下的自定义资源创立时,Kubernetes 将会回绝其申请。
apiVersion: "stable.example.com/v1"kind: CustomDeploymentmetadata: name: my-new-deploy-objectspec: minReplicas: 0 replicas: 20 maxReplicas: 10
并且返回如下谬误:
The CustomDeployment "my-new-deploy-object" is invalid:* spec: Invalid value: map[string]interface {}{"maxReplicas":10, "minReplicas":0, "replicas":20}: replicas should be smaller than or equal to maxReplicas.
这样相比原来咱们通过 Admission 的形式来进行校验就会不便的多。对于 Kubernetes Admission 能够参考我之前的文章 《理清 Kubernetes 中 Admission 机制》。
HPA v2 API 达到 GA
HPA v2 大概是在 5 年前首次提出,通过这 5 年的倒退,终于在当初它达到了 GA 级别。
以上就是对于 Kubernetes v1.23 中我认为值得关注的一些次要个性,更多信息可参阅其 ReleaseNote
欢送订阅我的文章公众号【MoeLove】