전체 글 검색 결과

178개 발견
  1. 미리보기
    2019.09.06 - mr.november11

    [k8s] kubespray 를 사용한 bare-metal 서버에 쿠버네티스 설치하기

  2. 미리보기
    2019.08.26 - mr.november11

    [K8S] Azure AKS 클러스터에서 helm 차트 사용하기

  3. 미리보기
    2019.08.23 - mr.november11

    [K8S] Azure CLI 로 AKS 클러스터 구성 및 로컬 환경에서 kubectl 로 AKS 클러스터 연결하기

  4. 미리보기
    2019.07.19 - mr.november11

    [k8s] 공개용 Docker Image를 다운로드하여 사설 Registry 로 옮기기

  5. 미리보기
    2019.07.08 - mr.november11

    [k8s] 쿠버네티스 Pod 보안을 위해 root 가 아닌 사용자로 컨테이너 실행하기

  6. 미리보기
    2019.07.04 - mr.november11

    [ELK] Elasticsearch, Kibana 7.1 -> 7.2 업데이트 후 'Kibana server is not ready yet ' 에러 발생 시 해결 방법

  7. 미리보기
    2019.07.02 - mr.november11

    [ELK] Elasticsearch 보안기능(TLS통신, RBAC, 계정 기능) 설정하기

  8. 미리보기
    2019.06.18 - mr.november11

    [Linux] df 명령어 실행 시 df: '/tmp/SECUPD': Input/output error 가 발생하는 경우

  9. 미리보기
    2019.03.04 - mr.november11

    [node.js] winston version 3기준 node.js 로깅 설정(local timestamp 적용)

  10. 미리보기
    2019.03.04 - mr.november11

    [node.js] node.js 로 생성한 스크립트를 서버 내 daemon 형태로 실행하기

[k8s] kubespray 를 사용한 bare-metal 서버에 쿠버네티스 설치하기

[k8s] kubespray 를 사용한 bare-metal 서버에 쿠버네티스 설치하기

1. 설치용 서버 사전 설정

  • kubespray를 실행할 mater 에 관련 hosts 정보 추가

  • ssh key 생성

  • ssh key 배포

  • kubespray에서 사용하는 관련 package 설치

    • kubespray는 ansible 기반으로 설치되기 때문에 ansible 과 관련된 package 설치가 필요하다.
  • kubespray 다운로드

     

2. OS 사전 설정

  • Master, Worker 를 포함한 모든 노드에서 실행한다.

    • Swap OFF : 스와핑에 의한 성능 저하를 예방하기 위해 swap 영역을 제거한다.

    • SeLinux 해제 : 대부분의 패키지 설치에서 사전 작업 1순위인 .. Selinux 를 disable 한다.

3. Ansible playbook 실행하여 설치

  • Ansible Inventory 설정

    • Sample 을 복사하여 설치 환경에 맞게 수정한다.
  • ansible playbook 실행으로 kubernetes 설치

     

4. kubectl 로 설치 확인

  • kubectl 설치

    • CentOS 기준으로 아래 명령어를 실행한다.

  • kubectl get ndoes 명령어로 Cluster 노드 확인

     

다른 카테고리의 글 목록

k8s 카테고리의 포스트를 톺아봅니다
[K8S] AKS 클러스터에서 helm 차트 사용하기

 

 

[K8S] AKS 클러스터에서 helm 차트 사용하기

Helm(헬름)은 쿠버네티스에서 사용하는 애플리케이션 패키징 시스템이다. (개념상으로 Linux의 yum과 같다.)

1. MAC에 helm 설치

참고 : https://helm.sh/docs/using_helm/#installing-helm

  • brew 명령어로 helm 설치

2. AKS클러스터에 Helm 설정

참고 : https://docs.microsoft.com/ko-kr/azure/aks/kubernetes-helm

  1. AKS 클러스터 내 Helm용 RBAC(역할 기반 접근 제어) 생성

    • helm-rbac.yaml 파일을 생성하고 아래 매니페스트를 입력한다.

    • tiller는 Helm에서 사용하는 서비스 계정을 생성하고 cluster-admin 권한을 부여한다.

    • kubectl apply -f helm-rbac.yaml 명령어를 실행하여 RBAC생성

       

  2. helm 초기화로 클러스터 설정

    • helm init 명령어로 helm에서 사용할 서비스 계정을 초기화한다.

  3. helm 정상 구성 확인

    • helm 이 정상 구성되었는지 확인하기 위해 helm search 명령어로 공개 helm 차트를 검색한다.

    • 현재 클러스터에서 실행중인 helm 차트는 helm list 명령어로 확인한다.

       

다른 카테고리의 글 목록

k8s 카테고리의 포스트를 톺아봅니다
[K8S] Azure CLI 로 AKS 클러스터 구성 및 로컬 Mac OS 환경에서 kubectl 연동하기 2

[K8S] Azure CLI 로 AKS 클러스터 구성 및 로컬 환경에서 kubectl 로 AKS 클러스터 연결하기

1. Azure Cli 툴 설치 및 Azure 로그인

참고 : https://docs.microsoft.com/ko-kr/cli/azure/install-azure-cli-macos?view=azure-cli-latest

  1. brew를 사용하여 azure cli 설치

  2. azure cli 에서 Azure 로그인

    • 명령어 실행 시 Azure에 로그인할 수 있는 웹 브라우저가 열린다.

    • 웹 브라우저 로그인에 성공하면 아래와 같으 메시지가 출력된다.

       

2. Azure Cli 명령어로 AKS 클러스터 생성하고 연결하기

참고 : https://docs.microsoft.com/ko-kr/azure/aks/kubernetes-walkthrough

  1. Resource Group 생성

    • AKS 리소스가 배포되고 관리될 논리적 그룹을 생성한다.

    • --location 에는 리소스를 생성한 지역을 선택하며 한국 서울의 경우 koreacentral이다.

  2. AKS 클러스터 생성

    • AKSTEST 리소스 그룹 내 TEST라는 이름의 신규 클러스터를 생성한다.

  1. AKS 클러스터 연결

    • 로컬 환경에 kubectl이 설치되어 있지 않다면 azure cli 로 설치한다.

    • AKS 클러스터 생성이 완료되었다면 로컬 Mac 환경의 kubectl 로 접속 가능하도록 AKS 클러스터에 대한 자격증명을 할당 받는다.

      할당받은 get-credentials 정보는 kubectl 의 context 정보에 추가된다.

    • 로컬 kubectl에서 여러 개의 클러스터에 연결할 경우 kubectl config get-contexts 명령어로 전체 cluster 목록을 확인할 수 있다.

      *로 표시된 context가 현재 연결된 클러스터다.

    • kubectl config use-context 명령어를 사용하여 kubectl 에 현재 연결된 클러스터를 전환할 수 있다.

       

  1. AKS 클러스터 연결 확인

    • kubectl 명령어로 생성된 클러스 관련 정보를 확인한다.

      • Node 상태

      • Namespace 상태

      • Pod 상태

        • AKS에서는 -A 플래그를 추가하면 전체 네임스페이스의 Pod를 조회할 수 있다.

         

다른 카테고리의 글 목록

k8s 카테고리의 포스트를 톺아봅니다
[k8s] 공개용 Docker Image를 다운로드하여 사설 Registry 로 옮기기

[k8s] 공개용 Docker Image를 다운로드하여 사설 Registry 로 옮기기

  • docker.elastic.co/beats/metricbeat:7.2.0 이미지를 대상으로 테스트 진행
  1. 외부 통신 가능한 서버에서 docker.elastic.co/beats/metricbeat:7.2.0 이미지를 pull 하기

    • docker image pull <Image 경로> 명령어 사용
  2. docker 이미지를 tar 파일로 저장하기

    • docker save -o <File Name> <Image Name> 명령어 사용

     

  1. 사설 Registry 연동된 사설 서버로 컨테이너 이미지 tar 파일 전송

  2. 사설 서버에서 docker load 명령어로 이미지 tar 불러오기

    • docker load -i <File Name> 명령어로 tar 파일로 만들어진 이미지를 docker 내 image에 불러온다.

       

  1. docker 이미지 태그 변경 후 사설 Registry 에 push 하기

    • docker image tag 명령어로 사설 서버 호스트로 이미지 태그를 변경한다 .

    • 변경된 태그를 기준으로 사설 Registry 에 push 하기

       

다른 카테고리의 글 목록

k8s 카테고리의 포스트를 톺아봅니다
[k8s] Pod 보안을 위해 root 가 아닌 사용자로 컨테이너 실행하기

[k8s] 쿠버네티스 Pod 보안을 위해 root 가 아닌 사용자로 컨테이너 실행하기

  • Pod의 Security context에서 runAsUser를 설정하면 컨테이너에서 실행할 사용자를 지정할 수 있다.

  • Pod의 Security context에서 runAsNonRoot를 설정하면 root로 실행하는 컨테이너의 실행을 차단할 수 있다.

    • 차단 시 CreateContainerConfigError 에러와 Error: container has runAsNonRoot and image will run as root 에러 발생

1. runAsUser로 사용자 지정 전

  • pod 설정 yaml 파일
  • 컨테이너 내 프로세스 출력 결과 : 프로세스가 root로 실행 중

2. runAsUser로 사용자 지정 후

  • pod 설정 yaml 파일 : securityContext 내 실행 사용자 2000으로 설정
  • yaml 파일에서 UID 2000 으로 설정 후 프로세스 목록 조회 결과 모든 프로세스가 UID 2000으로 실행된다.
  • 실제 컨테이너 내 UID 2000 이 없어도 문제 없다.

3. runAsNonRoot 으로 root 계정 실행 컨테이너 차단 시

  • 파드 보안 설정에서 runAsNonRoot 을 true로 설정하면 root 를 사용하는 컨테이너의 실행을 차단할 수 있다.

  • pod 설정 yaml 파일 : runAsNonRoot을 true로 설정

  • runAsNonRoot 설정 후 실행 시 "Error: container has runAsNonRoot and image will run as root" 에러가 발생함

  • runAsUser를 일반 사용자로 지정하면 runAsNonRoot가 true 이더라도 문제 없이 실행된다.
  • 이 경우에도 컨테이너를 실행하는 docker 프로세스 자체는 root 계정으로 실행 됨

다른 카테고리의 글 목록

k8s 카테고리의 포스트를 톺아봅니다
[ELK] Elasticsearch, Kibana 7.1 - 7.2 업데이트 후 'Kibana server is not ready yet ' 에러 발생 시

[ELK] Elasticsearch, Kibana 7.1 -> 7.2 업데이트 후 'Kibana server is not ready yet ' 에러 발생 시

참고 자료 : https://discuss.elastic.co/t/upgraded-to-7-2-kibana-server-is-not-ready-yet/188072/3

  • KIBANA 7.2 버전 업데이트 후 'Kibana server is not ready yet ' 문구만 출력되면서 kibana 접속이 안 되는 문제가 발생했다.

  • 해결 방법은 이전 버전의 kibana indice 를 삭제하면 된다.

    삭제 시 기존 kibana의 Dashboard, Visualize 설정이 모두 삭제된다.

  • elasticsearch indice확인 방법

     

다른 카테고리의 글 목록

ELK 카테고리의 포스트를 톺아봅니다
[ELK] Elasticsearch 보안기능(TLS통신, RBAC, 계정 기능) 설정하기

[ELK] Elasticsearch 보안기능(TLS통신, RBAC, 계정 기능) 설정하기

참고 자료 : https://www.elastic.co/kr/blog/getting-started-with-elasticsearch-security

  • Elasticsearch 에서 보안 기능을 활성화 하기 위해서는 TLS 인증서 설정이 필요하다.

1. Elasticsearch TLS 설정

  1. elasticsearch-certutil로 인증서 생성

    • RPM으로 elasticsearch를 설치한 기준으로 /usr/share/elasticsearch/bin 디렉토리 내 해당 파일이 있다.

    • ./elasticsearch-certutil cert -out /etc/elasticsearch/elastic-certificates.p12 "" 명령어를 실행하여 TLK 파일 생성

  2. /etc/elasticsearch/elasticsearch.yml 파일에 TLS 관련 설정 추가

    • Elasticsearch Master, Data 노드에 전부 다 동일하게 설정해며 앞서 생성한 elastic-certificates.p12 파일도 모든 노드에 다 설정해야 한다.

    • 설정 정보

    • elasticsearch 기동에 문제가 발생한다면 elastic-certificates.p12 파일 위치 확인이 필요하다.
  3. Elastic Search 재기동 systemctl restart elasticsearch

  4. Elasticsearch 클러스터 비밀번호 생성

    • elasticsearch-setup-passwords는 built in 계정에 대한 패스워드를 설정하는 프로그램이다. 패스워드 변경 전 Cluster 의 상태를 확인하기 때문에 Cluster 내 마스터 노드 설정 확인이 필요하다.

    • ./elasticsearch-setup-passwords auto 로 기본 계정(elastic, kibana 등)에 대한 패스워드를 자동으로 생성한다.

      해당 패스워드는 조회나 kibana 설정에 필요하니 별도로 기록해야한다.

    • elastic 계정에 대한 패스워드 설정 후 Node 상태 확인 결과

       

2. Kibana 계정 설정

  1. /etc/elasticsearch/kibana.yml 파일에 kibana 계정 추가

    앞서 elasticsearch-setup-passwords에서 생성한 kibana 계정의 패스워드를 입력한다.

  2. kibana 재기동 systemctl restart kibana

     

3. Kibana 접속 후 RBAC(Role Based Access Control) 관리

  1. http://KIBANA_HOST:5601 접속 후 elastic 계정으로 접속

    • elastic 계정의 패스워드는 앞서 elasticsearch-setup-passwords에서 생성한 패스워드 입력
  2. 좌측 하단 'Management' 메뉴에서 'Security' -> 'Users', 'Roles' 메뉴 접속

    • 'Roles' 메뉴에서 Elasticsearch 관련 권한(read, monitoring 등)을 생성하고

    • 'Users' 메뉴에서 해당 권한을 포함한 신규 계정을 생성하면 됨

       

4. Metricbeat 설정

  • metricbeat 를 활용하여 elasticsearch에 데이터를 수집하고 있다면 metricbeat 내에 계정 설정도 필요하다.

    • /etc/metricbeat/metricbeat.yml 파일 내 output.elasticsearch에 이전에 생성한 계정 정보 추가

    • protocol 정보에 "http" 를 입력하지 않으면 401 Unauthorized 에러가 발생핸다.

       

다른 카테고리의 글 목록

ELK 카테고리의 포스트를 톺아봅니다

[Linux] df 명령어 실행 시 df: '/tmp/SECUPD': Input/output error 가 발생하는 경우

[TOC]

1. 현상

  • CentOS 7.2 가 설치된 Dell 서버에서 df 실행 시 df: '/tmp/SECUPD': Input/output error 에러가 발생

    [root@server /]# df -h
    df: '/tmp/SECUPD': Input/output error
    Filesystem                             Size  Used Avail Use% Mounted on
    /dev/sda7                              9.8G  1.6G  7.7G  17% /
    devtmpfs                                16G     0   16G   0% /dev
    tmpfs                                   16G     0   16G   0% /dev/shm
    tmpfs                                   16G  1.6G   15G  11% /run
    tmpfs                                   16G     0   16G   0% /sys/fs/cgroup
    /dev/sda5                               20G  2.2G   17G  12% /usr
  • /var/log/messages 로그 내 FAT read failed 로그 지속 발생

    Jun 18 15:25:51 P-TVIEW-MEDIA67 kernel: FAT-fs (sdd): FAT read failed (blocknr 1)
    Jun 18 15:25:51 P-TVIEW-MEDIA67 kernel: FAT-fs (sdd): FAT read failed (blocknr 1)

2. 원인

  • Dell omsa 버그로 omsa에서 사용하는 가상 미디어 기능에서 사용중인 버그로 추정 됨

  • /etc/mtab 으로 확인 결과

    [root@server /]# cat /etc/mtab  | grep SECU
    /dev/sdc /tmp/SECUPD vfat rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0
    

3. 해결 방법

  • /tmp/SECUPD 파티션 umount 실행

    [root@server /]# cat /etc/mtab  | grep SECU
    /dev/sdc /tmp/SECUPD vfat rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0
    [root@server /]# umount /tmp/SECUPD
    [root@server /]# df -h
    Filesystem                             Size  Used Avail Use% Mounted on
    /dev/sda7                              9.8G  1.6G  7.7G  17% /
    devtmpfs                                16G     0   16G   0% /dev
    tmpfs                                   16G     0   16G   0% /dev/shm
    tmpfs                                   16G  1.6G   15G  11% /run

다른 카테고리의 글 목록

Linux 카테고리의 포스트를 톺아봅니다

[node.js] winston version 3기준 node.js 로깅 설정(local timestamp 적용)

설명

  • winston 은 node.js 에서 사용하는 대표적인 logging 모듈이다.

  • 기본 형태로 logging 시 timestamp 가 기록되지 않으며,

    Local time 으로 지역 시간대 적용을 위해서 별도의 format 정의가 필요하다.

  • 아래 코드 예제를 통해서 로깅 파일 생성 및 지역 시간(서울) 기준으로 로깅이 가능하다.

실행 코드

const winston = require('winston')

const moment = require('moment-timezone')

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;

const myFormat = printf(({ level, message, label, timestamp }) => {
  return `${timestamp} [${label}] ${level}: ${message}`;
});

const appendTimestamp = format((info, opts) => {
  if(opts.tz)
    info.timestamp = moment().tz(opts.tz).format();
  return info;
});

// Config Log
const logger = winston.createLogger({
  format: combine(
      label({ label: 'gather_gluster_info' }),
      appendTimestamp({ tz: 'Asia/Seoul' }),
      myFormat
  ),
  defaultMeta: { service: 'user-service' },
  transports: [
    //
    // - Write to all logs with level `info` and below to `combined.log`
    // - Write all logs error (and below) to `error.log`.
    new winston.transports.File({ filename: 'test.log' })
  ]
});

logger.log('error', "TT")


다른 카테고리의 글 목록

node.js 카테고리의 포스트를 톺아봅니다

[node.js] node.js 로 생성한 스크립트를 서버 내 daemon 형태로 실행하기

1. 배경

  • node.js 로 실행한 코드를 콘솔로 접속하여 실행할 시 콘솔 접속 후에는 해당 프로그램이 종료된다.

  • cronjob 과 같은 배치성 프로그램을 daemon 형태로 지속 실행하기 위해서 forever 란 패키지를 이용해야한다.

2. 설치

  • npm으로 forever 패키지를 설치한다.

  • 서버 내 공용으로 사용될 예정으로 global 옵션인 -g 를 적용한다.

$ npm install -g forever

3. 사용 방법

  • forever command 를 이용하여 node.js 코드를 실행한다.

  • 사용 가능한 명령어는 help 를 참고 시 아래와 같다.

    $ forever -h
    help:   usage: forever [action] [options] SCRIPT [script-options]
    help:    
    help:   Monitors the script specified in the current process or as a daemon
    help:    
    help:   actions:
    help:     start               Start SCRIPT as a daemon
    help:     stop               Stop the daemon SCRIPT by Id|Uid|Pid|Index|Script
    help:     stopall             Stop all running forever scripts
    help:     restart             Restart the daemon SCRIPT
    help:     restartall         Restart all running forever scripts
    help:     list               List all running forever scripts
    help:     config             Lists all forever user configuration
    help:     set <key> <val>     Sets the specified forever config <key>
    help:     clear <key>         Clears the specified forever config <key>
    help:     logs               Lists log files for all forever processes
    help:     logs <script|index> Tails the logs for <script|index>
    help:     columns add <col>   Adds the specified column to the output in `forever list`
    help:     columns rm <col>   Removed the specified column from the output in `forever list`
    help:     columns set <cols> Set all columns for the output in `forever list`
    help:     columns reset       Resets all columns to defaults for the output in `forever list`
    help:     cleanlogs           [CAREFUL] Deletes all historical forever log files

  • 실행 명령어 : forever start test_code.js

  • 확인 명령어 : forever list

    $ forever list
    info:   Forever processes running
    data:       uid command       script                 forever pid   id logfile                 uptime      
    data:   [0] QFcD test_code.js 39801   39808   /root/.forever/QFcD.log 0:0:0:53.367
  • 실행중지 명령어 : forever stop test_code.js 또는 forever stopall



다른 카테고리의 글 목록

node.js 카테고리의 포스트를 톺아봅니다