전체 글에 해당하는 글 77

[k8s] Argo

Server/k8s|2020. 2. 20. 19:27

업무상 필요에 의해 

Container 기반 WorkFlow 엔진을 알아볼 필요가 있었습니다.

(배치의 Flow에 활용할까? 하는 부분 때문이죠)

 

물론 짧은 시간동안 알아봤기 때문에 깊이는 부족하지만 기억력이 좋지 않아 글로 남깁니다.

 

Argo(프로젝트 중 WorkFlow, https://github.com/argoproj/argo

vs

AirFlow(https://airflow.apache.org/)

 

Argo는 Container 기반, 즉 단계마다 KubeContainer를 각각 띄움

 

AirFlow는 AirFlow 서버가 떠있다 가정하고(airflow scheduler) 동작하는것으로 보여

필요한것은 Kube 기반이 필요했기 때문에 Argo를 살펴봤습니다.

 

Argo는 KubeFlow에도 활용되고 오픈소스 컨테이너 워크 플로우로 

Go로 작성 되어있습니다.

 

설치하는 부분을 살펴보면 workFlow를 처리하기 위한 커스텀 컨트롤러(workflow-controller) 를 설치하는 부분들이 나오고

(https://argoproj.github.io/docs/argo/docs/getting-started.html)

 

실제 workFlow를 사용하는것도 yaml파일에 kind를 Workflow(커스텀 리소스)를 활용해서 동작합니다.

 

Argo는 WorkFlow 기능을 제공하는 만큼 다양한 기능들을 제공하는데

(https://argoproj.github.io/docs/argo/examples/README.html)

단순 Flow를 위한 Step이나 더 복잡한 flow처리를 위한 DAG, 

종료에 따른 Flow처리를 위한 Condition 등 많은 기능들을 살펴보고 있는데

(사실.. 이 각 부분은 추가로 살펴볼 부분이...없...)

 

추가로 살펴볼 예정인것은 artifact 부분인데, 앞에 실행한 output 들에 대해

다른 Job을 처리시 넘겨주거나 할때 artifact를 통해 처리하는것 같아 보이고

(아직은 확실하지는 않지만..)

artifact storage로 'Minio'(Open Source Object Storage server) 라는 것들 지원한다고 합니다..

 

음.. 오브젝트 스토리지라...

저장소긴 한데.. Minio가 뭘해주는지 Job간 어떻게 데이터를 전달하는지 추가로 봐야할듯 합니다..

 

일단은.. 여기까지..

 

 

 

 

'Server > k8s' 카테고리의 다른 글

[k8s] Argo 설치 후 살펴본 기능들  (0) 2020.03.11
[k8s] MINIO  (0) 2020.02.21

댓글()

[MSA] sidecar 패턴

JAVA/Spring|2020. 1. 13. 19:41

개인적으로 개발할때는 Spring만 사용해왔기 때문에 Sprin Cloud는 살펴보곤 했지만

폴리글랏은 고려하지 않았기 때문에 다른것들은 살피지 않았습니다.

 

하지만, 최근에 회사에서 istio 라는 서비스 매쉬 패턴을 구현한 시스템? 을 살펴볼일이 있었습니다.

 

해당 시스템은 폴리글랏을 지원하기 위하여 각각의 언어별로 라이브러리를 제공하는 형식이 아닌

SideCar 패턴(Cloud 기능을 갖은 프로세스이며, Proxy 역할을 하는 프로세스)을 통해 Cloud 기능들을 언어 상관없이

지원하는 방향으로 설계 된것을 살펴보며 

자바에 거의 한정된 netflix oss가 아닌 istio가 인기있을만하다는 생각을 하며

 

그렇다면 "netflix oss에는 sidecar 패턴 구현체가 없나? 아니면 고려한 부분이 없나?"라는 생각으로 검색을 해보았습니다.

(필요시 없으면 그냥 SpirngBoot App 하나로 Proxy 형식으로 하나 만들면 되겠다는 생각도 하기도 했습니다)

 

그런데... 역시 있군요..

https://cloud.spring.io/spring-cloud-netflix/multi/multi__polyglot_support_with_sidecar.html

 

 

9. Polyglot support with Sidecar

9. Polyglot support with Sidecar Do you have non-JVM languages with which you want to take advantage of Eureka, Ribbon, and Config Server? The Spring Cloud Netflix Sidecar was inspired by Netflix Prana. It includes an HTTP API to get all of the instances (

cloud.spring.io

신기술 마냥 이제서야 접했지만 역시 세상은 넓다는걸 경험했습니다..;;

 

추후 istio관련 이야기가 지속된다면 각각 학습한 내용? 정리할 내용들을 시간이 되면 포스팅할것 같습니다

 

'JAVA > Spring' 카테고리의 다른 글

[JPA] LockType  (0) 2020.07.23
[Spring] LifeCycle, SmartLifeCycle  (0) 2020.06.23
[SpringConfig] Properties 암호화  (0) 2019.12.24
spring boot log level 변경(actuator)  (0) 2019.12.19
reactor Schedulers  (0) 2019.12.16

댓글()

java.util.function 인터페이스

JAVA|2019. 12. 30. 19:24

함수 참조시 주로 나오는 function type

중요 인터페이스 6가지

  • UnaryOperator

    • 받은 타입 그대로 리턴
    • ex) String.trim
  • BinaryOperator

    • 받은타입 그대로 리턴 하나, 인자가 두개
    • ex) Integer.add
  • Predicate

    • 인자를 받아, boolean을 리턴
    • ex) Strings.isEmpty
  • Function<T,R>

    • 인자 타입과 리턴타입이 다를경우
    • ex) List.get
  • Supplier

    • 인자는 없고, 리턴만 있는경우
    • ex) List.size
  • Consumer

    • 인자는 있고, 리턴은 없는경우
    • ex) System.out.println

    다 제네릭을 사용하고 있어서 primitive 타입을 바로 활용하기 어려워 보이지만
    primitive를 활용하기 위해서 별도의 인터페이스들을 제공합니다.
    예) UnaryOperator 에서 int를 사용하기 위해서는 IntUnaryOperator
    예) Predicate 에서 long를 사용하기 위해서는 LongPredicate

'JAVA' 카테고리의 다른 글

Java Time  (0) 2020.07.06
SortedQueue...  (0) 2020.07.02
JEP 218: Generics over Primitive Types  (0) 2019.12.10
[CompletableFuture][#3] 메소드 정리-1  (0) 2019.09.01
[Quartz] Trigger  (0) 2019.07.10

댓글()

[SpringConfig] Properties 암호화

JAVA/Spring|2019. 12. 24. 19:15

현재 토이 프로젝트에 Spring Cloud Config Server를 덕분에 설정을 편하게 사용하고 있습니다.

(config repo는 github를 사용하고 있는데 잘 되네요, 내역 관리도 되고 github 들어가서 수정하기도 편하니)

 

그런데 설정중에 암호에 대한 설정들이 있습니다.

 

현재는 혼자서 개발중이기 때문에 문제 없지만 공용 repo에 암호를 그대로 노출한다는게 조금 찝찝함은 있습니다.

 

그래서 미뤄놓았던것중 하나인 설정 암호화를 적용하려고 합니다.

 

설정 암호화는

https://github.com/ulisesbocchio/jasypt-spring-boot

 

ulisesbocchio/jasypt-spring-boot

Jasypt integration for Spring boot. Contribute to ulisesbocchio/jasypt-spring-boot development by creating an account on GitHub.

github.com

에 올라와있는 jasypt-spring-boot를 사용하여 처리하려고 합니다.

 

간단히 pom.xml에 해당 의존성을 추가하고

(최신버전이 3.0.0이네요)

<dependency>
      <groupId>com.github.ulisesbocchio</groupId>
      <artifactId>jasypt-spring-boot-starter</artifactId>
      <version>3.0.0</version>
    </dependency>

 

properties에 암호화 키를

jasypt.encryptor.password= xxx 로 설정합니다.

 

그후에 StringEncryptor로 

 

    @Autowired
    StringEncryptor encryptor;

    @Test
    public void test(){

        String defaultStr = "aa131";

        String encrytStr = encryptor.encrypt(defaultStr);

        System.out.println("encrytStr : " + encrytStr);

        String decrytStr = encryptor.decrypt(encrytStr);
        System.out.println("decrytStr : " + decrytStr);

//        System.out.println("encrypt : " + encryptor.encrypt("a"));

    }

와 같이 암호화된 패스워드를 구합니다.

(org.jasypt.exceptions.EncryptionOperationNotPossibleException 와 같은 에러가 발생할 수 있는데, 검색해보시면 oracle에서 JCE 파일을 받아서 해결하는 방법을 찾을수 있습니다.)

암호화된 패스워드를 ENC() 로 감싸서 설정합니다.

 

spring.data.mongodb.password=ENC(xxxxxx)
jasypt.encryptor.password= xxx

설정을 변경후 기존 서버를 부팅시켜보면 정상적으로 동작하는것을 볼 수 있는데

 

같은 properties 파일에 암호키랑 암호화된 정보를 둘다 같고 있는건 조금 아니다 싶습니다.

 

그래서 어떻게 분리 시킬까 하다

저는 bootstrap.yml 에 

jasypt.encryptor.password 설정을 분리하고

properties에는 암호화된 값(ENC) 만 남겨 분리 했습니다.

jasypt:
  encryptor:
    password: xxxxxx

 

 

 

'JAVA > Spring' 카테고리의 다른 글

[Spring] LifeCycle, SmartLifeCycle  (0) 2020.06.23
[MSA] sidecar 패턴  (0) 2020.01.13
spring boot log level 변경(actuator)  (0) 2019.12.19
reactor Schedulers  (0) 2019.12.16
스프링 부트 2.2 릴리즈노트  (0) 2019.11.01

댓글()