elastic-job-cloud-scheduler適應受權的mesos集羣

生產環境配置framework的受權信息,沒有受權的framework是沒法接入到集羣的。服務器

最近在玩elastic-job-cloud,在啓動scheduler的時候,報錯,is not authenticated。ui

可是2.1.5版本的elastic-job-cloud-scheduler又沒有相關的配置信息。ip

通過查看elastic-job-cloud-scheduler的源碼,發現能夠修改一點代碼便可。ci

一、修改elastic-job-cloud-scheduler.properties,添加以下內容get

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

 

二、修改com.dangdang.ddframe.job.cloud.scheduler.env.BootstrapEnvironmentio

在com.dangdang.ddframe.job.cloud.scheduler.env.BootstrapEnvironment.EnvironmentArgument添加兩個枚舉:編譯

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

在BootstrapEnvironment中加兩個get方法集羣

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

 

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

// 新添加的代碼
        Optional<String> principal = env.getMesosFrameworkPrincipal();
        Optional<String> 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());
        }

四、編譯打包,把壓縮包丟到服務器上運行便可

mvn clean install

相關文章
相關標籤/搜索