elastic-job-cloud-scheduler适应授权的mesos集群

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

生产环境配置framework的授权信息,没有授权的framework是无法接入到集群的。

最近在玩elastic-job-cloud,在启动scheduler的时候,报错,is not authenticated。

但是2.1.5版本的elastic-job-cloud-scheduler又没有相关的配置信息。

经过查看elastic-job-cloud-scheduler的源码,发现可以修改一点代码即可。

1、修改elastic-job-cloud-scheduler.properties,添加如下内容

# mesos framework authentication and authorization
mesos_framework_principal=wss-framework-user
mesos_framework_secret=wss-framework-password

 

2、修改com.dangdang.ddframe.job.cloud.scheduler.env.BootstrapEnvironment

在com.dangdang.ddframe.job.cloud.scheduler.env.BootstrapEnvironment.EnvironmentArgument添加两个枚举:

MESOS_FRAMEWORK_PRINCIPAL("mesos_framework_principal", "", false),
MESOS_FRAMEWORK_SECRET("mesos_framework_secret", "", false)

在BootstrapEnvironment中加两个get方法

public Optional getMesosFrameworkPrincipal(){
        String value = getValue(EnvironmentArgument.MESOS_FRAMEWORK_PRINCIPAL);
        if (Strings.isNullOrEmpty(value)) {
            return Optional.absent();
        }
        return Optional.of(value);
    }
    
    public Optional getMesosFrameworkSecret(){
        String value = getValue(EnvironmentArgument.MESOS_FRAMEWORK_SECRET);
        if (Strings.isNullOrEmpty(value)) {
            return Optional.absent();
        }
        return Optional.of(value);
    }

 

3、在方法的最后添加代码,修改com.dangdang.ddframe.job.cloud.scheduler.mesos.SchedulerService.getSchedulerDriver(TaskScheduler, JobEventBus, FrameworkIDService)

// 新添加的代码
        Optional principal = env.getMesosFrameworkPrincipal();
        Optional secret = env.getMesosFrameworkSecret();
        if(principal.isPresent() && secret.isPresent()){
            Protos.Credential credential = Protos.Credential.newBuilder().setPrincipal(principal.get())
                    .setSecret(secret.get())
                    .build();
            return new MesosSchedulerDriver(new SchedulerEngine(taskScheduler, facadeService, jobEventBus, frameworkIDService, statisticManager), frameworkInfo,
                    mesosConfig.getUrl(), credential);
        } else {
            // 原来的代码,构造器少了最后一个参数credential:即没有授权信息
            return new MesosSchedulerDriver(new SchedulerEngine(taskScheduler, facadeService, jobEventBus, frameworkIDService, statisticManager), frameworkInfo,
                    mesosConfig.getUrl());
        }

4、编译打包,把压缩包丢到服务器上运行即可

mvn clean install

转载于:https://my.oschina.net/u/2007041/blog/1790729

你可能感兴趣的:(elastic-job-cloud-scheduler适应授权的mesos集群)