▷ Basic Info ...

    - MLOps에 대해서 공부를 하다보면 누구나 한 번 이상 꼭 듣게 되는 도구 ... Apache Airflow !!!

    - 공식 사이트를 방문해보면 바람개비와 함께 산뜻한 페이지가 반긴다.

        . https://airflow.apache.org/

 

https://airflow.apache.org/

 

    - 하지만, 우리같은(?) 도구쟁이들은 GitHub 사이트가 더 좋다 ^^

        . https://github.com/apache/airflow

 

https://github.com/apache/airflow

 

    - 최신병에 걸려있기 때문에(^^), 릴리즈 정보를 확인해봐야 한다.

        . https://airflow.apache.org/announcements/

 

https://airflow.apache.org/announcements/

 

▷ Prerequisites

    - 기본적으로 POSIX 호환 운영체제에서 Python만 있으면 설치는 가능하다.

        . Linux 배포판 및 MacOS가 기본적인 지원 운영체제이지만

        . WSL2에서도 실행은 가능하다. 다만, 주력 지원 환경은 아니기에 Production 환경으로는 추천하지 않는다.

        . Kubernetes 환경에서 동작 가능한 것이지 설치할 때 필수 환경은 아니다.

 

    - 메모리는 최소 4GB 이상이 필요하다.

 

    - 설치할 때 SQLite를 같이 포함해서 설치를 진행할 수 있지만, Production에서는 별도 DB 구성을 추천한다.

 

https://airflow.apache.org/docs/apache-airflow/2.9.0/installation/prerequisites.html

 

▷ Environments

    - 설치 과정을 함께할 운영체제는 Ubuntu 20.04 환경이다.

        . Airflow는 Debian 계열하고 제일 친한 것 같다. 그렇다면 Ubuntu가 최선이지 않을까!?

 

❯ lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal

 

    - 일단 메모리 상황을 점검해보자.

        . 메모리는 마음대로 할 수 있는 것이 아니니 부족하다면... 다른 서버를 찾아야 한다 ㅠ

 

❯ free -h

                  total        used          free       shared    buff/cache   available
Mem:       7.8Gi       679Mi       6.4Gi          13Mi          677Mi        6.8Gi
스왑:        2.0Gi          0B         2.0Gi

 

    - Python 버전을 확인해보자.

        . Python 버전 관리를 위해서는 Pyenv를 사용하는 것을 권장합니다 !!!

        . https://www.whatwant.com/entry/pyenv

 

❯ pyenv --version   

pyenv 2.3.9-11-g3d83bcdb


❯ python --version

Python 3.8.16

 

▷ Install #1 - PyPI + venv

    - Apache Airflow를 설치하는 여러 방법이 있는데,

      PyPI를 이용하는 방법과 Docker를 이용하는 방법에 대해서 살펴보고자 한다.

 

① pyenv

    - Python 3.10 버전 환경에서 설치를 해보고자 한다.

    - pyenv를 이용해서 원하는 버전을 설치하도록 하겠다.

 

❯ pyenv versions  

  system
* 3.8.16 (set by /home/chani22/.pyenv/version)

# 사용하고자 하는 버전이 설치되어 있는지 확인


❯ pyenv install -l

Available versions:
  2.1.3
  2.2.3
...

# 설치가 가능한 버전 확인


❯ pyenv install 3.10.9

Downloading Python-3.10.9.tar.xz...
-> https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tar.xz
Installing Python-3.10.9...
Installed Python-3.10.9 to /home/chani22/.pyenv/versions/3.10.9

 

② workspace / venv

    - Airflow를 설치할 디렉토리를 확보하고,

    - Python venv를 이용하여 가상환경까지 생성해보자.

 

❯ mkdir airflow

❯ cd airflow

❯ pyenv local 3.10.9 

❯ python -m venv .venv

❯ ls -al

합계 16
drwxrwxr-x 3   chani22 chani22 4096  4월 29 01:18 .
drwxr-xr-x 3    chani22 chani22 4096  4월 29 01:16 ..
-rw-rw-r-- 1      chani22 chani22      7  4월 29 01:16 .python-version
drwxrwxr-x 5   chani22 chani22 4096  4월 29 01:18 .venv

❯ source .venv/bin/activate

 

③ ENV

    - 설치에 필요한 정보들을 위해서 환경 변수들을 설정해준다.

    - "/srv/install/airflow" 디렉토리는 위에서 만들어 놓은 것을 사용해도 된다.

    - "AIRFLOW_VERSION"은 지금 현재 가장 최신 버전을 선택했다.

    - "PYTHON_VERSION"의 경우에 그냥 명시적으로 "3.10"이라고 설정해버려도 된다.

    - "CONSTRAINT_URL" 역시 그냥 명시적으로 버전을 지정할 수도 있다.

 

❯ export AIRFLOW_HOME=/srv/install/airflow

❯ export AIRFLOW_VERSION=2.9.0

❯ export PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"

❯ export CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"


❯ echo $PYTHON_VERSION

3.10


❯ echo $CONSTRAINT_URL

https://raw.githubusercontent.com/apache/airflow/constraints-2.9.0/constraints-3.10.txt

 

④ install

    - 준비 끝. 설치 시작!

 

❯  pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

...


❯ pip list | grep airflow                                                          

apache-airflow                                          2.9.0
apache-airflow-providers-common-io       1.3.0
apache-airflow-providers-common-sql     1.11.1
apache-airflow-providers-fab                    1.0.2
apache-airflow-providers-ftp                     3.7.0
apache-airflow-providers-http                   4.10.0
apache-airflow-providers-imap                 3.5.0
apache-airflow-providers-smtp                 1.6.1
apache-airflow-providers-sqlite                3.7.1

 

⑤ DB init

    - 그냥 실행하는 방법도 있지만, 하나씩 차근차근 셋업하는 것을 추천한다.

 

❯ airflow db migrate

DB: sqlite:////srv/install/airflow/airflow.db
Performing upgrade to the metadata database sqlite:////srv/install/airflow/airflow.db
[2024-04-29T02:20:10.674+0900] {migration.py:216} INFO - Context impl SQLiteImpl.
[2024-04-29T02:20:10.710+0900] {migration.py:219} INFO - Will assume non-transactional DDL.
[2024-04-29T02:20:10.713+0900] {migration.py:216} INFO - Context impl SQLiteImpl.
[2024-04-29T02:20:10.714+0900] {migration.py:219} INFO - Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running stamp_revision  -> 1949afb29106
Database migrating done!

 

⑥ make admin account

    - 관리자 계정을 만들어주자.

    - "--role Admin" 부분만 잘 지켜주고, 나머지는 각자 취향대로.

 

❯ airflow users create --username whatwant --firstname whatwant --lastname boss --role Admin --email whatwant@whatwant.com

...
Password:
Repeat for confirmation:
[2024-04-29T02:31:53.165+0900] {override.py:1516} INFO - Added user whatwant
User "whatwant" created with role "Admin"

 

⑦ run

    - 이제 웹 UI를 확인해보자.

 

airflow webserver --port 8080

 

    - 웹브라우저를 실행해서, 다음 주소로 접속하면 된다.

        . http://localhost:8080

 

http://localhost:8080/

 

    - 앞에서 생성한 계정과 패스워드를 이용해서 Sign in 하면 된다.

 

http://localhost:8080/

 

    - 뭔가 화면은 나왔는데, 위에 뭔가 알람이 많이 보인다.

 

⑧ notice

    - 어?! 그런데 뭔가 경고같은 메시지가 보인다.

 

notice

 

    - 가장 위에 있는 메시지를 보면 실행중인 "scheduler"가 안보인단다. 해결해보자.

 

⑨ scheduler

    - 새로운 터미널을 추가로 띄워서 scheduler를 실행하면 된다.

 

new terminal

 

   - 터미널을 새로 띄우면 Python 가상환경도 추가 설정해야 한다.

 

❯ cd airflow

# 앞에서 진행했던 airflow 디렉토리로 이동


❯ source .venv/bin/activate


❯ airflow scheduler

 

    - 웹브라우저를 reload(F5) 하면 갑자기 못보던 샘플 DAGs 가 보인다.

 

http://localhost:8080/home

 

    - 상단에 보이는 알람 메시지가 3개에서 2개로 줄어들었다.

    - 나머지 2개는 production 환경에서 SQLite나 SeuentialExecutor를 사용하지 말라는 메시지다. 일단 무시!

 

http://localhost:8080/dags/example_params_trigger_ui/grid?tab=graph

 

    - Sample을 하나 선택해서 살펴보면 뭔가 멋지다! ^^

 

 

▷ Install #2 - Docker + Compose

    - docker를 이용한 airflow 설치를 해보자.

    - 그냥 docker image를 이용한 실행말고, 여러 모듈들을 같이 구성하기 위해 docker compose를 사용하겠다.

    - https://airflow.apache.org/docs/apache-airflow/2.9.0/howto/docker-compose/index.html

 

① docker / docker-compose

    - docker 및 docker-compose가 설치되어 있어야 한다.

        . Ubuntu 20.04 기준으로 Quick-Guide는 다음과 같다.

 

❯ mkdir docker 

❯ cd docker      

❯ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/containerd.io_1.6.31-1_amd64.deb

❯ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-buildx-plugin_0.14.0-1\~ubuntu.20.04\~focal_amd64.deb

❯ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce-cli_26.1.1-1\~ubuntu.20.04\~focal_amd64.deb

❯ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce_26.1.1-1\~ubuntu.20.04\~focal_amd64.deb

❯ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-compose-plugin_2.27.0-1\~ubuntu.20.04\~focal_amd64.deb


❯ ls -al

합계 109212
drwxrwxr-x 2 chani22 chani22     4096  5월  1 10:31 .
drwxr-xr-x 4 chani22 chani22     4096  5월  1 10:29 ..
-rw-rw-r-- 1 chani22 chani22 29821672  4월 11 21:01 containerd.io_1.6.31-1_amd64.deb
-rw-rw-r-- 1 chani22 chani22 29650176  4월 30 01:48 docker-buildx-plugin_0.14.0-1~ubuntu.20.04~focal_amd64.deb
-rw-rw-r-- 1 chani22 chani22 14601364  5월  1 00:17 docker-ce-cli_26.1.1-1~ubuntu.20.04~focal_amd64.deb
-rw-rw-r-- 1 chani22 chani22 25267932  5월  1 00:17 docker-ce_26.1.1-1~ubuntu.20.04~focal_amd64.deb
-rw-rw-r-- 1 chani22 chani22 12478416  5월  1 00:17 docker-compose-plugin_2.27.0-1~ubuntu.20.04~focal_amd64.deb


❯ sudo dpkg --install containerd.io_1.6.31-1_amd64.deb 

❯ sudo dpkg --install docker-ce-cli_26.1.1-1\~ubuntu.20.04\~focal_amd64.deb 

❯ sudo dpkg --install docker-ce_26.1.1-1\~ubuntu.20.04\~focal_amd64.deb    

❯ sudo dpkg --install docker-buildx-plugin_0.14.0-1\~ubuntu.20.04\~focal_amd64.deb 

❯ sudo dpkg --install docker-compose-plugin_2.27.0-1\~ubuntu.20.04\~focal_amd64.deb 


sudo usermod -aG docker $USER

# 터미널 재시작


❯ docker --version

Docker version 26.1.1, build 4cf5afa


❯ docker compose version

Docker Compose version v2.27.0

 

② download YAML

    - airflow 설치 과정을 위한 디렉토리 만들고

    - docker-compose YAML 파일을 다운로드 받자

 

❯ mkdir airflow-docker

❯ cd airflow-docker

❯ wget https://airflow.apache.org/docs/apache-airflow/2.9.0/docker-compose.yaml

--2024-05-01 10:44:57--  https://airflow.apache.org/docs/apache-airflow/2.9.0/docker-compose.yaml
airflow.apache.org (airflow.apache.org) 해석 중... 151.101.2.132, 2a04:4e42::644
다음으로 연결 중: airflow.apache.org (airflow.apache.org)|151.101.2.132|:443... 연결했습니다.
HTTP 요청을 보냈습니다. 응답 기다리는 중... 200 OK
길이: 11197 (11K)
저장 위치: `docker-compose.yaml'

docker-compose.yaml                 100%[==========================================>]  10.93K  --.-KB/s    / 0s       

2024-05-01 10:44:57 (45.5 MB/s) - `docker-compose.yaml' 저장함 [11197/11197]

 

    - YAML 파일 내용을 살펴보면 알겠지만, 많은 서비스가 별도의 docker로 구성되어 있다.

        . airflow-scheduler

        . airflow-webserver

        . airflow-worker

        . airflow-triggerer

        . airflow-init

        . postgres

        . redis

 

    - 그래서 메모리가 충분히 필요한데, 최소 4GB / 권장 8GB 이다.

 

③ mkdir

    - 여러 종류의 파일들을 저장할 디렉토리들을 만들어 놓자.

        . ./dags - you can put your DAG files here.
        . ./logs - contains logs from task execution and scheduler.
        . ./config - you can add custom log parser or add airflow_local_settings.py to configure cluster policy.
        . ./plugins - you can put your custom plugins here.

 

❯ mkdir -p ./dags ./logs ./plugins ./config


❯ ls -al

합계 36
drwxrwxr-x 6 chani22 chani22  4096  5월  1 10:53 .
drwxr-xr-x 5 chani22 chani22  4096  5월  1 10:44 ..
drwxrwxr-x 2 chani22 chani22  4096  5월  1 10:53 config
drwxrwxr-x 2 chani22 chani22  4096  5월  1 10:53 dags
-rw-rw-r-- 1 chani22 chani22 11197  4월  8 20:42 docker-compose.yaml
drwxrwxr-x 2 chani22 chani22  4096  5월  1 10:53 logs
drwxrwxr-x 2 chani22 chani22  4096  5월  1 10:53 plugins

 

④ UID

    - airflow가 실행될 UID도 설정해주자.

 

❯ echo -e "AIRFLOW_UID=$(id -u)" > .env


❯ cat .env

AIRFLOW_UID=1000

 

⑤ Customizing

    - YAML 파일을 수정할 수도 있다.

    - port만 살짝 바꿔봤다. (각자 취향)

 

❯ nano docker-compose.yaml

 

⑥ Initialize the database

    - DB 초기화를 진행하자.

 

❯ docker compose up airflow-init

 

    - 잘 실행되면 아래와 같은 화면이 나온다.

 

❯ docker compose up airflow-init

 

    - 아래와 같이 Permission denied 상황이 나올 수도 있는데,

      sock 파일의 권한을 조정하거나 그래도 안되면 재부팅 한 번 해주면 잘 된다.

 

❯ docker compose up airflow-init

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dairflow-docker%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied


❯ sudo chown root:docker /var/run/docker.sock

 

    - 현재 상태를 확인해보면 다음과 같다.

 

❯ ls -al

합계 40
drwxrwxr-x 6 chani22 chani22  4096  5월  1 11:00 .
drwxr-xr-x 5 chani22 chani22  4096  5월  1 10:44 ..
-rw-rw-r-- 1 chani22 chani22    17  5월  1 10:55 .env
drwxrwxr-x 2 chani22 chani22  4096  5월  1 10:53 config
drwxrwxr-x 2 chani22 root     4096  5월  1 10:53 dags
-rw-rw-r-- 1 chani22 chani22 11197  5월  1 11:00 docker-compose.yaml
drwxrwxr-x 2 chani22 root     4096  5월  1 10:53 logs
drwxrwxr-x 2 chani22 root     4096  5월  1 10:53 plugins


❯ docker ps

CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS                   PORTS      NAMES
1dfae6410fa0   postgres:13    "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes (healthy)   5432/tcp   airflow-docker-postgres-1
466bc0539812   redis:latest   "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes (healthy)   6379/tcp   airflow-docker-redis-1

 

⑦ Run Airflow

    - 이제 Airflow를 실행하자.

 

  docker compose up

...

 

   - 뭔가 잔뜩 메시지가 흘러나온다.

 

❯ docker compose up

 

    - 웹브라우저를 열어서 접속해보자.

        . http://localhost:8090/

        . 접속 정보: airflow / airflow

 

http://localhost:8090/

 

    - 어!? 뭔가 되게 깔끔한 화면이 나온다.

 

http://localhost:8090/home

 

    - Container 정보를 살펴보자.

 

> docker ps

 

 

우와~~~~ 뭔가 엄청 길었다.

추가적으로 살펴볼 것이 많이 남아있지만 일단 "설치 후 실행"이라는 것에 주안점을 두었다.

 

"운영" 측면에서는 더 알아봐야할 것이 많겠지만 지금은 여기까지만~~~ ^^

반응형

'AI_ML > MLOps' 카테고리의 다른 글

Airflow remove Example DAGs (에어플로우 예제 삭제)  (0) 2024.05.04

kubeflow를 급히 써봐야 할 일이 있어서 minikube 환경에서 설치를 해보려고 했는데...

 

주위에 계신 어떤 한 분이 손쉽게 성공하셨다고 하셔서 나도 그렇게 될거라 믿고 해봤는데,

뭔가의 이유로 잘 진행이 되지 않아서 짜증이 솓구쳐서 결국은 Kubernetes 환경에서 진행했다.

 

 

이하 포스팅은 설치 가이드라기 보다는

Kubeflow 설치 성공한 과정에 대한 기록이다.

 

 

0. Kubernetes

- 다음 링크의 포스트와 동일한 방법으로 설치된 환경이다.

  . https://www.whatwant.com/entry/Kubernetes-Install-1

 

단, 이 때 Kubernetes를 설치한 3대 VM의 Spec은 좀 높여야 한다.

Memory가 부족하면 Kubeflow 설치가 안된다.

memory

 

Processor도 좀 더 잡아주는 것이 좋다.

CPU

 

처음에 4GB memory, 2 core 환경에서 Kubeflow 설치를 진행했을 때 제대로 진행이 안되었다.

 

일부 Pod가 pending 상태에 있길래 살펴봤었는데

자기가 실행될 여유 memory가 있는 worker node가 없어서 였다.

 

테스트가 쉽지 않아서 세부 Spec 조정까지는 못해봤고

8GB memory, 4 core 환경으로 했을 때 성공을 했다.

 

 

1. Kubeflow & Kubernetes version

 

현재 설치되어있는 Kubernetes version은 다음과 같다.

- Kubernetes v1.25.6

kubectl get nodes

 

현재 Kubeflow 최신 Version은 v1.7이다.

https://www.kubeflow.org/docs/releases/kubeflow-1.7/

Kubeflow v1.7

 

다행히 Kubernetes v1.25와 궁합이 잘 맞는다 !!!

 

 

2. How to install Kubeflow

뒤늦게 Kubeflow를 살펴본다 ^^

- https://www.kubeflow.org/

https://www.kubeflow.org/

 

공식 가이드에서 알려주는 설치법에는 어떤 것이 있을까?

How to install

 

① Use a packaged distribution

주로 Cloud 업체에서 maintain 하면서 제공되는 배포판들이다. 즉, 나에겐 쓸모없는....^^

Active Distributions

 

② Use the raw manifests

advanced user를 위한 설치 방법이란다 ^^

Raw Kubeflow Manifests

 

manifests는 GitHub를 통해 배포되고 있다.

- https://github.com/kubeflow/manifests#installation

https://github.com/kubeflow/manifests#installation

 

우리는 이제 manifests를 이용한 Kubeflow 설치를 진행할 것이다.

 

 

3. Prerequisites

앞에서 살펴봤듯이 3개의 사전 준비 항목이 있다.

 

① Kubernetes (up to 1.26) with a default StorageClass

- Kubernetes v1.25에서도 잘 된다 ^^

- 여기서 무심히 넘기면 안되는 항목이 default StorageClass 이다. 뒤에서 깊게 살펴보겠다!

 

② kustomize 5.0.3

Kubernetes native configuration management

최근에는 kubectl 내부에 포함되어 있다고 하는데, manifests를 사용하기 위해서는 별도로 설치를 해줘야 한다.

- https://kubectl.docs.kubernetes.io/installation/kustomize/binaries/

https://kubectl.docs.kubernetes.io/installation/kustomize/binaries/

 

❯ curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash

❯ sudo install -o root -g root -m 0755 kustomize /usr/local/bin/kustomize

 

가이드에서 요구한 버전은 v5.0.3 이지만, 설치된 버전은 v5.1.1이다.

잘된다 ^^

 

③ kubectl

kubernetes 버전과 동일한 버전의 kubectl을 사용하는 것이 좋다.

Kubernetes node가 아닌 다른 workspace에서 kubectl을 사용하기 위해서는 직접 설치를 해줘야 한다.

 

❯ curl -LO "https://dl.k8s.io/release/v1.25.6/bin/linux/amd64/kubectl"

❯ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

 

kubectl을 새로 설치했다면, 자동완성 설정을 해주는 것이 편리하다.

zsh을 사용하는 경우 아래와 같은 명령어를 사용하거나, ~/zshrc에 넣어주면 좋다.

 

 source <(kubectl completion zsh)

 

~/.zshrc 파일에서 plugin에도 추가로 넣어주면 더 좋다.

 

plugins=(kubectl kube-ps1 git zsh-syntax-highlighting zsh-autosuggestions)

 

접근 권한을 얻기 위한 인증 정보(config) 파일을 얻어오는 부분은 여기에서는 생략하겠다.

 

 

4. StorageClass

Kubeflow 설치 관련한 많은 포스팅에서 잘 언급해주지 않는 부분이 바로 이 부분이다.

 

Kubeflow 설치 과정에서 약 4개의 PV(PersistentVolume) 생성을 하게 된다.

- 10Gi 용량의 PV 2개

- 20Gi 용량의 PV 2개

 

60Gi 이상의 PV를 생성할 수 있는 환경이어야 하는 것이다.

 

처음에 간단히 설치한다고 낮은 Spec의 환경에서 설치 진행하면, 이런 부분 때문에 어려움을 겪게 된다.

나도 마찬가지였다. Worer Node의 Disk 용량을 충분히 잡아놓지 않았기 때문이다.

 

그래서, NFS를 이용해서 StorageClass 설정을 진행하기로 했다.

 

① NFS Server 설치

NFS Server를 만드는 방법은 다음 포스팅을 참고하기 바란다.

- https://www.whatwant.com/entry/NFS-Server-Ubuntu-1804

 

② NFS Provisioner

Kubernetes에서 NFS를 사용하기 위한 Provisioner를 설치하자.

- https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

 

Helm을 이용하려고 하는데, 혹시 Helm이 설치 안되어 있다면 다음과 같이 진행하면 된다.

- https://github.com/helm/helm/releases

 

❯ wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz

tar zxvf helm-v3.12.3-linux-amd64.tar.gz

sudo install -o root -g root -m 0755 helm /usr/local/bin/helm

 

NFS Provisioner 설치는 다음과 같이 하면 된다.

 

❯ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

❯ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \                 
    --set nfs.server=192.168.100.153 \
    --set nfs.path=/srv/nfs

❯ kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

 

잘 되는지 테스트를 해보면 다음과 같다.

 

 kubectl create -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-claim.yaml -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-pod.yaml

❯ kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-claim.yaml -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-pod.yaml

 

NFS 서버에 생성된 디렉토리와 SUCCESS 파일이 확인되면 된다.

필요 없어진 디렉토리/파일 삭제는, 직접 수작업으로 NFS Server에서 진행하면 된다.

 

 

5. kubeflow install

이제 준비는 끝났다. manifest를 이용한 설치를 진행해보자.

- https://github.com/kubeflow/manifests#install-with-a-single-command

https://github.com/kubeflow/manifests#installation

 

Kubeflow 실제 설치는 정말 쉽다.

kubeflow install

 

❯ git clone https://github.com/kubeflow/manifests.git 

❯ cd manifests   

❯ while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done

 

끝!

 

이제 기다리면 된다. 시간이 좀 걸린다.

k9s

 

모든 Pod가 Running이면 된 것이다.

 

 

6. Service

웹 접근을 위해서는 현재 ClusterIP로 설정되어 있는 서비스를 NodePort 또는 LoadBalancer로 변경해주는 것이 좋다.

ClusterIP

 

설정을 변경해보자.

 

> kubectl edit service istio-ingressgateway -n istio-system

 

type 부분을 수정하고 저장하면 된다.

NodePort

 

다시 확인해보자.

NodePort

 

이제 웹브라우저로 접근하면 된다. (IP는 각자 상황에 맞게, 포트는 위와 같이 확인되는대로)

- http://192.168.100.150:31537/

login

 

기본 계정 정보는 다음과 같다.

- Email: user@example.com

- Password: 1234123 

 

kubeflow

 

수고 많으셨습니다!!!

반응형

 

최근 많은 분들이 관심을 갖고 있는 "MLOps"는

"Machine Learning"과 "DevOps"가 합쳐진 것으로 지속적인 학습과 배포가 이루어지도록 하는 것을 의미한다.

 

이런 `MLOps`를 공부하기에 앞서서 먼저 알아야 할 것이

바로 "머신러닝 엔지니어링 (MachineLearning Engineering)"이다.

 

그리고, "머신러닝 엔지니어링 (MachineLearning Engineering)"에 대해서

제대로 공부할 수 있는 책이 나왔다.

 

표지

 

책 표지가 너무 깔끔하게 잘 나온 것 같다~^^

 

1쇄

 

21년의 마지막날 하루 앞두고 발행되었다!!!

 

 

MachineLearning에 대한 책들을 보면 거의 대부분 Modeling에 집중되어 있다.

하지만, 실제 이를 적용하기 위해서는 Modeling만 알아서는 충분하지 않다.

이를 어떻게 응용할 것인지, 어떻게 적용할 것인지가 중요하다.

 

그렇기에 책의 서두를 보면, 이 책의 정체성에 대해서 잘 설명해주고 있다.

 

"Applied MachineLearning"

 

applied machinelearning

 

책의 구성을 보면 프로젝트의 시작 전부터 하나씩 친절하게 설명을 해주고 있다.

 

Chapter 2

 

기술적인 부분에 대해서만 설명해주는 것이 아니라

어떤 데이터가 좋은 데이터인지, 어떤 전략으로 샘플링을 해야하는지와 같이

정말 꼼꼼하게 잘 설명해주고 있다.

 

Chapter 3

 

당연한 이야기이지만, MachineLearning에서 가장 중요한 것은 데이터이기에

데이터에 대해서 상당한 분량을 투자해서 잘 설명해주고 있다.

 

Chapter 9

 

데이터들을 수집해서 잘 정리하고 모델링을 해서

잘 만들어진 모델을 멋지게 서빙까지 하는 과정에 대해서 설명을 잘 해준다.

 

 

하지만, 이 책에서는 ML Engineering에 대한 이론적인 측면에서 설명을 해주고 있지

실제 사용되는 도구들을 통해 구현적인 측면에서는 언급해주고 있지 않다.

 

서빙

 

머신러닝 파이프라인에 있어서 각 단계별로 어떤 것들을 염두에 두어야 하는지

어떤 것들을 알고 있어야 하는지에 대한 이론을 설명해주고 있다.

 

즉, 그래서 실제로 어떤 도구들을 어떻게 구축해야할지를 고민하시는 분들에게는 적합하지 않고

머신러닝을 실제 업무에 적용하기 위해 어떤 단계들로 구성이 되어있는지

각 단계별로 어떤 것들을 고민하고 조심해야하는지를 알고 싶으신 분들에게 적합할 것 같다.

 

 

※ 제이펍 서평단 활동을 위해 지급 받은 도서에 대한 리뷰입니다.

 

반응형

+ Recent posts