Apache airflow 설치 중 사이드카 패턴을 확인하여 

한 번 살펴보았다.

스케줄러 파드안에서 여러개의 컨테이너가 동작하고 있었다.

airflow에 사용할 DAG 파일을 git에서 받아오고 공유하는데 사이드카 패턴이 사용되고 있었다.

 

 

원리는 이렇다.

1. git-sync 컨테이너가 DAG 파일을 /git 폴더에 받아온다

2. /git 폴더에 dags 라는 이름의 emptyDir를 마운트 시킨다.
=> /git 폴더와 dags 볼륨이 마운트 되어 위에서 받은 DAG 파일을 갖고 있다

3. emptyDir volume은 같은 파드 내부에 있는 컨테이너끼리는 마운트하면 공유할 수 있다

=> 스케줄러 컨테이너에서 /opt/airflow/dags 폴더와 dags 볼륨을 마운트하여 
결과적으로 /git 으로 받아온 DAG 파일을 스케줄러에서도 이용가능하게 된다.

 

특정 컨테이너에 받은 파일을 공유 하기 위해

파일이 위치한 디렉토리를 emptyDir 볼륨에 마운트하여

어떤 컨테이너든 그 emptyDir 볼륨에 마운트하면 그 파일을 사용할 수 있다.

1. 윈도우 powershell 관리자 권한으로 실행

 

2. 명령어 입력

Set-ExecutionPolicy Bypass -Scope Process -Force

3. 명령어 또 입력

Set-ExecutionPolicy Bypass -Scope Process -Force; `
[System.Net.ServicePointManager]::SecurityProtocol = `
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072; `
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

4. 설치 확인

choco --version

 

airflow webserver pod 구성도 이며 DAG파일들이 어떻게 이동하는지에 초점이 맞춰져 있다.

 

큰 흐름은 이렇다.

1. 파드 시작 시 initial-container에서 git clone으로 DAG파일 /git 폴더에 받아오기

2. /git 폴더에 입력된 데이터는 <dags-data>라는 empty Dir 볼륨에 마운트되어
     파드내의 모든 컨테이너에  <dags-data> 볼륨에 마운트하여 /git 폴더에 저장된 파일 공유가능

3. airflow-web 컨테이너의 /opt/airflow/dags 폴더와 <dags-data> 볼륨을 마운트하여 DAG파일 확인

ssh 연결을 이것저것 시도하던 중 알게 된게 ~/.ssh/config

 

그러다 ssh 클라이언트가 config를 어떻게 참조하는지 알아보았댜.

 

주로 git과 연결하기 위해 ssh 를 사용하다가 알아보게 되었다.

 

ssh git@gitlab.com -p 2200 -i ~/.ssh/id_rsa

 

이런 식으로 명령어를 사용하게 되는데

 

처음에는 명령어에 적힌 옵션을 먼저 반영한다.

 

이후에는 사용자의 ~/.ssh/config를 참조하고

 

사용자의 config 파일이 없으면 전체 시스템의 config 파일, /etc/ssh/ssh_config 파일을 참조한다.

 

 

 

Host my-server
    HostName 10.10.10.10
    User git
    Port 2200

 

.ssh/config 파일은 보통 이런 구성을 갖고 있다.

 

Host는 별칭이라고 보면 된다.

HostName 은 접속하려는 호스트 Url 이나 ip이다

User, Port는 접속하려는 사용자와 Port이다.

 

config 파일에 키를 등록 후

ssh my-server 

이런 식으로 별칭을 호출해서 간단하게 명령어를 사용할 수도 있다.

기존에 직접 제원정보를 명령어에 적지 않아도 되어 보안에 조금이나마 도움이 된다고 한다.

 

파일의 참조 순서와 적용 순서는 반대이다. ( )

 

참조 뒤에

/etc/ssh/ssh_config 값을 적용하고

이후에 ~/.ssh/config 값을 적용한다.

마지막으로 명령어에 적힌 옵션을 적용한다.

 

사용자의 config 파일을 읽을때

Host 를 먼저 확인한다.

이후 맞는 Host가 없는 경우 

<Host *>로 지정된 섹션의 설정을 따른다.

 

또한 특정 키를 지정할 수 있어서 여러 서버의 ssh 연결을 관리하기 용이하다.

 

Host *
   User normal
   Port 22

Host server1
    HostName 192.192.192.192
    User user1
    Port 2200
    IdentityFile ~/.ssh/id_rsa
    KexAlgorithms +diffie-hellman-group14-sha1
    
Host server2
    HostName gitlab.com
    User git
    Port 2201
    IdentityFile ~/.ssh/id_rsa_git

 

이런식으로 사용할 수 있다.

 

ssh-add 라는 녀석도 있다.

ssh key에 비밀번호를 입력해여 하는 경우

반복작업이 되지 않도록 ssh-add agent에 저장해서 한 번 입력 후에는 비밀번호를 입력하지 않아도 되는 기능이다.

 

 

+ Recent posts