总文章
在准备生产时,我们需要做两件主要的事情:
- 编写 Kubernetes 部署规范
- 配置我们的 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"的应用。以下是配置文件中各部分的解释:
apiVersion
:表示此配置文件的API版本为 apps/v1。kind
:表示此配置文件对应的资源类型为Deployment。metadata
:定义了Deployment的元数据,包括标签、名称和命名空间。- 标签(labels):用于识别和区分不同的资源,这里的标签为
app: appka
。 - 名称(name):表示Deployment的名称,为
appka
。 - 命名空间(namespace):表示Deployment所属的命名空间,为
appka-1
。
- 标签(labels):用于识别和区分不同的资源,这里的标签为
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。
- 探测方法(httpGet):HTTP GET 请求路径为
- 存活探测(livenessProbe):用于检测容器是否处于运行状态。
- 探测方法(httpGet):HTTP GET 请求路径为
/alive
,端口为8558。
- 探测方法(httpGet):HTTP GET 请求路径为
- 端口(ports):定义了容器暴露的端口。
- 管理端口(management):名称為
management
,端口为8558,协议为TCP。 - HTTP端口(http):名称為
http
,端口为8080,协议为TCP。
- 管理端口(management):名称為
- 资源限制(resources):限制容器所需的内存为1024Mi,CPU为2。
总结:这个配置文件定义了一个名为"appka"的Deployment,包含2个副本,运行在命名空间appka-1
中。
容器使用akka-sample-cluster-kubernetes-scala:latest
镜像,并暴露了两个端口,分别为8558(管理端口)和8080(HTTP端口)。
容器还设置了读取性探测和存活探测,以确保其在运行状态下才能接收流量。
资源限制为内存1024Mi和CPU 2
- 名称(name):表示容器的名称,为
- 元数据(metadata):用于识别和区分不同的容器,这里的元数据标签为
以下是一些需要注意的事项:
- 我们正在使用
Kubernetes
部署。部署是 Pod的逻辑分组,代表使用相同模板的单个服务。它们支持可配置的滚动更新,这意味着集群将逐步升级,而不是一次性升级每个节点并导致中断。请务必咨询Kubernetes滚动更新
以获取建议。 - 我们将 pod 标记
template
为app: 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 提交哈希的版本号,这对于持续部署方案尤其有用,因为这意味着人工不需要参与选择唯一的版本号。生成映像后,可以获取该步骤中生成的版本号,并相应地更新规范中引用的映像。