상용모니터링 솔루션을 비교해야 할 일이 생겨 세가지를 간단하게 세팅해보았다.

k8s cluster 모니터링이 목적이었기에 세팅한 환경은 이러했다.

- 연습용 k8s cluster (1 master, 3 node)  //끝

세팅만 딱 해본 상태에서 개인적으로 느낀 세팅 친절도는

(20.07.09 기준) datadog >= whatap >= dynatrace이다.

k8s 모니터링을 기준으로 세팅했기에, 웬지 당연스럽게 helm차트로 구성했고 datadog이 가장 친절했다고 느꼇다.

datadog은 회원가입 후 helm차트로 설치 할게요. 하면 '이걸로 해보실래요?' 하고 복.붙 하면 끝이다.

하지만 dynatrace는 helm으로 할래요 그러면, '어 잠시만요... 음..... 이거 보고 해보실래요?' 라고 하기에 각종 token들을 발급 받아서 (세가지 정도 된다.) helm 커맨드를 구성하여 실행하면 끝이다.

마지막으로 whatap은 helm chart용 커맨드는 datadog처럼 알아서 준비해 주지만 k8s 1.18 이후 버전에 맞추어 최신화가 안 되어있었다. (20.07.09)

결국 chart를 내려받아서 troubleshooting 후에 namespace까지 미리 만들어주고 나서 실행을 했다.

 

내 짧은 생각으로는 나머지들도 helm을 datadog처럼 좀 더 적극적으로 지원해주면 좋겠다.

 

 

세팅 요약

1. 세 가지 모두 회원가입하고, node들에 agent만 돌려주면 알아서 기본적인 모니터링이 시작된다.

그렇기에 첫번째 할 일은 회원가입 후 get started free를 찾는 것.

2. agent를 각 node, vm 등에 세팅하기. 

  단순히 agent를 하나씩 설치하는건 셋 다 정말 쉽다. 그냥 복 붙하면 끝이다.

  다만 k8s에 helm으로 세팅할 때의 차이점은

  datadog: 주는거 치면 됨.

  dynatrace: helm chart 찾아서, 홈페이지 곳곳에서 token을 찾아서 집어넣어준 후 실행하면 끝

    helm chart는 쉽게 검색가능하고 token은 아래에서 얻어서 세팅해주면된다. (두번째 Url은 안먹힐텐데 Environment ID라는게 개인별로 로그인하면 나오는거라 'get oneagent' 페이지에서 paas setting을 찾아들어가면 저 페이지가 나온다.)

    https://www.dynatrace.com/support/help/dynatrace-api/basics/dynatrace-api-authentication/#generate-a-token

    https://${Environment ID}.live.dynatrace.com/#install/paas;gf=all

  whatap: 커맨드를 주는데 k8s가 좀 윗 버전이면 에러가난다.(20.07.09) pull 해서 deployment쪽 몇개 손봐 주면 돌아간다.

'공부 > Kubernetes' 카테고리의 다른 글

[k8s, helm] 까먹기 쉬운 명령어어  (0) 2020.07.06
[k8s] elk + metricbeat + prometheus (exporter) 연습용 세팅  (0) 2020.07.03
[k8s] helm 설치 & repo  (0) 2020.06.25
[k8s] /bin/bash 접속  (0) 2020.06.17
[k8s] 0.0.0.0으로 개방  (0) 2020.06.17

기본 네임스페이스 추가

이후 모든 kubectl 명령에서 사용하는 네임스페이스를 컨텍스트에 영구적으로 저장할 수 있다.

# kubectl config set-context --current --namespace=<insert-namespace-name-here>

확인하기

# kubectl config view --minify | grep namespace:

 

서버 재부팅시

kubelet이 잘 올라왔는지 확인한다.

# systemctl start kubelet

 

'공부 > Kubernetes' 카테고리의 다른 글

[helm] dynatrace, datadog, whatap 세팅  (0) 2020.07.09
[k8s] elk + metricbeat + prometheus (exporter) 연습용 세팅  (0) 2020.07.03
[k8s] helm 설치 & repo  (0) 2020.06.25
[k8s] /bin/bash 접속  (0) 2020.06.17
[k8s] 0.0.0.0으로 개방  (0) 2020.06.17

$ kubectl create namespace monitoring

/**

 * ## prometheus-node-exporter

 */

$ cd ${prometheus-node-exporter chart}

// 작동 자체를 위한 세팅은 특별히 할 게 없음.

$ helm install node-exporter . --namespace=monitoring

/**

 * ## metricbeat

 */

$ cd ${metricbeat chart}

// metricbeat는 deployment는 false, daemonset true를 주었고,  config에 아래와 같이 적용해 주었음. 

// coredns가 갑자기 맛이 가버리는 문제가 있었는데 selinux를 잊고 해지를 안해서 였지 않을까하여

// 해지 후 reboot 후 정상 작동. (단지 reboot으로 인한 해결 일 가능성도 있지만, k8s trouble shooting page에서 selinux로 인해 이러한 문제가 발생 할 수 있다고 하였기에 적절한 조치였을 듯.)

    #output.file:
      #path: "/usr/share/metricbeat/data"
      #filename: metricbeat
      #rotate_every_kb: 10000
      #number_of_files: 5
    output.logstash:
      hosts: ["logstash.monitoring"]

또한, modules에 아래 모듈 추가해주어 같은 노드의 exporter에 1:1로 매칭.

데이터는 promQL이 아니라 QueryDSL을 이용할 것이므로 prometheus서버는 사용안함. (테스트의 주 목적)

 prometheus:
      enabled: true
      config:
        - module: prometheus
          period: 10s
          hosts: ["localhost:9100"]
          metrics_path: /metrics
          namespace: defaults

$ helm install metricbeat . --namespace=monitoring

/**

 * ## logstash

 */

$ cd ${logstash chart}

logstash는 service용 vm에 nfs를 이용한 pv를 미리 구성해 주었고, pvc를 이용하여 이를 사용했다.

values.yaml의 중간쯤 elasticsearch에 host당연히 바꿔줬고,

아래와 같이 volumes를 세팅하였다. template폴더 안쪽에 statefulset.yaml에 pvc가 같이 있으므로 그 부분을 확인해보자.

volumes:
- name : data
  persistentVolumeClaim:
    claimName: data

outputs에

 아래와 같이 metricset.module 데이터로 prometheus metric만 우선적으로 구분 해 두었다.

outputs:
  main: |-
    output {
      # stdout { codec => rubydebug }
      if [metricset][module] == "prometheus" {
        elasticsearch {
          hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
          index => "prometheus-%{[@metadata][beat]}-%{+YYYY.MM.dd}"
        }
      } else {
        elasticsearch {
          hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
          index => "all-%{[@metadata][beat]}-%{+YYYY.MM.dd}"
        }
      }
      # kafka {
      #   ## ref: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-kafka.html
      #   bootstrap_servers => "kafka-output:9092"
      #   codec => json { charset => "UTF-8" }
      #   compression_type => "lz4"
      #   topic_id => "destination"
      # }
    }

$ helm install logstash . --namespace=monitoring

'공부 > Kubernetes' 카테고리의 다른 글

[helm] dynatrace, datadog, whatap 세팅  (0) 2020.07.09
[k8s, helm] 까먹기 쉬운 명령어어  (0) 2020.07.06
[k8s] helm 설치 & repo  (0) 2020.06.25
[k8s] /bin/bash 접속  (0) 2020.06.17
[k8s] 0.0.0.0으로 개방  (0) 2020.06.17

https://helm.sh/docs/intro/install/

 

cd ~

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

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

rm helm-v3.2.4-linux-amd64.tar.gz

sudo cp -r linux-amd64/helm /usr/local/bin/helm

rm -rf linux-amd64

 

 

helm repo add stable https://kubernetes-charts.storage.googleapis.com/

helm search repo stable

'공부 > Kubernetes' 카테고리의 다른 글

[k8s, helm] 까먹기 쉬운 명령어어  (0) 2020.07.06
[k8s] elk + metricbeat + prometheus (exporter) 연습용 세팅  (0) 2020.07.03
[k8s] /bin/bash 접속  (0) 2020.06.17
[k8s] 0.0.0.0으로 개방  (0) 2020.06.17
[k8s] etcd  (0) 2020.06.17

기본 :

kubectl exec --stdin --tty shell-demo -- /bin/bash

 

 

Get a Shell to a Running Container

This page shows how to use kubectl exec to get a shell to a running container. Before you begin You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a clust

kubernetes.io

 

kubectl create -f http-go-pod.yaml

 

kubectl port-forward go-http 8080:8080

 

 

pod를 디버깅등의 이유로 다른 서비스를 거치지 않고 특정 포드와 통신하고 싶을 때 port-forward를 사용할 수 있다.

하지만 default가 local로 뜨기 때문에 외부에서 접근이 안된다.

 

아래와 같이 option값을 주면 설정 가능하다.

 

kubectl port-forward go-http 8080:8080 --address 0.0.0.0

 

'공부 > Kubernetes' 카테고리의 다른 글

[k8s] helm 설치 & repo  (0) 2020.06.25
[k8s] /bin/bash 접속  (0) 2020.06.17
[k8s] etcd  (0) 2020.06.17
[k8s] vm에 세팅 순서 및 세팅시 참조할만한 내용  (0) 2020.06.14
[k8s] 6. kubernetes Replicaset  (0) 2020.04.04
sudo ETCDCTL_API=3 ./etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key get / --prefix --keys-only

 

 

server1@master:~/다운로드/etcd-v3.4.9-linux-amd64$ sudo ETCDCTL_API=3 ./etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key put key1 value1
OK
server1@master:~/다운로드/etcd-v3.4.9-linux-amd64$ sudo ETCDCTL_API=3 ./etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key get key1

'공부 > Kubernetes' 카테고리의 다른 글

[k8s] /bin/bash 접속  (0) 2020.06.17
[k8s] 0.0.0.0으로 개방  (0) 2020.06.17
[k8s] vm에 세팅 순서 및 세팅시 참조할만한 내용  (0) 2020.06.14
[k8s] 6. kubernetes Replicaset  (0) 2020.04.04
[k8s] 5. kubernetes pod  (0) 2020.03.31

기본 리눅스 세팅 후

 

1. docker 설치

2. k8s 설치 (kubeadm)

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

3. hostname 변경

   vi /etc/hostname 

4. swap 끄기

   sudo swapoff -a

   sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

5. selinux 끄기

6. vm 복사

7. master만 kubeadm init

8. 명령어 2개 실행 ( 하나는 로그보고, 하나는 network )

9. pod network 추가

10. worknode들 join

 

 

# vm ssh 뚫기

 

리눅스 SSH 접속 방법 (SSH 프로토콜 연결 허용 설정하기) - JooTC

리눅스 SSH 접속 리눅스 서버에 접근하기 위해 직접 로컬 PC에서 터미널이나 그래픽 인터페이스를 활용하여 작업을 진행하거나, 원격지에서 호스트 접속을 위한 프토로콜을 사용한 연결이 있습��

jootc.com

# vi /etc/ssh/sshd_config

* PasswordAuthentication yes

 

 

# vm cli 모드로

 

https://booiljung.github.io/technical_articles/linux/switch_gui_and_cli.html

Top Ubuntu 18.04 LTS에서 GUI와 CLI를 전환 2019년 4월 8일 CLI 모드로 전환하기 CTRL+ALT+F1~CTRL+ALT+F6을 누르면 CLI 모드로 전환 할 수 있습니다. 다시 GUI 모드로 전환하려면 CTRL+ALT+F7을 누릅니다. GUI 서비스 종

booiljung.github.io

# kubeadm join할 때

 

 

쿠버네티스 노드 조인(Join)시 Token 값 확인

Tech Note 정보 DansoJ 님이 작성하신 글입니다. 카테고리: [ Cloud Computing & MSA ] 게시됨: 18 October 2018 작성됨: 18 October 2018 최종 변경: 30 August 2019 조회수: 4037 1. 개요 Kubernetes 운영 하던 중 노드를 추가 ��

sarc.io

 

'공부 > Kubernetes' 카테고리의 다른 글

[k8s] 0.0.0.0으로 개방  (0) 2020.06.17
[k8s] etcd  (0) 2020.06.17
[k8s] 6. kubernetes Replicaset  (0) 2020.04.04
[k8s] 5. kubernetes pod  (0) 2020.03.31
[k8s] 4. kubernetes basic  (0) 2020.03.30

** 아래 링크속 강의를 참조하여 개인적인 이슈사항들을 추가하여 정리한 개인적인 용도의 글입니다.***

https://www.youtube.com/watch?v=WxzWXqTNdlw&list=PL9mhQYIlKEhdTu31zyb_QelQMaqFGgASA&index=1

https://github.com/subicura/workshop-init

 

 

## 환경 세팅 필요 (k8s는 현재 글에서 사용하지 않음)

 

[k8s] 1. 환경 세팅

Resources AWS lightsail Ubuntu 18.04.1 4GBRAM, 2 vCPU, 80GB SSD add launch script sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config echo "ubuntu:1q2w3e4r" | chpas..

nodias.tistory.com

apiVersion: apps/v1beta2
kind: ReplicaSet
metadata:
  name: whoami-rs
spec:
  replicas: 1
  selector:
    matchLabels:
      type: app
      service: whoami
  template:
    metadata:
      labels:
        type: app
        service: whoami
    spec:
      containers:
      - name: whoami
        image: subicura/whoami:1
        livenessProbe:
          httpGet:
            path: /
            port: 4567

'공부 > Kubernetes' 카테고리의 다른 글

[k8s] etcd  (0) 2020.06.17
[k8s] vm에 세팅 순서 및 세팅시 참조할만한 내용  (0) 2020.06.14
[k8s] 5. kubernetes pod  (0) 2020.03.31
[k8s] 4. kubernetes basic  (0) 2020.03.30
[k8s] 3. docker-compose practice  (0) 2020.03.29

** 아래 링크속 강의를 참조하여 개인적인 이슈사항들을 추가하여 정리한 개인적인 용도의 글입니다.***

https://www.youtube.com/watch?v=WxzWXqTNdlw&list=PL9mhQYIlKEhdTu31zyb_QelQMaqFGgASA&index=1

https://github.com/subicura/workshop-init

 

 

## 환경 세팅 필요 (k8s는 현재 글에서 사용하지 않음)

 

[k8s] 1. 환경 세팅

Resources AWS lightsail Ubuntu 18.04.1 4GBRAM, 2 vCPU, 80GB SSD add launch script sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config echo "ubuntu:1q2w3e4r" | chpas..

nodias.tistory.com

Pod 

$ vi whoami-pod.yml

-----------------------------

apiVersion: v1   //v1, beta, ...

kind: Pod  //주인공

metadata:

  name: whoami

  labels:

    type: app

spec:

  containers: //배열

  - name: app

    image: subicura/whoami:1

-----------------------------

$ k apply -f whoami-pod.yml

$ k get all

1. 명시적으로 Pod을 생성 했기 때문에 딱 Pod이 생성 됨

 

Pod Ready

  A. livenessProbe (살아 있는지 조사)

  $ vi whoami-pod-lb.yml

    -----------------------------

    apiVersion: v1   //v1, beta, ...

    kind: Pod  //주인공

    metadata:

      name: whoami-lb

      labels:

        type: app

    spec:

      containers: //배열

      - name: app

        image: subicura/whoami:1

        livenessProbe:

          httpGet:

            path: /not/exist

            port: 8080

          initialDelaySeconds: 5

          timeoutSeconds: 2 # Default 1

          periodSeconds: 5 # Defaults 10

          failureThreshold: 1 # Defaults 3

  -----------------------------

  $ k describe pod/whoami-lp

  1. Warning Unhealthy 5s (x5 over 2m25s) kubelet, ip-172-26-8-191 Liveness probe failed: Get http://10.42.0.25:8080/not/exist: dial tcp 10.42.0.25:8080: connect: connection refused Normal Killing 5s (x5 over 2m25s) kubelet, ip-172-26-8-191 Container app failed liveness probe, will be restarted

 

  B. readinessProbe (준비가 되어있는지 조사)

$ vi whoami-pod-rb.yml

-----------------------------

apiVersion: v1   //v1, beta, ...

kind: Pod  //주인공

metadata:

  name: whoami-rb

  labels:

    type: app

spec:

  containers: //배열

  - name: app

    image: subicura/whoami:1

    readinessProbe:

      httpGet:

        path: /not/exist

        port: 8000

    initialDelaySeconds: 5

    timeoutSeconds:2

    periodSeconds: 5

    failureThreshold: 1

-----------------------------

  C. both (livenessProbe and readinessProbe)

$ vi whoami-pod-health.yml

-----------------------------

apiVersion: v1   //v1, beta, ...

kind: Pod  //주인공

metadata:

  name: whoami-health

  labels:

    type: app

spec:

  containers: //배열

  - name: app

    image: subicura/whoami:1

  livenessProbe:

    httpGet:

      path: /

      port: 4567  

  readinessProbe:     

    httpGet:

      path: /

      port: 4567  

-----------------------------

 

정리 겸 Multi Container Pod 띄워 보기

apiVersion: v1
kind: Pod
metadata:
	name: whoami-redis //사용할 이름
    labels:
    	type: stack
spec:
	containers:
    - name: app //container 이름1
      image: subicura/whoami-redis:1 //docker image
      env: //이 앱이 필요로하는 환경 변수 (배열)
      - name: REDIS_HOST
        value: "localhost" 
    - name: db //container 이름2
      image: redis //docker image

 

'공부 > Kubernetes' 카테고리의 다른 글

[k8s] vm에 세팅 순서 및 세팅시 참조할만한 내용  (0) 2020.06.14
[k8s] 6. kubernetes Replicaset  (0) 2020.04.04
[k8s] 4. kubernetes basic  (0) 2020.03.30
[k8s] 3. docker-compose practice  (0) 2020.03.29
[k8s] 2. docker practice  (0) 2020.03.29

+ Recent posts