반응형

아래 Script는 Kuberentes Node의 IP Address를 얻어와서, 이 IP Address로 Node에 SSH 접속하여 'shutdown' 명령을 수행하는 예제이다.

 

#!/bin/bash

for ip in $(oc get nodes  -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}')
do
   echo "reboot node $ip"
   ssh -o StrictHostKeyChecking=no core@$ip sudo shutdown -r -t 3
done
반응형

 

Prometheus Query를 몇달만에 수행하면, 나의 기억력이 떨어져서 손이 멈짓하는데

자주 사용하는 PromQL 예제를 여기에 메모하고 참조해야겠다.

 

##
## Kubernetes, OCP(Openshift)의 ETCD Pods CPU 통계 데이터 조회
##

pod:container_cpu_usage:sum{namespace="openshift-etcd", pod=~"etcd.+"}


##
## Kubernetes, OCP(Openshift)의 DNS Pods CPU 통계 데이터 조회
##

pod:container_cpu_usage:sum{namespace="openshift-dns", pod=~"dns-.+"}


##
## Kubernetes, OCP(Openshift)의 API Server Pods CPU 통계 데이터 조회
##
pod:container_cpu_usage:sum{namespace="openshift-apiserver", pod=~"apiserver-.+"}

 

위 예제의 마지막 Query를 실행하면 아래와 같은 챠트가 출력된다.

 

 

 

반응형

Shell script를 작성하다보면, 10 ~ 60초 정도 대기하는 시간에 멀뚱히 터미널을 쳐다보는 것이 지루할 때가 있다.

지루하지 않더라도 터미널에 수십초 동안 아무것도 출력되지 않으면,

"어~ 스크립트가 중간에 hang up 상태로 빠졌나?"

이런 의심을 하게 된다.

이럴 때, 시간이 흘러가는 것처럼 숫자가 올라가거나 내려가거나(count-up, count-down) 하면 좋다.

긴 설명은 필요없고, 아래 script를 활용하면 대기하는 지루함을 줄일 수 있다.

 

##
## NOTE:
##  macOS와 Ubuntu, CentOS의 date 명령에 대한 output format 옵션이 달라서 script가 조금 다르다.
##  


##
## NOTE: Ubuntu, CentOS에서 동작하는 스크립트
##

#!/usr/bin/bash

function countdown(){
   date_start=$((`date +%s` + $1));
   while [ "$date_start" -ge `date +%s` ]; do
     left_time="$(date -u --date @$(($date_start - `date +%s`)) +%M:%S)";
     echo -ne "Countdown  $left_time \r"
     sleep 0.1
   done
}

countdown 5


---


##
## NOTE: macOS에서 동작하는 스크립트
##

#!/opt/homebrew/bin/bash

function countdown(){
   date_start=$((`date +%s` + $1));

   while [ "$date_start" -ge `date +%s` ]; do
     curr_time=$((`date +%s`))

     left_time=$(($date_start - $curr_time))
     echo -ne "Countdown  $left_time \r"
     sleep 0.1
   done
}

countdown 3

 

반응형

 


작성일: 2023년 10월 15일

 


[ 강의 동영상 ]
계영수 님이 GNS3 강의 동영상을 만든지 4년이 지나서 지금 GNS3 버전과 GUI 구성이 조금 달라서 헷갈릴 수 있지만,
이 동영상이 큰 도움이 된다.

  https://www.youtube.com/playlist?list=PL30o9a_lTg-KN4UmwKj2txuY3Vrd1nMrx

 

 


GNS3 및 CISCO Switch 명령 예제 모음

 

 

테스트할 때마다 사용하는 명령을 명령어 수행 순서대로 기록해보았다.

 

 

CISCO Switch Port에 IP Address 설정하기

##
## CISCO Switch Port에 IP Address 설정하기
## 

R1# configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.

R1(config)# interface fastEthernet 0/0

R1(config-if)# ip address 10.1.1.1 255.255.255.0

R1(config-if)# no shutdown 

R1(config-if)# end
*Jul  2 21:14:42.231: %SYS-5-CONFIG_I: Configured from console by console

R1# ping 10.1.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/30/68 ms

R1#

 

 

CISCO Switch Loopback Port에 IP Address 설정하기

R1# configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z.

R1(config)# interface loop0
R1(config-if)#
*Jul  3 12:59:03.859: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up

R1(config-if)# ip address 1.1.1.1 255.255.255.255
R1(config-if)# end
R1#
*Jul  3 12:59:45.647: %SYS-5-CONFIG_I: Configured from console by console
R1#

 

 

CISCO Switch에 BGP 설정하기

##
## AS 100을 관리하는 라우터(R1) 설정
##

R1# configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z.

R1(config)# router bgp 100
R1(config-router)# neighbor 10.1.1.2 remote-as 200
R1(config-router)# end
R1#
*Jul  3 13:05:03.939: %SYS-5-CONFIG_I: Configured from console by console
R1#


##
## AS 200을 관리하는 라우터(R2) 설정
##

R2# configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z.

R2(config)# router bgp 200
R2(config-router)# neighbor 10.1.1.1 remote-as 100
R2(config-router)# end
R2#
*Jul  3 13:07:28.543: %SYS-5-CONFIG_I: Configured from console by console
R2#
*Jul  3 13:07:35.307: %BGP-5-ADJCHANGE: neighbor 10.1.1.1 Up 
R2#

 

 

BGP 설정 내용 확인하기

##
## 간략한 BGP 정보를 보는 명령
##

R1# show ip bgp summary

BGP router identifier 1.1.1.1, local AS number 100
BGP table version is 1, main routing table version 1

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.1.1.2        4          200       7       7        1    0    0 00:02:53        0


##
## 상세한 BGP Neighbor 정보를 보는 명령
##

R1# show ip bgp neighbors 
BGP neighbor is 10.1.1.2,  remote AS 200, external link
  BGP version 4, remote router ID 2.2.2.2
  BGP state = Established, up for 00:05:43   ## <-- state 값을 확인해야 함.
  Last read 00:00:20, last write 00:00:14, hold time is 180, keepalive interval is 60 seconds
  Neighbor sessions:
    1 active, is not multisession capable (disabled)
  Neighbor capabilities:
    Route refresh: advertised and received(new)
    Four-octets ASN Capability: advertised and received
    Address family IPv4 Unicast: advertised and received
    Enhanced Refresh Capability: advertised and received
    Multisession Capability: 
    Stateful switchover support enabled: NO for session 1
  Message statistics:
    InQ depth is 0
    OutQ depth is 0
    
                         Sent       Rcvd
    Opens:                  1          1
    Notifications:          0          0
    Updates:                1          1
    Keepalives:             8          8
    Route Refresh:          0          0
    Total:                 10         10
  Default minimum time between advertisement runs is 30 seconds

 For address family: IPv4 Unicast
  Session: 10.1.1.2
  BGP table version 1, neighbor version 1/0
  Output queue size : 0
  Index 1, Advertise bit 0
  1 update-group member
  Slow-peer detection is disabled
  Slow-peer split-update-group dynamic is disabled
                                 Sent       Rcvd
  Prefix activity:               ----       ----
    Prefixes Current:               0          0
    Prefixes Total:                 0          0
    Implicit Withdraw:              0          0
    Explicit Withdraw:              0          0
    Used as bestpath:             n/a          0
    Used as multipath:            n/a          0

                                   Outbound    Inbound
  Local Policy Denied Prefixes:    --------    -------
    Total:                                0          0
  Number of NLRIs in the update sent: max 0, min 0
  Last detected as dynamic slow peer: never
  Dynamic slow peer recovered: never
  Refresh Epoch: 1
  Last Sent Refresh Start-of-rib: never
  Last Sent Refresh End-of-rib: never
  Last Received Refresh Start-of-rib: never
  Last Received Refresh End-of-rib: never
				       Sent	  Rcvd
	Refresh activity:	       ----	  ----
	  Refresh Start-of-RIB          0          0
	  Refresh End-of-RIB            0          0

  Address tracking is enabled, the RIB does have a route to 10.1.1.2
  Connections established 1; dropped 0
  Last reset never
  Transport(tcp) path-mtu-discovery is enabled
  Graceful-Restart is disabled
Connection state is ESTAB, I/O status: 1, unread input bytes: 0            
Connection is ECN Disabled, Mininum incoming TTL 0, Outgoing TTL 1
Local host: 10.1.1.1, Local port: 37711
Foreign host: 10.1.1.2, Foreign port: 179
Connection tableid (VRF): 0
Maximum output segment queue size: 50

Enqueued packets for retransmit: 0, input: 0  mis-ordered: 0 (0 bytes)

Event Timers (current time is 0x118E84):
Timer          Starts    Wakeups            Next
Retrans            10          0             0x0
TimeWait            0          0             0x0
AckHold             9          6             0x0
SendWnd             0          0             0x0
KeepAlive           0          0             0x0
GiveUp              0          0             0x0
PmtuAger            1          0        0x157854
DeadWait            0          0             0x0
Linger              0          0             0x0
ProcessQ            0          0             0x0

iss: 1109643795  snduna: 1109644028  sndnxt: 1109644028
irs:  864525182  rcvnxt:  864525415

sndwnd:  16152  scale:      0  maxrcvwnd:  16384
rcvwnd:  16152  scale:      0  delrcvwnd:    232
          
SRTT: 737 ms, RTTO: 2506 ms, RTV: 1769 ms, KRTT: 0 ms
minRTT: 48 ms, maxRTT: 1000 ms, ACK hold: 200 ms
Status Flags: active open
Option Flags: nagle, path mtu capable
IP Precedence value : 6

Datagrams (max data segment is 1460 bytes):
Rcvd: 19 (out of order: 0), with data: 10, total data bytes: 232
Sent: 20 (retransmit: 0, fastretransmit: 0, partialack: 0, Second Congestion: 0), with data: 10, total data bytes: 232

 Packets received in fast path: 0, fast processed: 0, slow path: 0
 fast lock acquisition failures: 0, slow path: 0
TCP Semaphore      0x6AA22B60  FREE 

R1#

 

 

IP Routing Table 정보 조회하기

R1# show ip route 

Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      1.0.0.0/32 is subnetted, 1 subnets
C        1.1.1.1 is directly connected, Loopback0
      10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        10.1.1.0/24 is directly connected, FastEthernet0/0
L        10.1.1.1/32 is directly connected, FastEthernet0/0

R1#

 

 

BGP 이용하여 Network Route 광고(Advertisement)

##
## R1 라우터가 이웃 라우터에게 Advertisement하기
##

R1# configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z.

R1(config)# router bgp 100
R1(config-router)# network 1.1.1.1 mask 255.255.255.255   ## <-- Route 광고하기
R1(config-router)# end
*Jul  3 14:26:39.559: %SYS-5-CONFIG_I: Configured from console by console
R1#


##
## 이웃 라이터(예: R2)에서 수신한 Route Advertisement 정보를 확인
##

R2# show ip bgp summary 
BGP router identifier 2.2.2.2, local AS number 200
BGP table version is 2, main routing table version 2
1 network entries using 148 bytes of memory
1 path entries using 64 bytes of memory
1/1 BGP path/bestpath attribute entries using 136 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 372 total bytes of memory
BGP activity 1/0 prefixes, 1/0 paths, scan interval 60 secs

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.1.1.1        4          100      83      82        2    0    0 01:11:20        1  ## <- 이 값이 1로 변경되었는지 확인
R2#

 

 

BGP Network Route 광고 정보 조회

##
## 라우터 R1에서 BGP 정보 조회
##

R1# show ip bgp
BGP table version is 2, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  1.1.1.1/32       0.0.0.0                  0         32768 i
 R1#
 
 
##
## 라우터 R2에서 BGP 정보 조회
##

R2# show ip bgp
BGP table version is 2, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  1.1.1.1/32       10.1.1.1                 0             0 100 i
R2#

 

 

 

 

 

 

 

반응형

우리 말과 글로 된 BFD 문서와 영상이 있다면 딱 좋겠지만, 이것저것 다 찾아보니... 설명이 주변을 맴도는 느낌이다.

(너무 간단하고 쉬운 기능이라서 오히려 우리 나라 IT 종사자들이 자료를 안 만든 것 같다)

 

그냥 아래 영어로 된 동영상을 보는 것이 괜찮다. 

비록 영어지만, 말을 엄청 쉽게 하기 때문에 그냥 천천히 보면 이해가 된다. 

 

https://www.youtube.com/watch?v=C2UVsyxfBzw&t=300s 

 

 

위 영상이 아래 영상보다 쉬운 예제이고, 또박또박 말을 해줘서 훨씬 이해가 잘 된다.

위 영상을 먼저 보고, 아래 영상을 보는 것을 추천~~~

 

 

https://www.youtube.com/watch?v=nSq-0NRZc_8 

 

반응형

아래 Web Docs에 간단한 사용법과 예제가 있어서 급하게 MD 작성할 때 참조하기 좋다.

 

 

https://heropy.blog/2017/09/30/markdown/

 

MarkDown 사용법 총정리

마크다운(MarkDown)에 대해서 알고 계신가요?파일 확장자가 .md로 된 파일을 보셨나요?웹 개발을 하면서 아마 README.md라는 이름의 파일을 한 번은 보셨을텐데, ...

heropy.blog

 

반응형

 

(1)  OCP의 Web Console에서 오른쪽 위에 있는 "계정 이름"을 클릭한다.

 

(2)  [ Copy login command ]을 클릭하면, 새 브라우저 창이 뜬다.

 

 

 

(3)  위 화면에서 [ Copy login command ]을 클릭하면 아래와 같은 브라우저 창이 새로 열릴 것이다.
       이 때 [ Display Token ]을 클릭한다.

 

 

 

(4)  아래와 같이 OCP API Token과,  oc login 명령 예시가 보일 것이다.

 

 

 

(5)  아래와 같이 curl로 TOKEN 값을 이용해서 API를 호출할 수 있다.

 

$  curl -X GET -H "Authorization: Bearer sha256~v9-kYQ_N...중간 생략...z1X5UA" https://api.myasset.cloud:6443/api/v1/namespaces/openshift-etcd/pods --insecure
반응형

Elastic 가이드 북 (김종민 님)

업무 때문에 1~2일 이내에 잽싸게 Elastic을 스터디하고, ElasticSearch를 설치 및 Client App을 개발해야 하는데 어디서 부터 봐야 하는지 막막했다.

그러다가 찾은 Web Docs가 김종민 님의 "Elastic 가이드 북" 이었다.

 

https://esbook.kimjmin.net/

 

Elastic 가이드 북 - Elastic 가이드북

7. 인덱스 설정과 매핑 - Settings & Mappings

esbook.kimjmin.net

 

위 Elastic 가이드 북을 읽고, Elastic에 관해 두루두루 이해를 하고 깊게 봐야 하는 것만 Elastic 공식 Web Site에서 Document를 보면 딱 좋다.

 

 

Elastic Official Guide Documents

Elasticsearch 및 그 주변의 Stack Tool에 관한 모든 것이 다 설명되어 있다.

게다가 Elasticsearch Client API도 Programming Language 별로 설명 및 Example이 잘 작성되어 있다.

Elasticsearch를 사용하다가 궁금하거나 필요한 정보가 있다면, 이 Official Guide Docs를 보는 것이 좋다.

 

 

 

Welcome to Elastic Docs | Elastic

 

www.elastic.co

 

 

 

 

ElasticSearch REST API Example

내가 많이 사용하는 검색 예시이다. 급할 때 참고해서 작성하면 좋을 듯...

 

## 참고: 아래 HTTP REST API 예시는 Kibana의 [Dev Tools] UI에서 수행하기 !!!


##
## index 목록과 요약 정보(Document 개수, 용량) 조회하기
##
GET _cat/indices?v

## 응답은 이렇다.
health status index           uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   example-index-0 Up1jqY3PTG2pLHdOLJcLGQ   1   1   18126912          739      2.9gb          2.9gb
yellow open   test-index      nGaLdNNORHKfJF1maBlNvw   1   1          2            0     11.2kb         11.2kb




##
## "ALARM" 문자열이 있는 Document를 탐색
##

GET _search?size=50
{
  "query": {
    "match": {
      "message": "ALARM"
    }
  }
}


##
## "kubernetes.container_name": "apiserver" 인 Document를 탐색
##

GET _search?size=50
{
  "query": {
    "match": {
      "kubernetes.container_name": "apiserver"
    }
  }
}


##
## Pod labels에 "vendor=KingSejong" 설정된 Pod가 출력만 로그(즉, Docs)만 검색
##

GET app-*/_search?size=30
{
  "query": {
    "match": {
      "kubernetes.flat_labels": "vendor=KingSejong",
    }
  }
}


##
## Index가 app-000051인 문서 전체를 열람
##

GET app-000051/_search
{
  "query": {
    "match_all": {}
  }
}


##
## Pod의 labels에 "app=my-test-app"가 설정되어 있는 Pod가 출력한 로그 중에서
## 로그의 내용이 "CREATE" 문자열을 포함하는 Document만 검색
##

GET _search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "kubernetes.flat_labels": "app=my-test-app"
          }
        },
        {
          "match_phrase": {
            "message": "CREATE"
          }
        }
      ]
    }
  }
}

 

 

 

 

CURL 명령으로 Elasticsearch의 Index, Document를 조회, 생성하는 예제

아래 Blog에 작성된 예제 코드를 그대로 따라하면,

  • Index
    • 생성, 삭제, 리스트를 조회, 특정 Index를 조회하는 것을 할 수 있다.
  • Document
    • 생성, 삭제, 리스트를 조회, 특정 Document를 조회하는 것을 할 수 있다.

 

https://twofootdog.tistory.com/55

 

Elasticsearch REST API 사용하기(인덱스, 도큐먼트 CRUD)

Elasticsearch에서 인덱스(index)와 도큐먼트(document)를 조회/등록/변경/삭제 등을 수행하기 위해서는 REST API를 호출하게 된다. 이번 글에서는 Elasticsearch에서 사용하는 API에 대해 알아보고자 한다. 1.

twofootdog.tistory.com

 

+ Recent posts