본문 바로가기

반응형

IT 인프라

(15)
Kubernetes란 무엇인가? Kubernetes란? 2014년부터 대규모 컨테이너 운영 노하우를 가진 Google이 개발을 주도하고, 현재는 CNCF(Cloud Native Computing Foundation)에서 관리되고 있는 오픈소스 컨테이너 오케스트레이션 툴 Google, Microsoft, Red Hat, IBM 등에 소속된 다수의 엔지니어들이 개발에 참여하고 있으며, 컨테이너 오케스트레이션 툴 중에서 사실상 표준으로 여겨지고 있다. 비슷한 제품으로 HashiCorp의 Nomad, Docker에 내장된 Swarm, Apache 재단의 Mesos/Marathon이 존재한다. 또한 여러 클라우드 프로바이더(AWS, Azure, GCP 등)들은 Kubernetes를 Managed Service로 제공한다. 특징 서비스 디스커버리..
Kubernetes Secret으로 기밀정보 관리하기 Kubernetes Secret은 ConfigMap과 유사하게 어떠한 정보를 담고 있지만, 다음과 같은 차이점이 있다. : Secret은 API 키, ID/Password, 인증서 등 기밀 정보를 다룬다. 따라서 etcd 안에서 암호화된 상태로 관리된다 Manifest 파일 작성시 key의 value는 base64 인코딩한 값을 입력해야 한다. Secret 생성하기 인증서 같은 기밀 정보 파일을 Secret으로 생성 ### # Secret 생성 # - ConfigMap 처럼 --from-env-file, --from-literal 존재 ### $ kubectl create secret generic {Secret 이름} --from-file={key}={value} ### # 사용 예시 ### $ kub..
Kubernetes ConfigMap으로 설정정보 관리하기 ConfigMap Kubernetes는 설정정보나 환경변수와 같은 정보들을 Docker Image에 포함시키지 않고 별도로 분리하여 관리할 수 있는 방법을 제공한다. 이를 통해 Docker Image는 어플리케이션을 실행시키기 위한 기능만을 담당하고, 각 회사/환경마다 다르게 설정되는 정보들은 ConfigMap을 통해 관리할 수 있다. ConfigMap 생성 ConfigMap은 다음 3가지 방법 중에서 선택하여 생성할 수 있다. $ kubectl create configmap {ConfigMap 이름} --from-file={파일 또는 디렉토리 경로} (옵션) $ kubectl create configmap {ConfigMap 이름} --from-env-file={파일 또는 디렉토리 경로} (옵션) $ ..
MySQL 정보 확인 쿼리 Table Engine Type SELECT t.table_schema, t.table_name, ENGINE FROM information_schema.tables t INNER JOIN information_schema.columns c ON t.table_schema=c.table_schema AND t.table_name=c.table_name WHERE ENGINE != 'InnoDB' AND t.table_schema NOT IN ('information_schema', 'mysql', 'performance_schema') GROUP BY t.table_schema, t.table_name HAVING t.table_schema IN ('bns_training2', 'dic', 'pb_aio..
PID 파일이 사라지는 이유 문제점 glibc 보안패치 후 리눅스 시스템 재부팅을 할 때, MySQL/MariaDB 복제 구성이 되어 있는 서버은 직접 작업했다. 재부팅 전에 MySQL 프로세스를 Stop하려고 하였으나 아래와 같은 메시지가 나오며 데몬이 정상적으로 내려가지 않았다. [root@Linux ~]# /etc/init.d/mysql stop MySQL server PID file could not be found! [FAILED] MySQL 데몬의 Process ID 값을 가지고 있는 PID 파일이 없고, 따라서 어느 데몬을 죽여야 할지 알 수 없기 때문에 발생한 문제이다. 종료할 MySQL 데몬의 PID 값을 찾아 이 PID 값을 가진 pid 파일을 생성하여 해결할 수 있다. 원인 리눅스는 내부적으로 /tmp 및 /va..
MySQL Rename Database RENAME DATABASE Syntax (Deprecated) RENAME {DATABASE | SCHEMA} db_name TO new_db_name; 얼마전에 데이터베이스 이름 변경할 일이 있어서 이 명령어를 사용하려 했는데 Syntax Error가 나면서 되지 않았다. 찾아보니 MySQL 5.1.7에서 추가된 문법이지만 데이터베이스 내용물이 손실될 위험성이 발견되어 MySQL 5.1.23에서 제거되었다고 한다. 데이터베이스 명을 변경하려면 ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME을 대신 사용하면 된다. 하지만 아직 직접 테스트해보진 않아서 다른 방법으로 데이터베이스 명을 변경했다. 방법 1 : 내가 사용한 방법 새로운 데이터베이스를 생성한 후, 이..
데이터 & 인덱스 단편화 줄이기 인덱스 단편화 B-Tree 인덱스는 Leaf 페이지로 데이터를 찾아 들어가는 과정에서 Randon Disk Access가 필요하다. 이때 물리적인 디스크에 순차적으로 데이터가 있다면 더 나은 성능을 보이지만, 그렇지 않은 경우엔 성능 저하가 발생하며 이를 단편화라고 한다. 단편화가 발생할 경우 Range Scane이나 Full Index Scan시 더 많은 시간이 소요된다. 데이터 단편화 데이터 역시 단편화가 발생하며, 인덱스 단편화 보다 좀 더 복잡하다. 데이터 단편화에는 총 세가지 종류가 있다 : Row Fragmentation Row가 이곳 저곳에 조각이 나서 저장될 때 발생하는 단편화 타입. Row Fragmentation은 인덱스로부터 단일 행만 필요한 쿼리일 경우에도 성능 저하가 발생한다. I..
MySQL Replication에서 Binlog Format을 Statement로 사용할 경우 문제점 현상황 운영중이던 서버의 에러로그에 이전부터 지속적으로 다음과 같은 경고문구가 남는 것을 보았다. [Warning] Statement is not safe to log in statement format. Statement: 원인 해당 서버의 Binlog Format은 Statement로 설정되어 있기 때문에 발생하였다. 에러 로그에 기록된 SQL문을 보면 대부분 LIMIT 구문을 사용하고 있다. Statement 포맷에서 LIMIT 구문을 사용하면 마스터와 슬레이브에서 해당 SQL문을 동시에 실행한다 하더라도 100% 동일한 결과를 보장할 수 없기 때문에 데이터 정합성에 문제가 생길 수 있기 때문에 경고 메시지가 나왔다. 해결책 개발사 측에 Statement 포맷 사용시 안전하지 않은 SQL문을 사용하..

반응형