NAN*_*MAR 3 java spring-boot kubernetes minikube configmap
k8s 的新手。
尝试从基于配置文件的配置映射中读取值。我的 configmap 存在于默认命名空间中。但是,spring boot 并没有获取这些值。
配置图如下所示:
apiVersion: v1
kind: ConfigMap
metadata:
name: example-configmap-overriding-new-01
data:
application.properties: |-
globalkey = global key value
application-qa.properties: |-
globalkey = global key qa value
application-prod.properties: |-
globalkey = global key prod value
Run Code Online (Sandbox Code Playgroud)
配置映射也是在默认命名空间中创建的。
kubectl get configmap -n default
NAME DATA AGE
example-configmap-overriding-new-01 3 8d
Run Code Online (Sandbox Code Playgroud)
我的部署文件看起来像
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-configmapk8testing
spec:
selector:
matchLabels:
app: demo-configmapk8testing
replicas: 1
template:
metadata:
labels:
app: demo-configmapk8testing
spec:
containers:
- name: demo-configmapk8testing
image: Path to image
ports:
- containerPort: 8080
args: [
"--spring.profiles.active=prod",
"--spring.application.name=example-configmap-overriding-new-01",
"--spring.cloud.kubernetes.config.name=example-configmap-
overriding-new-01",
"--spring.cloud.kubernetes.config.namespace=default",
"--spring.cloud.kubernetes.config.enabled=true"]
envFrom:
- configMapRef:
name: example-configmap-overriding-new-01
Run Code Online (Sandbox Code Playgroud)
但是弹簧引导日志说:-
2019-07-02 22:10:38.092 WARN 1 --- [ main]
o.s.c.k.config.ConfigMapPropertySource : Can't read configMap with name:
[example-configmap-overriding-new-01] in namespace:[default]. Ignoring
2019-07-02 22:10:38.331 INFO 1 --- [ main]
b.c.PropertySourceBootstrapConfiguration : Located property source:
CompositePropertySource {name='composite-configmap', propertySources=
[ConfigMapPropertySource {name='configmap.example-configmap-overriding-new-
01.default'}]}
2019-07-02 22:10:38.420 INFO 1 --- [ main]
b.c.PropertySourceBootstrapConfiguration : Located property source:
SecretsPropertySource {name='secrets.example-configmap-overriding-new-
01.default'}
2019-07-02 22:10:38.692 INFO 1 --- [ main]
c.e.c.ConfigconsumerApplication : **The following profiles are
active: prod**
--some logs--
Injection of autowired dependencies failed; nested exception is
java.lang.IllegalArgumentException: **Could not resolve placeholder
'globalkey' in value "${globalkey}"**
Run Code Online (Sandbox Code Playgroud)
我的 spring boot 配置文件看起来像
@Configuration
public class ConfigConsumerConfig {
@Value(value = "${globalkey}")
private String globalkey;
// with getter and setters
}
Run Code Online (Sandbox Code Playgroud)
我的 pom.xml 也有以下依赖项。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-config</artifactId>
<version>1.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我在本地机器上运行 minikube。我在这里错过了什么吗?
有人可以在这里分享一些投入。
rae*_*tio 10
spring-cloud-kubernetes无权访问 Kubernetes API,因此无法读取 configMap。查看此文档以获取更多详细信息:https : //github.com/spring-cloud/spring-cloud-kubernetes/blob/master/docs/src/main/asciidoc/security-service-accounts.adoc。
简而言之,应用此配置,它将正常工作:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: YOUR-NAME-SPACE
name: namespace-reader
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["configmaps", "pods", "services", "endpoints", "secrets"]
verbs: ["get", "list", "watch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: namespace-reader-binding
namespace: YOUR-NAME-SPACE
subjects:
- kind: ServiceAccount
name: default
apiGroup: ""
roleRef:
kind: Role
name: namespace-reader
apiGroup: ""
Run Code Online (Sandbox Code Playgroud)
您可以在此处更详细地了解角色和角色绑定:https ://kubernetes.io/docs/reference/access-authn-authz/rbac/ 。
注意:您不必创建卷和卷挂载。我会说它是它的替代品。如果您想以这种方式使用它,则必须spring.cloud.kubernetes.config.paths
在 spring boot 应用程序配置中指定(我已将其写入bootstrap.yaml资源文件)。例如
spring:
cloud:
kubernetes:
config:
paths: /etc/config/application.yaml
Run Code Online (Sandbox Code Playgroud)
然后通过 Kubernetes 部署配置创建 ConfigMap 卷并将其挂载到该路径上。在我们的示例中,路径是/etc/config。
请让我知道这对你有没有用 :)
您能否尝试挂载您的配置映射,也许可以提供帮助
volumeMounts:
- mountPath: /app/config
name: example-configmap-overriding-new-01
volumes:
- name: example-configmap-overriding-new-01
configMap:
name: example-configmap-overriding-new-01
Run Code Online (Sandbox Code Playgroud)
如果有效请告诉我。谢谢
更正了语法错误
归档时间: |
|
查看次数: |
6167 次 |
最近记录: |