반응형

 

작성일: 2024년 3월 1일

 

Pod 생성 방법 - A

급하게 Pod만 생성해서 Kubernetes 기능을 확인해야 할 경우가 있다.

이럴 때, 아래와 같이 명령 한번 실행해서 Pod를 deploy할 수 있다.

$ kubectl  create  deployment  nginx  --image=nginx

 

또는 아래와 같이  YAML 형식으로 Pod 배포가 가능하다.

 

Pod 생성 방법 - B

$  kubectl  create  namespace  andrew
$  kubectl  apply  -n andrew  -f -  <<EOF

apiVersion: v1
kind: Pod
metadata:
  name: almighty
  labels:
    app: almighty
spec:
  terminationGracePeriodSeconds: 3
  containers:
  - name: almighty
    image: docker.io/andrewloyolajeong/almighty:0.2.4
    
EOF

 

 

[ 참고 ]
docker.io/andrewloyolajeong/almighty 컨테이너 이미지 내부 동작에 대한 설명
    - NGINX 서버 구동 (TCP 80 포트를 Listening)
    - SSHD 서버 구동 (TCP 22 포트를 Listening)
    - Golang으로 구현한 Simple HTTP Server 구동 (TCP 8080 포트를 Listeing)
    - Golang으로 구현한 UDP 서버 구동 (UDP 9090, 9091, 9092 포트를 사용)

 

 

그런 후에 아래와 같이 Service Resource도 만들 수 있다.

 

Service 리소스 생성 방법

$  kubectl  apply  -n andrew  -f -  <<EOF

apiVersion: v1
kind: Service
metadata:
  name: almighty
  annotations:
    ## 아래 nlb 타입은 UDP 패킷을 LB 처리하기 위한 설정이다.
    ## 만약, UDP 패킷을 처리할 일이 없다면, "nlb" 타입을 지정하지 않아도 된다.
    oci.oraclecloud.com/load-balancer-type: "nlb"  ## Oracle Cloud를 사용하는 경우 설정
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local     ## Public Cloud를 사용하는 경우 설정
  selector:
    app: almighty
  ports:
    - name: myweb
      protocol: TCP
      port: 8080
      targetPort: 8080
    - name: yourweb
      protocol: TCP
      port: 1080
      targetPort: 80
    - name: myudp
      protocol: UDP
      port: 9090
      targetPort: 9090
  
EOF

 

PV 생성

진짜 간단하게 PV, PVC 생성에 관해서 작성하려고 했는데 Private Cloud 환경과 Public Cloud 환경에 따라 생성 방법이 다르고,

Public Cloud Infra를 제공하는 회사마다 Manifest 작성 방법이 다 달라서 이 부분은 아래와 같이 해당 Public Cloud Infra의 Web Docs 주소를 남기는 것으로 마무리하겠다.

가장 많이 사용되는 CSI[Cluster Storage Interface] 몇 가지 사례만 사용법을 익히면 될듯하다.

 

Oracle Cloud Infra를 사용한다면, 아래 Web Docs를 읽고 예제를 따라하면 잘 동작한다.

https://docs.oracle.com/en-us/iaas/Content/ContEng/Tasks/contengcreatingpersistentvolumeclaim.htm

 

Creating a Persistent Volume Claim (PVC)

When a PVC is created using the CSI volume plugin (provisioner: blockvolume.csi.oraclecloud.com), you can expand the volume size online. By doing so, you make it possible to initially deploy applications with a certain amount of storage, and then subsequen

docs.oracle.com

 

 

 

 

반응형

Kubernetes나 Docker를 이용해서 이것저것 사용하다보면, 나중에는 사용하지 않고 남아 있는 쓰레기 image들이 있다.

이것들을 한방에 지우는 스크립트를 작성했다.

 

아래 Script는 ":5000" 문자열을 포함하는 container image만 찾아서 지운다.

#!/usr/bin/bash

REMOVE_ITEM_LIST=$(docker image ls | grep ":5000" | awk '{ printf "%s:%s\n", $1, $2 }')

for REMOVE_ITEM in $REMOVE_ITEM_LIST
do
  echo "TO Remove:  $REMOVE_ITEM"
  docker image rm $REMOVE_ITEM
done

 

반응형

2022년 7월 현재, 아래 Red Hat 문서가 MetalLB BGP Mode에 관한 문서 중에서는 제일 설명이 잘 되어 있는 것 같다.

 

OCP(Openshift Container Platform)에서 BGP Mode의 MetalLB를 사용할 것이라면 아래 Red Hat Docs를 참고.

다루는 내용은 이렇다.

  • MetalLB, BGP, BFD에 관한 설명
  • BGP Mode의 MetalLB를 사용하기 위한 사전 요구 사항
  • 테스트 예시 환경 (그림 포함)
  • 테스트 해보기.
 

How to Use MetalLB in BGP Mode

The purpose of this article is to introduce MetalLB design and goals and cover in more detail this new mode.

content.cloud.redhat.com

 

 

 

 

위 Red Hat 문서를 찬찬히 읽어서 이해를 다 했다면, 굳이 아래 문서는 안 봐도 된다.

위 문서가 웬만한 것을 다 Cover하기도 하고, FRR(FR Routing) 같은 Router Emulator를 이용해서 실질적으로 실습환경도 잘 설명하고 있어서 위 문서 1개로 스터디를 끝낼 수 있다.

 

 

도움이 될만한 Web Docs

MetalLB에서 BGP 모드를 사용하는 개념과 Network 구성에 관한 Web Docs이다.

그림과 예제를 이해하기 잘 작성했다.

 

 

 

MetalLB BGP 모드를 이용한 Loadbalaning

기본적인 구성은 아래와 같이 worker3대가 10.10.2.0/24의 인터페이스가 연결되어 있으며, 같은 네트워크에 BGP를 사용할 L3SW가 연결 되어 있다. 그리고 Client 는 172.16.100.0 대역대로 L3SW와 연결 되어 있

cyuu.tistory.com

 

'kubernetes' 카테고리의 다른 글

간단하게 Pod, Service, PV 리소스 생성하기  (0) 2021.11.03
Docker image 목록 한방에 지우기  (0) 2021.11.03
Istio Circuit Break  (0) 2021.08.07
Port configurations for Kubernetes service  (0) 2021.07.20
Dockerfile Example  (0) 2021.07.19
반응형

아래의 글이 쉽게 설명되어 있다. 시간될 때, 다시 꼼꼼하게 읽어봐야겠다.

 

참고: istio v1.2  kubernetes v1.14로 테스트한 과정이 설명되어 있다.

 

http://itnp.kr/post/istio-circuit-break

 

Istio Circuit Breaking

Circuit Breaking이란 전기의 회로차단기에서 차용한 개념으로 전기가 흐르다가 문제가 생기면 회로를 open하여 더이상 전기가 흐르지 않도록하여 문제가 되는 부분으로 부터 전체 시스템에 장애가

itnp.kr

 

반응형

Kubernetes service의 manifest를 작성하다보면, port와 targetport가 헷갈린다.

각 term이 의미하는 것을 지금 이해해도, 몇 개월 뒤에 다시 service resource에 대한 manifest를 작성하려고 보면 또 헷갈려서 다시 문서를 뒤적거리게 된다.

 

  • Port
    • Service Object 자체의 Port.  즉, 여러 Pod를 묶어서 이 Port 값으로 노출시킨다.
    • 한 kubernetes cluster 내에서 다른 pod가 내 pod에게 Layer 4 메시지를 전송할 때 바라보는 port number.
    • 만약 MetalLB, NGINX 같은 Ingress Gateway를 사용하는 경우라면, 이 'port' 값이 Cluster 외부에서 LB(즉, Ingress Gateway)를 통해 들어오는 Port number가 된다.
      예를 들어,   http://{EXTERNAL-IP}:{SERVICE-PORT}
      이런 형태가 된다.
  • TargetPort
    • 내 pod 안에 있는 container가 listening하고 있는 port number.
    • container(즉, app)이 어떤 port를 listening하고 있는지 정확한 값을 알고 설정해야 한다. (HTTPD 설정시 기본 값을 이용했다면, 대부분 80이지 않을까?)
  • NodePort
    • kubernetes 밖으로 노출시킬 port number.
    • Ingress Gateway 또는 Istio를 사용하는 경우에는 딱히 설정할 필요없는 설정 항목.

 

 

Example

만약 2개의 TCP Port를 Service로 오픈하고 싶다면, 아래와 같이 Service Resource와 Pod Resource를 설정한다.

 

##
## Service Manifest Example
##
kind: Service
metadata:
... 중간 생략 ...
spec:
  ports:
  - name: metrics
    port: 24231
    protocol: TCP
    targetPort: metrics
  - name: logfile-metrics
    port: 2112
    protocol: TCP
    targetPort: logfile-metrics
... 중간 생략 ...   
    


##
## Pod Manifest Example
##
kind: Pod
metadata:
... 중간 생략 ...
spec:
  containers:
    name: my-container  
    ports:
    - containerPort: 24231
      name: metrics
      protocol: TCP
    - containerPort: 2112
      name: logfile-metrics
      protocol: TCP
... 중간 생략 ...

'kubernetes' 카테고리의 다른 글

MetalLB BGP 모드를 이용한 Loadbalaning  (0) 2021.08.30
Istio Circuit Break  (0) 2021.08.07
Dockerfile Example  (0) 2021.07.19
Istio Web Docs - 읽기 좋은 순서대리 정리  (0) 2021.07.19
nsenter  (0) 2021.07.13
반응형

아래와 같은 형식으로 Dockerfile을 작성한다.

## syntax=docker/dockerfile:1


FROM ubuntu:18.04


## 이 Dockerfile 작성자
MAINTAINER sejong


## `apt install ...` 명령으로 패키지 설치시 사용자 입력을 요구하는 것을 방지
## 반드시 `apt install` 명령보다 앞에 DEBIAN_FRONTEND 환경 변수를 설정해야 한다.
ENV DEBIAN_FRONTEND=noninteractive


## 참고: 위 변수를 apt install 명령과 같이 방법도 있다. (아래 예시 참고)
##   `DEBIAN_FRONTEND=noninteractive apt install -y tzdata` 


RUN apt update

RUN apt install -y ca-certificates \
                   net-tools \
                   tzdata \
                   wget
                   
                   
## Timezone
ENV TZ Asia/Seoul


## Locale and Language
ENV LANG C.UTF-8
ENV LANGUAGE ko
ENV LC_ALL C.UTF-8


## 외부 Storage를 마운트하기 위한 정보
RUN mkdir  /mnt/my_volume
VOLUME     /mnt/my_volume


COPY  my-script.sh /usr/local/bin/my-script.sh
ENTRYPOINT ["my-script.sh"]


COPY . /app
RUN make /app
EXPOSE  8080
CMD python /app/app.py

 

Dockerfile을 작성한 후, docker image를 만들기 위해 아래와 같이 build 명령을 수행한다.

$ docker build -t myapp:v1 .

 

 

'kubernetes' 카테고리의 다른 글

Istio Circuit Break  (0) 2021.08.07
Port configurations for Kubernetes service  (0) 2021.07.20
Istio Web Docs - 읽기 좋은 순서대리 정리  (0) 2021.07.19
nsenter  (0) 2021.07.13
Kubernetes Port-Forward 설정  (2) 2021.07.10
반응형

Istio를 처음 접할 때, 어떤 순서로 Web docs를 읽어야 할지 몰라서, 우왕좌왕할 수 있다. 아래의 순서로 읽으면 Istio의 동작 원리를 이해하면서 연습도 같이 할 수 있어서 좋다.

 

Getting Started

 

Getting Started

Try Istio’s features quickly and easily.

istio.io

 

위 문서를 읽은 직후, 아래의 문서를 읽으면서 실습하는 것이 좋다.

Next steps

 

Getting Started

Try Istio’s features quickly and easily.

istio.io

 

 

Best Practices

 

Best Practices

Best practices for setting up and managing an Istio service mesh.

istio.io

 

'kubernetes' 카테고리의 다른 글

Port configurations for Kubernetes service  (0) 2021.07.20
Dockerfile Example  (0) 2021.07.19
nsenter  (0) 2021.07.13
Kubernetes Port-Forward 설정  (2) 2021.07.10
Kubernetes Ingress Gateway - Concept & Practice  (0) 2021.07.10
반응형

매번 kubernetes pod에 접속(attach)하기 귀찮을 때, worker node에서 'nsenter' 명령을 이용하면 쉽게 pod 내부의 resource에 접근하는 Linux command를 실행할 수 있다.

예를 들어, Pod 내부의 NIC port의 상태를 조회하거나 packet flow를 dump할 때 nsenter 명령을 사용하면 손가락이 편해질 수 있다.

 

 

아래 블로그에 nsenter CLI를 이용하여 container network에 접근하는 예제가 있다.

(Linux container와 network namespace를 만들어 가는 과정을 설명하는 중간에 nsenter CLI가 사용된다. nsenter 자체에 대한 블로그 글이 아님에 주의할 것)

https://labs.iximiuz.com/tutorials/container-networking-from-scratch

+ Recent posts