Skip to content
89 changes: 89 additions & 0 deletions docs/zh/client/java-sdk-user-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,8 @@ request.timeout=2000
batch=2000
```

> 注:部署在Kubernetes环境使用configmap缓存模式时,也会同时开启本地文件缓存以进一步提高可用性

#### 1.2.3.1 自定义缓存路径

1.0.0版本开始支持以下方式自定义缓存路径,按照优先级从高到低分别为:
Expand Down Expand Up @@ -398,6 +400,93 @@ apollo.label=YOUR-APOLLO-LABEL
3. 通过`app.properties`配置文件
* 可以在`classpath:/META-INF/app.properties`指定`apollo.override-system-properties=true`

#### 1.2.4.10 ConfigMap缓存设置

> 适用于2.4.0及以上版本

在2.4.0版本开始,客户端在Kubernetes环境下的可用性得到了加强,开启configMap缓存后,客户端会将从服务端拉取到的配置信息在configMap中缓存一份,在服务不可用,或网络不通,且本地缓存文件丢失的情况下,依然能从configMap恢复配置。以下是相关配置

> 由于需要对configmap进行读写操作,所以客户端所在pod必须有相应读写权限,具体配置方法可参考下文

`apollo.cache.kubernetes.enable`:是否启动configMap缓存机制,默认false

`apollo.configmap-namespace`:将使用的configMap所在的namespace(Kubernetes中的namespace),默认值为"default"

配置信息会以下面的对应关系放置于指定的configmap中:

namespace:使用指定的值,若未指定默认为"default"

configMapName:{appId}

key:{cluster}+{namespace}

value:内容为对应的配置信息的json格式字符串


> appId是应用自己的appId,如100004458
> cluster是应用使用的集群,一般在本地模式下没有做过配置的话,是default
> namespace就是应用使用的配置namespace,一般是application

如何授权一个Pod的Service Account具有对ConfigMap的读写权限:
1. 创建Service Account: 如果还没有Service Account,你需要创建一个。
```apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
namespace: my-namespace
```
2. 创建Role或ClusterRole: 定义一个Role或ClusterRole,授予对特定ConfigMap的读写权限。如果ConfigMap是跨多个Namespace使用的,应该使用ClusterRole。

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: my-namespace
name: configmap-reader
rules:
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["get", "watch", "list", "update", "patch"]
```
3. 绑定Service Account到Role或ClusterRole: 使用RoleBinding或ClusterRoleBinding将Service Account绑定到上面创建的Role或ClusterRole。
```
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: configmap-reader-binding
namespace: my-namespace
subjects:
- kind: ServiceAccount
name: my-service-account
namespace: my-namespace
roleRef:
kind: Role
name: configmap-reader
apiGroup: rbac.authorization.k8s.io
```
1. 在Pod配置中指定Service Account: 确保Pod的配置中使用了上面创建的Service Account。
```
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
spec:
serviceAccountName: my-service-account
containers:
- name: my-container
image: my-image
```
1. 应用配置: 使用kubectl命令行工具应用这些配置。
```
kubectl apply -f service-account.yaml
kubectl apply -f role.yaml
kubectl apply -f role-binding.yaml
kubectl apply -f pod.yaml
```
这些步骤使Pod中的Service Account具有对指定ConfigMap的读写权限。

如果ConfigMap是跨Namespace的,使用ClusterRole和ClusterRoleBinding代替Role和RoleBinding,并确保在所有需要访问ConfigMap的Namespace中应用这些配置。
# 二、Maven Dependency
Apollo的客户端jar包已经上传到中央仓库,应用在实际使用时只需要按照如下方式引入即可。
```xml
Expand Down