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

查看官网,按照 官方的格式 修改配置:

image

修改如下:

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 ,还是报错。加引号,也没用。

查看日志,也没有太多信息。

折腾了许久,也没太大进展。于是就查看源码了。

3 查看源码


3.1 源码下载


下载了 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

3.2 添加日志


查看源码,也看不出为何配置没有生效,于是在关键点打些日志出来看看。找到发布 Task 的入口:

KubernetesTaskLauncher#launch(AppDeploymentRequest)

即类 KubernetesTaskLauncherlaunch 方法。开始追踪创建 Kubernetes Pod 的过程。

KubernetesTaskLauncher#launch(AppDeploymentRequest)

KubernetesTaskLauncher#launch(String, AppDeploymentRequest)

AbstractKubernetesDeployer#createPodSpec

DeploymentPropertiesResolver#getAffinityRules

然后在整个调用链增加日志打印,注意日志要加上特殊字符串,增加识别性,如:

logger.info(“pkslow log:” + affinity.toString());

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐