对于那些想直接跳过开胃菜,直奔主题的人来说,这里是 Kubernetes 厨房里正在烹饪的内容的快速概览:

  • 增强版的水平 Pod 自动扩展
  • 让你的微服务如歌般流畅的服务网格集成
  • 真正理解你应用状态的 StatefulSets(令人震惊,我知道)
  • 流畅的部署策略,让你的 CI/CD 管道羡慕不已
  • 让黑客望而却步的安全上下文
  • 基本上是你服务的交通警察的 API 网关
  • 比你的前任更持久的持久卷
  • 让你感觉像拥有 X 光视野的可观测性工具

感兴趣了吗?让我们深入了解这些 Kubernetes 的美味佳肴。

水平 Pod 自动扩展:现在有更多的扩展功能

还记得当扩展你的应用程序感觉像是在预测天气的日子吗?好吧,那些日子已经一去不复返了。Kubernetes 中的新水平 Pod 自动扩展器(HPA)就像是为你的基础设施需求提供了一个水晶球。

以下是新功能:

  • 多指标扩展:因为有时候 CPU 使用率并不能说明全部问题
  • 自定义指标支持:现在你可以根据只有你的团队关心的那个模糊指标进行扩展
  • 预测性扩展:就像 HPA 能看到未来(剧透:它不能,但已经非常接近了)

以下是如何使用多个指标设置 HPA 的快速示例:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-awesome-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-awesome-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
  - type: Pods
    pods:
      metric:
        name: packets-per-second
      target:
        type: AverageValue
        averageValue: 1k
  - type: Object
    object:
      metric:
        name: requests-per-second
      describedObject:
        apiVersion: networking.k8s.io/v1beta1
        kind: Ingress
        name: main-route
      target:
        type: Value
        value: 10k

通过这种设置,你的应用将根据 CPU 使用率、每秒数据包数和每秒请求数进行扩展。就像有一群高度兴奋的 DevOps 工程师不断监控你的系统,但没有咖啡的口气。

服务网格集成:因为微服务应该和谐共处

如果你曾觉得你的微服务之间的沟通问题比浪漫喜剧中的情侣还糟糕,Kubernetes 中的新服务网格集成将成为关系顾问。

2024 年 8 月的更新带来了与流行的服务网格解决方案(如 Istio、Linkerd 和 Consul)的更紧密集成。以下是你可以期待的内容:

  • 自动 sidecar 注入:不再需要手动配置的麻烦
  • 增强的流量管理:像专业人士一样路由流量,而不费吹灰之力
  • 改进的安全性:mTLS 无处不在,因为信任问题已经过时了
  • 更好的可观测性:以 4K 显示器的清晰度查看你的服务网格中发生的事情

以下是如何在 Kubernetes 集群中配置服务网格策略的预览:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews-route
spec:
  hosts:
  - reviews.prod.svc.cluster.local
  http:
  - match:
    - headers:
        end-user:
          exact: jason
    route:
    - destination:
        host: reviews.prod.svc.cluster.local
        subset: v2
  - route:
    - destination:
        host: reviews.prod.svc.cluster.local
        subset: v1

通过这种配置,你基本上是在告诉你的服务网格,“嘿,如果 Jason 发出请求,给他展示新版 v2 的评论服务。其他人都用 v1。”这就像为你的微服务设置了 VIP 通道。

StatefulSets:因为状态有时很重要

StatefulSets 一直是 Kubernetes 中的尴尬少年——必要但常常被误解。好吧,看起来 StatefulSets 终于在 2024 年 8 月的更新中迎来了它的成长。

新功能包括:

  • 动态卷配置:因为手动创建 PV 已经是 2023 年的事了
  • 高级更新策略:滚动更新真正理解你的应用程序状态
  • 改进的扩展:扩展或缩减时不再感觉像是在玩数据积木

以下是利用这些新功能的 StatefulSet 示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "fast"
      resources:
        requests:
          storage: 1Gi
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      partition: 1

这个 StatefulSet 不仅管理你的 nginx pods,还为每个副本自动配置存储。滚动更新策略确保你的更新像一台运转良好的机器一样顺畅。

部署策略:像忍者一样部署

不再是部署新版本的应用程序感觉像是在拆弹。2024 年 8 月的 Kubernetes 更新带来了如此复杂的部署策略,让你当前的 CI/CD 管道看起来像是用乐高积木搭建的。

新部署功能包括:

  • 增强的金丝雀部署:以外科手术般的精确度测试新版本
  • 蓝绿部署:切换版本比你说“回滚”还快
  • 流量分流:根据不只是随机机会将用户路由到不同版本

以下是金丝雀部署的示例:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: rollout-canary
spec:
  replicas: 5
  strategy:
    canary:
      steps:
      - setWeight: 20
      - pause: {duration: 1h}
      - setWeight: 40
      - pause: {duration: 1h}
      - setWeight: 60
      - pause: {duration: 1h}
      - setWeight: 80
      - pause: {duration: 1h}
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: rollout-canary
  template:
    metadata:
      labels:
        app: rollout-canary
    spec:
      containers:
      - name: rollouts-demo
        image: argoproj/rollouts-demo:blue
        ports:
        - name: http
          containerPort: 8080
          protocol: TCP

这个部署在几个小时内逐步增加新版本的流量,给你足够的时间在问题变成大问题之前发现它们。这就像有一个由云组成的安全网——柔软、蓬松且出奇地有效。

安全上下文:紧锁安全

在一个网络威胁如猫视频般常见的世界中,Kubernetes 提升了其安全游戏。2024 年 8 月更新中的新安全上下文就像给每个容器配备了自己的私人保镖。

关键安全改进包括:

  • 细粒度的 Pod 安全策略:因为在安全方面一刀切并不适用
  • 运行时类支持:以应有的安全设置运行你的容器
  • Seccomp 配置文件:限制系统调用并减少攻击面

以下是具有一些增强安全设置的 Pod 示例:

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
    seccompProfile:
      type: RuntimeDefault
  containers:
  - name: sec-ctx-demo
    image: busybox
    command: [ "sh", "-c", "sleep 1h" ]
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop:
          - ALL
      readOnlyRootFilesystem: true

这个 Pod 被锁定得比诺克斯堡还紧。它以非 root 用户身份运行,丢弃所有能力,甚至使根文件系统只读。黑客会看一眼这个然后决定还是回学校找份正经工作更容易。

Kubernetes API 网关:为你的服务进行流量控制

新的 Kubernetes API 网关就像是为你的服务配备了一个超级聪明的交通警察。它引导流量,检查身份,甚至知道一些魔术技巧以保持你的 API 平稳运行。

新的 API 网关功能包括:

  • 高级路由:每次都将请求发送到正确的地方
  • 内置身份验证和授权:阻止不速之客
  • 速率限制和节流:因为有时候好东西太多也是太多
  • WebSocket 支持:当 REST 不够用时

以下是 API 网关配置的示例:

apiVersion: gateway.networking.k8s.io/v1alpha2
kind: Gateway
metadata:
  name: my-gateway
  namespace: default
spec:
  gatewayClassName: example-gateway-class
  listeners:
  - name: http
    port: 80
    protocol: HTTP
    allowedRoutes:
      namespaces:
        from: Same
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: HTTPRoute
metadata:
  name: http-app-1
  namespace: default
spec:
  parentRefs:
  - name: my-gateway
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /app1
    backendRefs:
    - name: app1-svc
      port: 8080
  - matches:
    - path:
        type: PathPrefix
        value: /app2
    backendRefs:
    - name: app2-svc
      port: 8080

通过这种设置,你的 API 网关将根据 URL 路径将请求路由到不同的服务。这就像有一个接待员,无论你的办公室布局多么复杂,她总是知道该把你的电话转接到哪里。

持久卷:持久存在的数据

2024 年 8 月的更新为 Kubernetes 中的持久卷(PV)带来了一些重大改进。就像你的数据终于决定安定下来买房子,而不是住在行李箱里。

新的 PV 功能包括:

  • 改进的动态配置:在需要时获得所需的存储
  • 与云提供商的更好集成:你的云存储和 Kubernetes 现在是最好的朋友
  • 增强的数据保护:即使在事情出错时也能保护你的数据

以下是利用这些新功能的 StorageClass 示例:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd
  fstype: ext4
  replication-type: none
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

这个 StorageClass 不仅提供快速的 SSD 存储,还会等到 pod 实际需要时才创建卷。这就像是数据的准时制造。

可观测性和监控:为你的集群提供 X 光视野

Kubernetes 中的新可观测性功能就像给自己提供了超人的感官。你将能够看到、听到,几乎闻到你的集群中发生了什么。

关键的可观测性改进包括:

  • 增强的指标收集:比你能想象的更多的数据
  • 改进的日志记录:在日志的干草堆中找到那根针
  • 分布式追踪:像猎犬一样跟踪你的系统中的请求
  • 自定义资源指标:监控对你的应用程序重要的事情

以下是如何设置自定义指标收集的片段:

apiVersion: custom.metrics.k8s.io/v1beta1
kind: MetricDefinition
metadata:
  name: queue-depth
spec:
  group: myapp.example.com
  names:
    kind: QueueDepth
    plural: queuedepths
    singular: queuedepth
  scope: Namespaced
  validation:
    openAPIV3Schema:
      type: object
      properties:
        spec:
          type: object
          required: ["depth"]
          properties:
            depth:
              type: integer
              minimum: 0

通过这种设置,你现在可以收集和监控自定义指标,如应用程序中的队列深度。这就像为你的应用程序设置了一个任务控制中心,但不需要那些酷炫的 1960 年代耳机。

结论:未来光明(且容器化)

正如我们所见,2024 年 8 月的 Kubernetes 更新充满了让后端开发人员的生活更轻松、更高效,甚至更有趣的功能。从超级自动扩展到诺克斯堡级别的安全性,这些更新将彻底改变我们构建和部署应用程序的方式。

但未来会怎样?如果当前的趋势是任何迹象,我们可以期待:

  • 集群管理中更多的 AI 驱动自动化
  • 与边缘计算和物联网的更深层次集成
  • 更复杂的多集群和多云管理工具
  • 持续关注安全性和合规性功能

作为后端开发人员,现在是与 Kubernetes 一起工作的激动人心的时刻。这些新功能为我们提供了比以往更强大的工具来构建更具弹性、可扩展和可管理的应用程序。所以更新那些集群,重构那些部署,准备好乘坐 Kubernetes 的浪潮进入光明的容器化未来吧!

记住,能力越大,责任越大……还有很多 YAML 文件。编码愉快!