분류 전체보기 1172

쿠버네티스 구조

노드; Node 쿠버네티스가 설치된 물리 또는 가상 머신 컨테이너가 호스팅 된다. 미니언이라고 알려지기도 했다. 고가용성을 확보하기 위해서는 두 개 이상의 노드가 필요하다. 클러스터; Cluster 그룹화 상태인 노드의 집합 노드 하나에 장애가 발생해도 다른 노드를 통해 애플리케이션을 사용할 수 있다. 즉, 고가용성이 확보된다. 부하 분산에 도움이 된다. 마스터; Master 쿠버네티스를 설치하고 마스터로 설정한 노드 클러스터에 있는 노드를 감시하면서 워커 노드 컨테이너의 실제 오케스트레이션을 담당한다. 구성 요소 API 서버 쿠버네티스 프런트엔드 역할을 담당한다. 사용자, 관리 장비, 커맨드 라인 인터페이스는 API 서버를 통해 쿠버네티스 클러스터와 상호작용한다. ETCD 서비스 쿠버네티스에서 클러스터..

[GitLab] 그룹으로 개인 프로젝트 이동

여러 사람이 소스 관리를 하면 개인 저장소에 프로젝트를 생성해서 관리하는 것보다 그룹 저장소에 프로젝트를 생성해 관리하는 것이 더 편할 수 있다. 하지만 이미 개인 저장소에 프로젝트를 생성해서 소스 관리를 진행하고 있었다면, 프로젝트를 그룹 저장소로 이동시켜야 할 필요가 있다. 이런 경우 가장 단순한 해결 방법은 그룹에 신규 프로젝트를 생성한 뒤 기존 개인 저장소의 프로젝트를 clone/push 하는 방법인데 아마 commit history가 유지되지 않는 걸로 알고 있다. (확실하진 않다.) 그리고 다른 해결 방법은 GitLab에서 제공하는 Project Transfer 기능을 이용하는 것이다. 이 글에서는 웹 상에서 개인 저장소에 생성해둔 프로젝트를 Project Transfer 기능을 이용해 Gro..

Git | GitLab 2021.06.28

Apache Nifi

Apache Nifi? 소프트웨어 시스템 간 데이터 흐름을 자동화하도록 설계된 Apache 오픈 소스 분산 환경에서 많은 데이터를 수집하고 처리하는 데 사용한다. 애플리케이션을 블랙박스 프로세스의 네트워크로 정의하는 프로그래밍 패러다임인 FBP(Flow Based Programming)을 기본 설계 개념으로 한다. 공식 문서 : https://nifi.apache.org/docs/nifi-docs/html/user-guide.html 특징 장점 단점 실시간 처리에 강력함 배치 작업에 취약 장애 발생에도 데이터를 유실하지 않는다. 현재 실행 중인 내용 확인 불가 HTTPS 지원 복잡한 연산 불가 직관적인 인터페이스 데이터 이동 경로 추적 가능 구성 요소 FlowFile 속성(Attribute)와 내용(Co..

Apache Nifi 2021.06.27

activate 없이 virtualenv 환경 이용하기

기본적으로 virtualenv 내 python을 사용해 python 코드를 실행시키기 위해서는 아래의 명령어로 virtualenv를 activate 해야 한다. source /bin/activate 그렇다면 virtualenv 환경은 activate를 해야만 사용할 수 있을까? 결론만 말하자면, virtualenv 내 python의 실행 경로를 직접 지정하면 activate 하지 않아도 virtualenv로 구성한 python과 모듈을 동작시킬 수 있다. 예시 예시로 패키지 충돌을 피하기 위해서 test_env라는 이름의 virtualenv 환경에 python-gitlab이라는 모듈을 설치했다고 가정해보자. 그리고 각 환경에서 python-gitlab 모듈을 import 해보았다. python-gitla..

Python 2021.06.26

[CentOS 7] virtualenv 설치 및 사용

virtualenv 격리된 가상 python 환경을 만들기 위한 도구 가상 python 환경이란 시스템 상에 설치되어 있는 python 환경은 그대로 두고, 작은 python을 새로 설치하여 필요한 python 모듈만 운영하는 환경이다. 가상 머신과 비슷하게 생각하면 된다. 하나의 모듈의 다른 버전이 필요하거나 서로 다른 모듈끼리의 충돌이 발생할 경우, 설치할 모듈로 인해 기존 서비스에 영향이 가지 않도록 하기 위해 사용한다. 설치 방법 python3와 pip3가 필요하다. 설치되어 있지 않으면 아래 명령어로 설치하도록 한다. yum install python3 yum install python3-pip 설치엔 root 권한이 필요하다. 설치를 해봤다면 잘 설치가 되었는지 버전을 확인해본다. python..

Python 2021.06.25

crontab - 매달 N번째 특정 요일에 실행시키기

crontab은 기본적으로 분, 시간, 일, 월, 요일 단위로 주기를 설정할 수 있다. 단순한 주기 설정은 기본 설정만으로도 충분히 가능하지만, 매 달 세 번째 일요일 실행 등과 같은 조건은 설정에 한계가 있다. 그렇다면 이런 주기 설정은 어떻게 해야 할까? 이 문제는 매주 특정 요일에 실행하도록 crontab에 설정하고, 실행 시점의 날짜를 체크하는 방식으로 해결할 수 있다. 방법 1. crontab 주기 설정 * * * * 7 테스트하기 쉽도록 일요일인 경우에는 매 시 매 분 실행하도록 설정했다. 2. 날짜 체크 * * * * 7 [ $(date +\%d) -gt 14 ] && [ $(date +\%d) -le 21 ] && /run/your/script.sh &&를 이용해 매 달 세 번째 주에만 스..

Linux 2021.06.24

다중 명령어 실행

Linux에선 기본적으로 한 줄에 하나의 명령어를 실행할 수 있다. 하지만 특수문자를 적절히 활용하면 여러 명령어를 한 줄로 이어서 사용할 수 있다. 다중 명령어를 실행할 수 있도록 하는 특수문자는 다음과 같다. 1. ; 명령어의 끝을 표시하는 문자 앞의 명령어의 실행이 실패해도 다음 명령어가 실행된다. 즉, 명령어가 순차적으로 실행된다. 두 번째로 실행한 명령어를 보면, docker 디렉터리로 이동하는 것을 실패했어도 docker/git 디렉터리로 이동한 것을 볼 수 있다. 2. | 여러 명령어를 실행할 때 이전 명령어의 결과를 다음 명령어의 입력값으로 지정한다. 텍스트 검색 명령어인 grep과 묶여서 자주 쓴다. 3. & 앞의 명령어는 백그라운드로 실행하고, 다음 명령어를 실행한다. 앞의 명령어의 실..

Linux 2021.06.23

명령어 경로 찾기

일반적으로 패키지를 설치하면, 설치한 프로그램을 실행할 수 있는 명령어를 제공한다. 당연하지만 하나의 명령어는 하나의 실행파일을 가리키고 있다. 따라서 패키지 하나의 여러 버전을 설치해서 사용할 때, 명령어가 바라보고 있지 않은 다른 버전을 실행하기 위해서는 실행파일을 직접 지정해서 명령을 실행해야 한다. 명령어의 위치를 찾는 명령어는 다음과 같다. 1. which 실행파일의 위치를 찾는 명령어 which alias가 있으면 alias를 먼저 보여준다. 명령어로 실행하는 것과 실행 파일을 지정하는 것은 동일한 결과를 보여준다. 2. whereis 바이너리, 소스, 매뉴얼 페이지 파일 같은 특정한 파일의 위치를 찾는 명령어 whereis # -b : 바이너리 파일만 검색 # -m : 매뉴얼 파일만 검색 #..

Linux 2021.06.22

Python 첨부 파일 메일 전송

2021.06.20 - Python 텍스트 메일 전송 지난 글에 이어 이 글에서는 첨부파일을 포함한 메일을 전송할 수 있는 코드를 다룬다. 마찬가지로 코드 전체를 복사해서 사용한다면, MAIN 아래의 email_sender부터 attachment_filepath까지의 값을 잘 넣어주면 된다. 전체 코드 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders import os import time class MailSender: def __init__(self, email_..

Python 2021.06.21

Python 텍스트 메일 전송

Python은 기본 내장 모듈인 smtplib을 사용해 비교적 간단하게 이메일을 전송할 수 있다. SMTP(Simple Mail Transfer Protocol)는 메일을 보낼 때 사용하는 프로토콜이다. 참고사항 이 글의 코드는 수신자 한 명에게 제목과 내용으로 구성된 메일을 보내도록 작성되었다. 이 글의 코드는 인터넷에 돌아다니는 코드를 클래스로 래핑(?)한 것이다. 동작 프로세스 : 메일 전송에 필요한 값 초기화 -> 객체 생성 -> 메일 작성 -> 메일 전송 따라서 코드를 그대로 사용할 생각이면 main 아래의 email_sender부터 body까지의 값을 적은 뒤 실행시키면 된다. 메일 전송에 사용할 메일 서버의 주소와 포트는 미리 알아두어야 한다. 전체 코드 import smtplib from ..

Python 2021.06.20