반응형

 

작성일: 2022년 2월 6일

 

오늘 현대백화점 판교점에 가서 점심 식사를 했다.

현대백화점 푸드코트에서 밥 먹고, 바로 교보문고에 가서 책 3권 구입하고, 바로 주차장으로 갔다.

아마 백화점 실내에서 1시간 10분 ~ 20분 정도 시간을 보낸 것 같다. (입차/출차 시간은 이것보다 10분 정도 더 될듯. 전기차 충전소 찾느라 보낸 시간이 있으니...)

 

현대백화점 식당(sooooo) 직원이 음식값 결제할 때, 주차 정산까지 했다고 말해줬기 때문에 나는 따로 주차정산기(키오스크)에서 정산을 하지 않고 주차장 출구로 나왔는데, 차단기는 안 올라가고 7,000원이라는 요금만 전광판에 표시되었다.

 

"이건 뭐지? 주차 요금이 왜 나와?"

 

주말이라 차들이 주차장 출구에 길게 줄지어 섰기 때문에 호출 버튼을 누를 수 없었다.

일단, 바로 카드로 주차 요금 결제하고 집으로 왔다. 

집에 와서 생각해보니 sooooo 식당 직원이 주차 정산을 하지 않은 것 같다. 주차 금액이 내가 현대백화점에 머물렀던 시간만큼 모두 청구되었기 때문이다.

그래서 다시 그 식당 직원에게 문의 전화를 해보니, 본인은 정확하게 차량 등록을 해줬다는 것이다.

그렇다면, 현대백화점 주차 관리 시스템에 문제가 있나 싶어서, 아래처럼 현대백화점 고객의 의견 에 문의 글을 올렸다.

일단 뭐가 문제인지 궁금증을 해결해보고 싶었다.

 

아래 문의 글을 올리고 나서, 1시간 뒤에 현대백화점에서 전화가 왔다.

(일요일인데, 이렇게 바로 고객 응대를 해주니 고맙다)

 

 

 

 

 

고객센터 직원이 내 자동차 번호를 물어보고, 차량 조회를 해보니 내가 주차한 시간 그리고 식당에서 주차 등록을 했는지 여부를 확인해주었다.

 

결론은  "식당에서 주차 정산 등록을 하지 않았다"

 

물론 그 직원이 일부러 주차 정산을 하지 않았다고 볼 수는 없다. 아직 일이 미숙해서 그럴 수 있다.

또는 주차 정산 시스템이 마침 그때 오류가 있어서 DB에 기록되지 않았을 수도 있다.

나도 이런 과금 시스템을 개발한 개발자(프로그래머)로써 가끔 상용 시스템에 이런 이슈가 발생하면 머리카락이 쭈뼜한다. ㅠㅠ

 

 

아무튼 고객센터 직원이 내가 현대백화점 식당과 교보문고에서 지출한 내역을 바로 확인하고,
주차비를 모두 취소해주었다.

 

 

 

 

오늘의 교훈: 현대백화점을 이용할 때는 ...

현대백화점 앱에 있는 주차권을 사용하는 것이 어려모로 편할 것 같다.

한 직원의 입력 실수로 이렇게 여러 사람 피곤하게 후처리하는 것보다, 깔끔하게 앱에 있는 주차권을 사용하는 것이 좋을 듯... 

반응형

 

맥을 사용한지 6년째인데, 그 동안 연말 정산을 할 때면 패러렐즈Windows 10을 부팅해서 연말 정산을 해왔다.

왜냐고? 그 이유는;

 

  • 국세청 간소화 홈페이지에서 접속하기 위해 설치해야 할 MS Windows용 EXE 파일들 때문이고,
  • 인증도 Windows만 지원하는 Plugin 프로그램을 설치해야 했기 때문

 

 

그런데 2022년에는 Windows 10를 사용하지 않고, Macbook M1만 이용해서 연말정산을 해보기로 마음을 먹었다.

예전에 안 되던 것들이 Macbook M1에서 대부분 잘 되었다.

 

  • 국세청 홈페이지 로그인 --> 네이버 인증으로 간단하게 로그인했다.   정말 편하다. (감동)
  • 증빙 자료인 PDF 파일 다운로드 --> 잘 다운로드 되었다.
  • 내가 다니는 회사는 더존 프로그램으로 연말정산을 처리하는데, Mac M1에서도 아주 잘 동작했다.

 

이제는 MS Windows 없이도 모든 업무 처리가 잘 된다.  Macbook을 사용하기 편한 환경이 점점 잘 만들어지고 있는 듯 :)

 

 

 

 

반응형

 

장황한 설명보다는 예제가 이해가 쉬울 듯하여, 아래의 예제 코드를 작성했다.

 

 

Case:  Kubernetes Cluster 외부에서 Kubernetes Cluster 내부 Service에 접근

아래와 같은 Server, Client App의 구성을 가정하고 아래 예제를 따라해본다.

  • Server App 위치: Kubernetes Cluster 내부
  • Client App 위치: Kubernetes Cluster 외부

 


API 접근용 TOKEN 값을 알고 있다면, 바로 아래 예제를 따라서 수행하면 된다.

 

$  cat curl-pod-list.sh
##
## Create a Pod on myspace namespace
##

TOKEN=$(oc whoami -t)
ENDPOINT="https://api.ocp4.mycluster.io:6443"
NAMESPACE="myspace"

echo ""
echo "TOKEN:     $TOKEN"
echo "ENDPOINT:  $ENDPOINT"
echo "NAMESPACE: $NAMESPACE"
echo ""


##
## Get Pod list in a namespace
##

RESPONSE_FILE=./curl-pod-list-response.json

curl -v -k -o $RESPONSE_FILE \
    -H "Authorization: Bearer $TOKEN" \
    -H 'Accept: application/json' \
    $ENDPOINT/api/v1/namespaces/$NAMESPACE/pods


cat $RESPONSE_FILE


echo ""
echo "====================================================="
echo "                     Summary                         "
echo "====================================================="
echo ""

jq '.items[] | {PodName: .metadata.name, PodIP: .status.podIPs, StartTime: .status.startTime, Node: .spec.nodeName}' curl-pod-list-response.json

$

 

 

Case:  Kubernetes Cluster 내부에서 Kubernetes Cluster 내부 Service에 접근

아래와 같은 Server, Client App의 구성을 가정하고 아래 예제를 따라해본다.

  • Server App 위치: Kubernetes Cluster 내부
    • Server는 Elasticsearch API Server 역할
  • Client App 위치: Kubernetes Cluster 내부

즉, Cluster 내부에서 Pod간 통신이라고 가정한다.

 


[ 참고 ]
API 접근용 TOKEN은Pod 내부의 /var/run/secrets/kubernetes.io/serviceaccount/token 파일에 있다.
ServiceAccount 별로 Token을 생성하고 서비스 접근 권한을 부여하기 때문에 Client App 역할을 하는 Pod가 사용하는 ServiceAccount에게 Server Pod의 Service에 접근할 수 있도록 Role을 Binding해줘야 한다. 

 

 

$  cat clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cluster-admin-my-service-account
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: system:serviceaccount:my-namespace:my-service-account
  
  $  kubectl apply -f clusterrolebinding.yaml

 

 

#!/bin/bash


##
## Run this script in my example pod !
##
##  1) Jump into my example pod
##     $  kubectl exec -n my-namespace -it my-example-pod -- bash
##
##  2) Run this script in the above pod
##     $  chmod +x run-es-query-in-container.sh
##     $  ./run-es-query-in-container.sh
##


TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
ENDPOINT="https://elasticsearch.openshift-logging:9200"
RESPONSE_FILE=curl-es.json

rm  $RESPONSE_FILE

echo ""
echo "TOKEN:     $TOKEN"
echo "ENDPOINT:  $ENDPOINT"
echo ""


curl -k -o $RESPONSE_FILE \
    -H "Authorization: Bearer $TOKEN" \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -d '{ "query": { "match": { "message": "cm-apiserver" } } }' \
    $ENDPOINT/infra-000094/_search?size=3



jq ".hits.hits[]._source | { kubernetes, message }" $RESPONSE_FILE
반응형

 

긴 설명보다는 아래의 예제를 보는 것이 이해가 빠를 것이다.

 

##
## my.json 이라는 파일에 아래와 같이 내용이 있다고 가정하고 Parsing을 해보겠다.
##

$  cat  my.json
{
  "kind": "PodList",
  "items": [
    {
      "metadata": {
        "name": "namf-v1-65889c9fc7-ksbll",
        "generateName": "namf-v1-65889c9fc7-",
      },
      "status": {
        "podIPs": [
          {
            "ip": "10.130.2.59"
          }
        "startTime": "2022-01-21T13:55:53Z",
        
        ... 중간 생략 ...
        
      }


##
## 위와 같이 복잡한 JSON 문서 중에서 내가 원하는 부분만 추려서 아래와 같이 볼 수 있다.
##

$  jq '.items[] | {PodName: .metadata.name, PodIP: .status.podIPs, StartTime: .status.startTime, Node: .spec.nodeName}'  my.json

{
  "PodName": "namf-v1-65889c9fc7-ksbll",
  "PodIP": [
    {
      "ip": "10.130.2.59"
    }
  ],
  "StartTime": "2022-01-21T13:55:53Z",
  "Node": "worker3.ocp4.bmt.io"
}
{
  "PodName": "namf-v2-fbb5d7bf4-vhz8g",
  "PodIP": [
    {
      "ip": "10.130.2.58"
    }
  ],
  "StartTime": "2022-01-21T13:55:53Z",
  "Node": "worker3.ocp4.bmt.io"
}

$
반응형

 

가끔 쉘 프로그래밍을 하다보면, 문자열의 큰 따옴표를 떼어내야 할 경우가 있다.

아래 예제처럼 작성하면 따옴표를 제거할 수 있다.

 

##
## APP_NAME이 "myapp"과 같이 따옴표가 앞 뒤에 포함되어 있다고 가정하자.
## 문자열 시작, 끝에 붙여 있는 따옴표를 떼려면 아래와 같이 sed 명령으로 변경할 수 있다.
## 

APP_NAME=$(sed -e 's/^"//' -e 's/"$//' <<< $APP_NAME)

 

반응형

 

KVM, OpenStack, Kubernetes, OCP 등을 사용하다보면 VM에서 또는 Container 내부에서 CPU를 Pinning하거나 NUMA Node를 지정해야 할 경우가 있는데, 이런 CPU Pinning 설정/관리에 대한 내용을 기록해볼까~~~하고 마음을 먹었다. 그러나 너무 잘 작성한 블로그와 WebDocs가 있어서 그냥 Link만 걸어두기로 마음을 바꾸었다. :)

 

 

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/virtualization/ch33s08

 

33.8. Setting KVM processor affinities Red Hat Enterprise Linux 5 | Red Hat Customer Portal

The Red Hat Customer Portal delivers the knowledge, expertise, and guidance available through your Red Hat subscription.

access.redhat.com

 

 

 

https://mhsamsal.wordpress.com/2020/05/12/how-to-perform-cpu-pinning-for-kvm-virtual-machines-and-docker-containers/

 

How to Perform CPU Pinning for KVM Virtual Machines and Docker Containers

Note: This post provides technical details for our paper “The Art of CPU-Pinning: Evaluating and Improving the Performance of Virtualization and Containerization Platforms” published in…

mhsamsal.wordpress.com

 

 

 

https://superuser.com/questions/1519358/qemu-kvm-cpu-pinning

 

QEMU/KVM cpu pinning

I have set up my VM with pci passthrough and now I am trying to set up cpupinning. How do I verify that it does in fact work? My config regarding cpu parameters: ... <vcpu placement="static">...

superuser.com

 

 

반응형

 

 

 

 

https://access.redhat.com/documentation/ko-kr/openshift_container_platform/4.6/html/networking/add-pod

 

11.7. SR-IOV 추가 네트워크에 pod 추가 OpenShift Container Platform 4.6 | Red Hat Customer Portal

The Red Hat Customer Portal delivers the knowledge, expertise, and guidance available through your Red Hat subscription.

access.redhat.com

 

 

 

https://dramasamy.medium.com/high-performance-containerized-applications-in-kubernetes-f494cef3f8e8

 

High-Performance Containerized Applications in Kubernetes

The Single Root I/O Virtualization (SR-IOV) specification is a standard for a type of PCI device assignment that can share a single device…

dramasamy.medium.com

 

반응형

 

 

구성 환경

 

Host OS: Ubuntu

Hypervisor: KVM

VM(Guest): CentOS, Ubuntu, CoreOS 등 (Linux 계열)

 

 

우선 아래의 Web Docs를 보고 설정 및 테스트해보고, 잘 동작하면 여기에 테스트한 내용을 기록할 예정이다.

 

https://help.ubuntu.com/community/KVM%20-%20Using%20Hugepages

 

KVM - Using Hugepages - Community Help Wiki

Introduction The computer memory is divided in pages. The standard page size on most systems is 4KB. To keep track on what information is stored in which page, the system uses a page table. Searching in this page table is (in computer terms) a time costly

help.ubuntu.com

 

 

블로그 작성자: sejong.jeonjo@gmail.com

 

+ Recent posts