【翻译】akka-cluster 部署于k8s(一)

总文章
在准备生产时,我们需要做两件主要的事情:

  1. 编写 Kubernetes 部署规范
  2. 配置我们的 Akka 群集应用程序

部署规范

在 kubernetes/akka-cluster.yaml 中创建部署规范。以下配置使用:
● Application name / Actor system name: appka
● Namespace: appka-1

为您的应用程序更改这些设置。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: appka
  name: appka
  namespace: appka-1
spec:
  replicas: 2
  selector:
    matchLabels:
      app: appka
  template:
    metadata:
      labels:
        app: appka
    spec:
      containers:
      - name: appka
        image: akka-sample-cluster-kubernetes-scala:latest
        readinessProbe:
          httpGet:
            path: /ready
            port: management
        livenessProbe:
          httpGet:
            path: /alive
            port: management
        ports:
        - name: management
          containerPort: 8558
          protocol: TCP
        - name: http
          containerPort: 8080
          protocol: TCP
        resources:
          limits:
            memory: 1024Mi
          requests:
            cpu: 2
            memory: 1024Mi

含义:
这是一个Kubernetes中的Deployment配置文件,用于部署一个名为"appka"的应用。以下是配置文件中各部分的解释:

  1. apiVersion:表示此配置文件的API版本为 apps/v1。
  2. kind:表示此配置文件对应的资源类型为Deployment。
  3. metadata:定义了Deployment的元数据,包括标签、名称和命名空间。
    • 标签(labels):用于识别和区分不同的资源,这里的标签为app: appka
    • 名称(name):表示Deployment的名称,为appka
    • 命名空间(namespace):表示Deployment所属的命名空间,为appka-1
  4. spec:定义了Deployment的规格,包括副本数量、选择器、模板等。
    • 副本数量(replicas):表示此Deployment的副本数量为2。
    • 选择器(selector):用于匹配运行在集群中的容器,这里的选择器为app: appka
    • 模板(template):定义了Deployment中的容器模板。
      • 元数据(metadata):用于识别和区分不同的容器,这里的元数据标签为app: appka
      • spec:定义了容器的规格,包括名称、image、读取性探测、存活探测、端口、资源限制等。
        • 名称(name):表示容器的名称,为appka
        • 镜像(image):表示容器使用的镜像为akka-sample-cluster-kubernetes-scala:latest
        • 读取性探测(readinessProbe):用于检测容器是否已准备好接受流量。
          • 探测方法(httpGet):HTTP GET 请求路径为/ready,端口为8558。
        • 存活探测(livenessProbe):用于检测容器是否处于运行状态。
          • 探测方法(httpGet):HTTP GET 请求路径为/alive,端口为8558。
        • 端口(ports):定义了容器暴露的端口。
          • 管理端口(management):名称為management,端口为8558,协议为TCP。
          • HTTP端口(http):名称為http,端口为8080,协议为TCP。
        • 资源限制(resources):限制容器所需的内存为1024Mi,CPU为2。
          总结:这个配置文件定义了一个名为"appka"的Deployment,包含2个副本,运行在命名空间appka-1中。
          容器使用akka-sample-cluster-kubernetes-scala:latest镜像,并暴露了两个端口,分别为8558(管理端口)和8080(HTTP端口)。
          容器还设置了读取性探测和存活探测,以确保其在运行状态下才能接收流量。
          资源限制为内存1024Mi和CPU 2

以下是一些需要注意的事项:

  • 我们正在使用 Kubernetes 部署。部署是 Pod的逻辑分组,代表使用相同模板的单个服务。它们支持可配置的滚动更新,这意味着集群将逐步升级,而不是一次性升级每个节点并导致中断。请务必咨询Kubernetes滚动更新以获取建议。
  • 我们将 pod 标记templateapp: appka。这必须与 ActorSystem 名称匹配,以便AkkaBootstrap找到集群中的其他节点。
  • 我们使用的镜像是akka-sample-cluster-kubernetes:latest.这对应于我们构建中的服务的名称和版本。我们将在下面讨论如何选择合适的版本号。
  • 我们只为该服务的 Pod 请求了最少的 CPU。这适用于本地部署,但如果要部署到实际部署,您可能希望增加它。请注意,我们还没有设置 CPU 限制,这是因为 建议 JVM 不要设置CPU 限制。
  • 我们已经配置了活性探针和就绪探针。这些是由 Akka Management 开箱即用的,稍后讨论。

镜像版本号

  • 我们为映像使用 latest 版本标签。不指定标签与使用最新标签相同。我们可以只指定 akka-sample-cluster-kubernetes,这与 akka-sample-cluster-kubernetes:latest 的含义相同。
  • 对于生产环境,使用最新标记是一种不好的做法。对于开发来说,它很方便,通常没问题。如果要部署到生产环境,建议将其替换为每次部署时更新的实际版本号。在本指南的“构建应用程序”部分中,我们将介绍如何配置构建以基于当前 git 提交哈希的版本号,这对于持续部署方案尤其有用,因为这意味着人工不需要参与选择唯一的版本号。生成映像后,可以获取该步骤中生成的版本号,并相应地更新规范中引用的映像。

你可能感兴趣的:(akka,kubernetes,容器,云原生,akka)