被Spring坑了一把,查看源码终于解决了DataFlow部署K8s应用的问题
requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:matchExpressions:key: beta.kubernetes.io/osoperator: Invalues:linuxcontainers:name: php-apacheimage: ‘pkslow/hpa-example:latest’ports:c
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
-
matchExpressions:
-
key: beta.kubernetes.io/os
operator: In
values:
- linux
containers:
- name: php-apache
image: ‘pkslow/hpa-example:latest’
ports:
- containerPort: 80
protocol: TCP
resources:
requests:
cpu: 200m
imagePullPolicy: IfNotPresent
这样设置是可以成功部署的。
修改 Data Flow
的配置如下:
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
limits:
memory: 1024Mi
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
-
matchExpressions:
-
key: beta.kubernetes.io/os
operator: In
values:
- linux
datasource:
url: jdbc:mysql:// M Y S Q L S E R V I C E H O S T : {MYSQL_SERVICE_HOST}: MYSQLSERVICEHOST:{MYSQL_SERVICE_PORT}/mysql
username: root
password: ${mysql-root-password}
driverClassName: org.mariadb.jdbc.Driver
testOnBorrow: true
validationQuery: “SELECT 1”
通过 Spring Cloud Data Flow
发布 Task
,报错如下:
Pods in namespace pkslow can only map to specific nodes, status=Failure
查看官网,按照 官方的格式 修改配置:
修改如下:
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
limits:
memory: 1024Mi
affinity:
nodeAffinity: { requiredDuringSchedulingIgnoredDuringExecution: { nodeSelectorTerms: [ { matchExpressions: [ { key: ‘beta.kubernetes.io/os’, operator: ‘In’, values: [ ‘linux’]}]}]}}
依旧报错。改成 affinity.nodeAffinity=xxx
,还是报错。加引号,也没用。
查看日志,也没有太多信息。
折腾了许久,也没太大进展。于是就查看源码了。
下载了 Spring Cloud Data Flow 的源码,看了一下,没有多大用处,最终发布到 Kubernetes
是通过 Spring Cloud Deployer Kubernetes
来发布的,于是又下载了 它的源码 。要注意不要下载错了版本,我们用的是 2.4.0
版本。或者直接下载所有,然后切换到对应分支:
$ git clone https://github.com/spring-cloud/spring-cloud-deployer-kubernetes.git
Cloning into ‘spring-cloud-deployer-kubernetes’…
remote: Enumerating objects: 65, done.
remote: Counting objects: 100% (65/65), done.
remote: Compressing objects: 100% (46/46), done.
remote: Total 4201 (delta 26), reused 42 (delta 8), pack-reused 4136
Receiving objects: 100% (4201/4201), 738.79 KiB | 936.00 KiB/s, done.
Resolving deltas: 100% (1478/1478), done.
$ cd spring-cloud-deployer-kubernetes/
$ git branch
- master
$ git checkout 2.4.0
Branch ‘2.4.0’ set up to track remote branch ‘2.4.0’ from ‘origin’.
Switched to a new branch ‘2.4.0’
$ git branch
- 2.4.0
master
先 build
一下,确保成功:
$ mvn clean install -DskipTests
查看源码,也看不出为何配置没有生效,于是在关键点打些日志出来看看。找到发布 Task
的入口:
KubernetesTaskLauncher#launch(AppDeploymentRequest)
即类 KubernetesTaskLauncher
的 launch
方法。开始追踪创建 Kubernetes Pod
的过程。
KubernetesTaskLauncher#launch(AppDeploymentRequest)
KubernetesTaskLauncher#launch(String, AppDeploymentRequest)
AbstractKubernetesDeployer#createPodSpec
DeploymentPropertiesResolver#getAffinityRules
然后在整个调用链增加日志打印,注意日志要加上特殊字符串,增加识别性,如:
logger.info(“pkslow log:” + affinity.toString());
更多推荐
所有评论(0)