검색결과 리스트
IT에 해당되는 글 86건
- 2021.05.25 인그레스 단일화 (ExternalName 타입)
- 2021.05.24 쿠버충 헤드리스 서비스 공홈
- 2021.05.17 AWS NLB -> ALB IP기반 타겟그룹 포워딩 람다
- 2021.04.08 쿠버네티스 노드 강제축출 & 노드수 축소 적용순서
- 2021.03.22 초대용량 처리 시, 이터레이터
- 2021.03.18 S3 키 메타데이터 (이름/용량) 크롤러
글
인그레스 단일화 (ExternalName 타입)
인그레스 진입점을 nginx ingress controller로 만든다.
쿠버프록시 서비스 타입은 ExternalName으로 만들고, 그 외부명은 클러스터 FQDN으로 지정한다.
이 FQDN이 실제 어플리케이션으로 진입해 들어가는 서비스의 도메인이다.
현재는 NP타입 서비스를 EN타입에서 지정하여 테스트 완료된 상태.
근데, Nginx Ingress에는 백엔드 엔드포인트를 못찾는다고 징징대는게 그냥 무시할 것.
실제로 엔드포인트 컨트롤러를 통해 EP가 만들어지는 것은 아니기에.
신기한건, 헤드리스 서비스도 비슷한 방식인데, 이건 아예 nginx에서 포워딩을 못한다.
웃긴건 이 헤드리스서비스의 FQDN을 파드 내부에서도 찾지 못하는 현상.
따라서, 단일 인그레스 vs 크로스 네임스페이스 백엔드 포워딩하려면, nginx-ingress & EN타입 서비스를 선택해야 함.
'IT > EKS' 카테고리의 다른 글
AWS APIGW -> EKS Nginx Ingress (NLB) 포워딩 실패 (504 타임아웃) (0) | 2021.11.29 |
---|---|
파드 스테이터스 종류 (그라파나 alert용 잠깐 정리) (0) | 2021.11.26 |
쿠버네티스 nginx 인그레스 삭제 시 주의점 (0) | 2021.05.27 |
쿠버충 헤드리스 서비스 공홈 (0) | 2021.05.24 |
쿠버네티스 노드 강제축출 & 노드수 축소 적용순서 (0) | 2021.04.08 |
글
쿠버충 헤드리스 서비스 공홈
'IT > EKS' 카테고리의 다른 글
AWS APIGW -> EKS Nginx Ingress (NLB) 포워딩 실패 (504 타임아웃) (0) | 2021.11.29 |
---|---|
파드 스테이터스 종류 (그라파나 alert용 잠깐 정리) (0) | 2021.11.26 |
쿠버네티스 nginx 인그레스 삭제 시 주의점 (0) | 2021.05.27 |
인그레스 단일화 (ExternalName 타입) (0) | 2021.05.25 |
쿠버네티스 노드 강제축출 & 노드수 축소 적용순서 (0) | 2021.04.08 |
글
AWS NLB -> ALB IP기반 타겟그룹 포워딩 람다
'IT > AWS Lambda & Resources Trouble Shooting' 카테고리의 다른 글
CloudFront + 람다@ 리디렉션 (0) | 2022.07.05 |
---|---|
Nginx Access Log 엘라스틱서치 조회 / S3 백업 람다 (0) | 2021.12.23 |
AWS EKS PLEG이슈 (0) | 2020.10.28 |
AWS 엘라스틱서치 스냅샷/특정인덱스 를 복원하는 람다 (0) | 2020.10.26 |
쿠버네티스 좀비파드 저격용 파이썬 스크립트 (0) | 2020.10.21 |
글
쿠버네티스 노드 강제축출 & 노드수 축소 적용순서
1. 현재 노드 개수 4
2. 노드 1개를 강제로 축출 (기동 노드 3개)
3. 쿠버네티스 컨트롤 플레인의 노드 컨트롤러 영역을 벗어나는 이슈가 존재
4. 따라서 노드그룹 desired 는 4이지만, 실제는 3개만 계속 기동되는 이슈가 존재
컨트롤플레인 ETCD 동기화가 안되는 모양
5-1. desired를 3으로 줄이면? -> 기존 기동 노드를 1개 셧다운하여, 2개만 기동되고, 이후 1개 새로운 노드가 탄생
5-2. desired를 5로 늘리면? -> 새로운 노드가 1개만 탄생한 뒤, 뒤 이어 1개가 새로 탄생
'IT > EKS' 카테고리의 다른 글
AWS APIGW -> EKS Nginx Ingress (NLB) 포워딩 실패 (504 타임아웃) (0) | 2021.11.29 |
---|---|
파드 스테이터스 종류 (그라파나 alert용 잠깐 정리) (0) | 2021.11.26 |
쿠버네티스 nginx 인그레스 삭제 시 주의점 (0) | 2021.05.27 |
인그레스 단일화 (ExternalName 타입) (0) | 2021.05.25 |
쿠버충 헤드리스 서비스 공홈 (0) | 2021.05.24 |
글
초대용량 처리 시, 이터레이터
리얼타임. 실시간 성으로 데이터를 처리 시, 공간복잡도를 크게 고려하지 않아도 되었으나, 현재 초 대용량 (목표치는 약 5.2 천만건 Rows) 데이터를 파일로 내리고 파싱할 일이 생겼습니다.
기본적으로 파이썬에서는 이터레이터로 생성하고, 실제 그 값이 필요해지는 시점에서, 그 값을 만드는 방식을 사용하는데요.
이전 C언어의 포인터, 그리고 자바의 레퍼런스를 빌어 사용하자면, 반복해야하는 콜렉션에 대한 메모리 주소 및 리모콘만 만들어두고, 그 내용물에 해당하는 데이터 생성을 뒤로 미루는 것이죠. 이런 기법을 지연 평가(lazy evaluation)라고 전문적으로 부른다고 하네요 ㅇㅇ..
유사 사례로, 브라우저에서 웹 이미지, CSS 등 스태틱 컨텐츠들을 가져올 시, 레이지 로딩 (Lazy Load) 라는 기법 또한 존재합니다. 먼저, 이 스태틱 URI들을 브라우저가 받은 뒤, 그 스태틱 이미지들을 이후에 CDN에서 가져오는 것이죠 :)
(나머지 공사중)
'IT > Python3' 카테고리의 다른 글
Venv (0) | 2021.08.24 |
---|---|
S3 키 메타데이터 (이름/용량) 크롤러 (0) | 2021.03.18 |
비동기 처리 sample (0) | 2021.03.18 |
Python3 딕셔너리 엘리먼트 타입의 리스트 아이템 중복제거 (0) | 2020.12.16 |
쿠버네티스 노드 관제 커스터마이즈 (0) | 2020.11.06 |
글
S3 키 메타데이터 (이름/용량) 크롤러
S3 전체가 약 50페타.
그런 버킷이 8세트...
전체를 크롤링 시, 프리픽스가 없는 상태라면 어쩔 수 없이 시간싸움으로 가게 된댜....
import boto3, json, pathlib, sys, asyncio
from datetime import datetime
class S3Util :
def __init__(self, 분석할_버킷명, 파일명, 게임id=None, 테이블명=None, 연=None, 월=None, 일=None) :
self.버킷명 = 분석할_버킷명
self.게임id, self.테이블명 = 게임id, 테이블명
self.연, self.월, self.일 = 연, 월, 일
self.파일명 = 파일명
# s3 오브젝트 크롤링
def s3_오브젝트_크롤링(self, prefix=None) :
pathlib.Path("./result").mkdir(parents=True, exist_ok=True)
s3c_lister = boto3.client("s3").get_paginator("list_objects_v2")
페이저 = s3c_lister.paginate(Bucket = self.버킷명)
if prefix != None : 페이저 = s3c_lister.paginate(Bucket = self.버킷명, Prefix=prefix)
with open("./result/" + self.파일명, "w") as 로컬_원본파일 :
for 페이지 in 페이저 :
for 응답 in 페이지["Contents"] :
응답키 = 응답["Key"].replace("/", ",")
로컬_원본파일.write( ",".join( ( 응답키, str(응답["Size"]), "\n" ) ) )
# s3 오브젝트 크롤링 비동기 업그레이드
def s3_오브젝트_비동기_크롤링(self, prefix=None) :
pathlib.Path("./result").mkdir(parents=True, exist_ok=True)
s3c_lister = boto3.client("s3").get_paginator("list_objects_v2")
페이저 = s3c_lister.paginate(Bucket = self.버킷명)
if prefix != None : 페이저 = s3c_lister.paginate(Bucket = self.버킷명, Prefix=prefix)
async def _s3_obj_list_rslt_file_write(파일, 응답키, 응답) :
파일.write(",".join( ( 응답키, str(응답["Size"]), "\n" ) ))
async def _s3_obj_list_async(파일) :
async for 페이지 in 페이저 :
for 응답 in 페이지["Contents"] :
응답키 = 응답["Key"].replace("/", ",")
await _s3_obj_list_rslt_file_write(파일, 응답키, 응답)
with open("./result/" + self.파일명, "w") as 로컬_원본파일 :
이벤트루프 = asyncio.get_event_loop()
이벤트루프.run_until_complete(_s3_obj_list_async(로컬_원본파일))
# 날짜별 총합
def s3_크롤링오브젝트_날짜별총합(self, 취합할_파일명) :
취합결과 = { "dummy" : "dummy" }
with open('./result/' + 취합할_파일명, 'r') as 파일:
for 파일한줄 in 파일 :
스플릿된_라인 = 파일한줄.split(",")
try :
yyyyMMdd = "-".join((스플릿된_라인[2], 스플릿된_라인[3], 스플릿된_라인[4]))
이_파일의_용량 = int(스플릿된_라인[-2])
try : 취합결과[yyyyMMdd] += 이_파일의_용량
except Exception as e : 취합결과[yyyyMMdd] = 이_파일의_용량
except Exception as e :
print("날짜별 파싱 오류 ")
print(파일한줄)
날짜출력_리스트 = []
with open("yyyyMMddSum_" + 취합할_파일명 +".txt", "w") as file :
for key in 취합결과.keys():
날짜출력_리스트.append(key)
날짜출력_리스트.sort()
for element in 날짜출력_리스트 :
쓸_내용 = ",".join( [ element, str( 취합결과[element] ) ] )
file.write( 쓸_내용 + "\n" )
# 게임id별 총합
def s3_크롤링오브젝트_게임id별총합(self, 취합할_파일명) :
취합결과 = { "dummy" : "dummy" }
with open('./result/' + 취합할_파일명, 'r') as 파일:
for 파일한줄 in 파일 :
스플릿된_라인 = 파일한줄.split(",")
게임id = str(스플릿된_라인[0])
이_파일의_용량 = int(스플릿된_라인[-2])
try : 취합결과[게임id] += 이_파일의_용량
except Exception as e : 취합결과[게임id] = 이_파일의_용량
with open("gameIdSum_" + 취합할_파일명 +".txt", "w") as file :
for k, v in 취합결과.items():
쓸_내용 = ",".join( [ k, str(v) ] )
file.write( 쓸_내용 + "\n")
# 게임id-테이블id별 총합
def s3_크롤링오브젝트_게임id_테이블별총합(self, 취합할_파일명) :
취합결과 = {
"dummy" : {
"a" : 0
}}
with open('./result/' + 취합할_파일명, 'r') as 파일:
for 파일한줄 in 파일 :
스플릿된_라인 = 파일한줄.split(",")
게임id = str(스플릿된_라인[0])
테이블id = str(스플릿된_라인[1])
이_파일의_용량 = int(스플릿된_라인[-2])
try : 취합결과[게임id]
except Exception as e : 취합결과[게임id] = {}
try : 취합결과[게임id][테이블id] += 이_파일의_용량
except Exception as e : 취합결과[게임id][테이블id] = 이_파일의_용량
with open("gameId_and_tableId_Sum_" + 취합할_파일명 +".txt", "w") as file :
for k, v in 취합결과.items():
for x, y in v.items() :
쓸_내용 = ",".join( [ k, x, str(y) ] )
file.write( 쓸_내용 + "\n")
# 게임id-테이블id-날짜별 총합
def s3_크롤링오브젝트_게임id_테이블id_날짜별총합(self, 취합할_파일명) :
취합결과 = {
"gameid" : {
"tableid" : {
"2021-01-01" : 0
}}}
with open('./result/' + 취합할_파일명, 'r') as 파일:
for 파일한줄 in 파일 :
스플릿된_라인 = 파일한줄.split(",")
게임id = str(스플릿된_라인[0])
테이블id = str(스플릿된_라인[1])
try :
yyyyMMdd = "-".join((스플릿된_라인[2], 스플릿된_라인[3], 스플릿된_라인[4]))
이_파일의_용량 = int(스플릿된_라인[-2])
try : 취합결과[게임id]
except Exception as e : 취합결과[게임id] = {}
try : 취합결과[게임id][테이블id]
except Exception as e : 취합결과[게임id][테이블id] = {}
try : 취합결과[게임id][테이블id][yyyyMMdd] += 이_파일의_용량
except Exception as e : 취합결과[게임id][테이블id][yyyyMMdd] = 이_파일의_용량
except Exception as e :
print("날짜 파싱 오류 데이터 발생")
print(파일한줄)
with open("gameId_and_tableId_and_yyyyMMdd_Sum_" + 취합할_파일명 +".txt", "w") as file :
for k, v in 취합결과.items():
for x, y in v.items() :
for z, w in y.items() :
쓸_내용 = ",".join( [k, x, z, str(w)] )
file.write(쓸_내용 + "\n")
if __name__ == "__main__" :
버킷명, 게임id, 테이블id = None, None, None
try :
버킷명 = sys.argv[1]
게임id = sys.argv[2]
테이블id = sys.argv[3]
except Exception as e :
if 버킷명 == None :
print("버킷명 필수입니다.")
exit(-1)
if 게임id == None and 테이블id != None :
print("게임id 없이 테이블id로 크롤링할 수 없습니다.")
exit(-1)
# (1) 파일로 결과물을 출력 시, 이에 해당하는 날짜로 네이밍을 완성합니다.
# 또한, 결과물을 해당 경로의 result에 디렉토리로 만듭니다.
# 실행 시간 측정용으로, exeinfo 파일에 실행/종료 시간을 씁니다.
today = str(datetime.today()).replace(" ", "_")
파일명 = 버킷명 + "__" + str(게임id) + "__" + str(테이블id) + "__" + today
pathlib.Path("./result").mkdir(parents=True, exist_ok=True)
로컬_실행결과파일 = open("./result/" + 버킷명 + "_exeinfo_" + today, "w")
로컬_실행결과파일.write( f"실행 시작시간 : '{today}' \n" )
# (2) 버킷명 / 게임id / 테이블id 아규먼트를 기준으로, s3를 크롤링합니다.
데이터분석 = S3Util(버킷명, 파일명, 게임id, 테이블id)
if 게임id == None : 데이터분석.s3_오브젝트_크롤링()
elif 게임id != None and 테이블id == None : 데이터분석.s3_오브젝트_크롤링(게임id)
elif 게임id != None and 테이블id != None : 데이터분석.s3_오브젝트_크롤링(게임id + "/" + 테이블id)
else : print("입력값 분기처리 오류")
# (3) 종료 시간을 작성 후, 파일스트림 파이프를 닫습니다.
로컬_실행결과파일.write( f"실행 종료시간 : '{today}' \n" )
로컬_실행결과파일.close()
'IT > Python3' 카테고리의 다른 글
Venv (0) | 2021.08.24 |
---|---|
초대용량 처리 시, 이터레이터 (0) | 2021.03.22 |
비동기 처리 sample (0) | 2021.03.18 |
Python3 딕셔너리 엘리먼트 타입의 리스트 아이템 중복제거 (0) | 2020.12.16 |
쿠버네티스 노드 관제 커스터마이즈 (0) | 2020.11.06 |