1. argo를 담을 namespace 생성

kubectl create namespace argo

2. argo를 apply한다(github 주소를 통해)

kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo/stable/manifests/install.yaml

3. namespace argo에서 service 목록을 보면, argo web page에 나온 것 처럼 argo-ui가 아닌, argo-server로 표기되어있다. 현재, external IP가 존재하지 않으므로, Load Balancer를 patch 해줌으로써 해결한다. (patch 또는 edit 둘다 가능할듯)

kubectl patch svc argo-server -n argo -p '{"spec": {"type": "LoadBalancer"}}'

그럼 다음과 같이, 20.194.12.66:2746 으로 인터넷을 통해 접속할 수 있다.

Argo Web 화면 예시

4. argo 권한문제

rolebinding을 통해 해결해준다. (정확한 이유는 잘 모르겠음, service account가 argo 또는 default에 clsuter-admin 권한을 부여시켜서 argo가 kubernetes resource에 접근 가능하도록 하는 느낌)

kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=argo:default -n argo
# 또는
kubectl create rolebinding argo-admin --clusterrole=admin --serviceaccount=default:default -n argo

5. argo 예제 실행해보기

argo submit -n argo --watch https://raw.githubusercontent.com/argoproj/argo/master/examples/hello-world.yaml

argo submit 명령어를 사용하면 shell에서 볼 수 있고

kubectl create -n argo https://raw.githubusercontent.com/argoproj/argo/master/examples/hello-world.yaml

kubectl 명령어로도 실행 가능하다

 

웹에서도 workflow가 실행됨을 확인할 수 있음.

'IT > Argo' 카테고리의 다른 글

argo role 문제  (0) 2020.08.11
kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=argo:default -n argo

 

또는 

 

kubectl create rolebinding argo-admin --clusterrole=admin --serviceaccount=default:default -n argo

 

로 해결

 

 

'IT > Argo' 카테고리의 다른 글

argo 설치  (0) 2020.08.11

안녕하세요 보나에요~ 전에꺼에 이어서 해볼께요!

 

(1)을 보시고 싶으면 https://bonahbruce.tistory.com/76

여기로 들어가보세요!

 

kubernetes에 jupyter container 띄우기 ( azure 활용)

안녕하세요 본아에요~ 오늘은 portal.azure.com의 vm 안에서 aks, acr등을 활용하여 jupyter notebook을 올리는 작업을 한번 진행해 보겠습니다.(부족한 점이 많아요) 1. portal azure 로그인 후, 리소스 그룹을..

bonahbruce.tistory.com

 

전에거에서는, persistent volume이 없어서, jupyter에서 데이터분석을 열심히~ 했어도 

기록이 남아있지 않아요.... 말짱 도루묵.... 인거죠

 

왜냐면 k8s는 기본적으로 stateless한 클러스터를 구축하기 때문에

자기가 사용할 volume을 미리 만들어서 붙여주거나, (static)

아니면, pod를 띄우면서 dynamic하게 생성하는 방법이 있어요! 

 

동적으로 하는거는 아직 제가 서툴러서... 우선 제가 구현해본 static 버전으로 설명을 드려볼게요!!

 

우선 저는 public cloud 중 azure를 사용하고 있어요~!

 

그래서! 사용할 storage(창고)를 위해 storage account를 개설할거에요!

 

요렇게 생겨먹은것을 생성한 뒤,

access keys 부분으로 들어가셔서, key1 또는 key2를 복사해주세요

 

그 후,

 

kubectl create secret generic fileshare-secret --from-literal=azurestorageaccountname=bonahstorage --from-literal=azurestorageaccountkey=<key1입력> -n jupyter

이런식으로 secret을 생성해주면 됩니다!

여기서 

fileshare-secret = secret의 이름

bonahstorage = Azure에 있는 storageaccount 이름

<key1입력> = key에 있는 엄청 긴 값(여기에서 <>는 제거하고 넣으셔야되요)

 

자,,

그렇게 생성을 하고 나면

이제 yaml 파일 두개를 생성해야되요!

 

1. pv

pv는 이제 persistent volume이라고 해서, 실제 존재하는 pv를 명시하는 부분이고

2. pvc

pvc는 이제 요청을 하는거에요. 나 요런 저장공간을 갖고있는 pv를 붙이려고해!!

그러면 pv에 있는 저장소중 pvc에서 요청한 것에 충족되는 pv를 불러와서 inbound하게 됩니다. (제가 이해한바론..)

 

pv.yaml파일은 다음과 같이 생겼어요

 

kind: PersistentVolume
apiVersion: v1
metadata:
  name: fileshare-pv
  labels:
    usage: fileshare-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  azureFile:
    secretName: fileshare-secret
    shareName: bonah
    readOnly: false

pvc.yaml파일은 다음과 같이 생겼어요

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: fileshare-pvc
  # Set this annotation to NOT let Kubernetes automatically create
  # a persistent volume for this volume claim.
  annotations:
    volume.beta.kubernetes.io/storage-class: ""
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  selector:
    matchLabels:
      usage: fileshare-pv

두 yaml 파일을 모두 apply 해주세요!

kubectl apply -f pv.yaml -n jupyter
kubectl apply -f pvc.yaml -n jupyter

그 후, 다시 jupyter.yaml을 deploy 하면 됩니다! 아 ! 그전에!

jupyter.yaml에서 deployment 부분을 살짝 추가를 해야 하는 부분이 있습니다.

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: base-notebook
  labels:
    app: base-notebook
spec:
  replicas: 1
  selector:
    matchLabels:
      app: base-notebook
  template:
    metadata:
      labels:
        app: base-notebook
    spec:
      volumes:
      - name: azure
        persistentVolumeClaim:
          claimName: fileshare-pvc
      containers:
      - name: base-notebook
        image: acrintern.azurecr.io/base-notebook:v1
        ports:
        - containerPort: 8888
        command: ["start-notebook.sh"]
        args: ["--NotebookApp.token=''"]
        volumeMounts:
        - name: azure
          mountPath: "/home/jovyan/work"

기존 yaml 형식에서 모두 같지만, persistentVolumeClaim이라는 부분이 새로 추가되었을거에요!

 

pv를 요청하는 pvc를 저희가 만든 pvc.yaml에서 fileshare-pvc라고 metadata name을 설정해놓았어요!(위에 보시면됩니다) 그래서 그 pvc를 불러오는거에요! 나 fileshare-pvc 레이블이 있는 pvc.yaml파일에서 생성한 그 claim을 쓸거야! 이런느낌입니다.

 

그리고 실행하면 pv가 붙은 jupyter notebook이 탄생하게 됩니다~~ 짝짝짝

 

다음에는, 저희가 loadbalancer를 사용해서 외부에서 접근가능하게 해준것을,

azure를 사용하면 제공해주는 domain name으로 변경해서 사용하는, 간편한 방법을 이용해볼게요!!

다음에 만나욥!

'IT > Kubernetes' 카테고리의 다른 글

helm을이용해 k8s에 kafka 설치하기!  (1) 2020.08.11
helm 설치  (0) 2020.08.11
kubernetes multiple cluster일때 cluster 옮기는 방법  (0) 2020.08.03
k8s 정리  (0) 2020.07.31
kubernetes에 jupyter notebook 띄우기 (1)  (0) 2020.07.15

protocol이란 - 통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다. 통신 프로토콜은 신호 체계, 인증, 그리고 오류 감지 및 수정기능을 포함할 수 있다.

 

대표적으로 인터넷을 할 때 사용되는 프로토콜은 TCP/IP 가 있습니다.

TCP/IP 는 Transmission Control Protocol / Internet Protocol 의 약자로써 컴퓨터와 컴퓨터가 통신 회선 등으로

 

연결 하기 위한 통신 규약입니다.



7,6,5 계층 동작 과정을 하나의 편지로 예를 든다면

 

사용자가 친구에게 편지를 보내기위해 7계층에서는 인터페이스, 즉 편지지를 제공하여 내용을 작성 합니다.


이제 6계층에서 완성된 편지를 편지봉투에 담게 되어 다른 사람이 볼 수 없도록 암호화와 여러장의 편지를 

 

하나에 모아 보낼 수 있는 암축화를 제공합니다.


5계층에서는 편지를 전할 상대방과의 논리적, 물리적 연결을 담당하게 됩니다. 

 

 

 

자 그럼 이제 편지(데이터)가 상위 계층을 통해 만들어 졌다면 이제 보내야 할 겁니다. 

 

우리는 편지를 보내기 위해 우체국에 가는데,  우체국에서 하는 일이 바로 하위 계층에서 동작하는 역할이다 보시면

 

됩니다. 그럼 이제 하위 계층에 대해서도 알아 봐야 하겠죠??

\

 

rf https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-13%ED%8E%B8-%EB%AC%BC%EB%8D%B0%EB%84%A4%EC%A0%84%EC%84%B8%ED%91%9C%EC%9D%91-%E3%85%A1-%EC%9D%91%ED%91%9C%EC%84%B8%EC%A0%84%EB%84%A4%EB%8D%B0%EB%AC%BC-OSI-7%EA%B3%84%EC%B8%B5?category=702276

 

[ 네트워크 쉽게 이해하기 13편 ] 물데네전세표응 ㅡ OSI 7계층 , 상위계층

Internet 에서 사용되는 Protocol 인 TCP/IP, 좀 더 세분화하여 계층별로 나눈 OSI 를 다루면서 각 계층에는 어떠한 동작을 하는지, 또 어떠한 기능이 있는지 하나씩 알아보도록 하겠습니다. 우선 각 계��

mindnet.tistory.com

 

'IT 용어사전' 카테고리의 다른 글

Load Balancer란,,,,  (0) 2020.08.07
proxy란,,,,  (0) 2020.08.07
provisioning이란,,,  (0) 2020.08.07

Client가 한두명일 경우에는, Server는 Client의 요청에 대해 여유롭게 결과를 응답해 줄 수 있다.

하지만, Client가 한두명이 아닌, 수천, 수백만명이라면 어떨까?

 

Server는 모든 사람들에게 답을 해주고 싶지만, 결국 과부하가 온다.

 

문제를 해결하기 위해선 

  • Scale-up : Server의 하드웨어 성능을 올리는 방법
  • Scale-out : 하나의 server보다는 여러 대의 Server가 나눠서 일을 하는 방법

Scale-out의 장점은?

  • 하드웨어를 향상시킬때 드는 비용보다 서버 한대 추가 비용이 더 적다.
  • 여러 대의 server로 무중단 서비스를 제공할 수 있다.(cluster의 개념과 유사)

여러 대의 Server에 균등하게 트래픽 분산을 해주는 것이 오늘의 주제, Load Balancer의 역할이다.


 

Load Balance란,, 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리해주어 트래픽 문제를 해결해주는 서비스이다.

 

 

주요 기능에는,,

  • NAT(Network Address Translation)
    • 사설 IP 주소를 공인 IP 주소로 바꾸는데 사용하는 통신망의 주소 변조기이다.
  • Tunneling
    • 인터넷 상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념
    • 데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있다.
  • DSR(Dynamic Source Routing protocol)
    • 로드 밸런서 사용 시 서버에서 클라이언트로 되돌아 갈 경우, 목적지 주소를 스위치의 IP주소가 아닌 클라이언트의 IP주소로 전달해서 네트워크 스위치를 거치지 않고 바로 클라이언트를 찾아간다.

 

Load Balancer의 종류는 어떤 것이 있을까?

  • L2
    • Mac주소를 바탕으로 Load Balancing
  • L3
    • IP주소를 바탕으로 Load Balancing
  • L4
    • Transport Layer(IP & Port) Level에서 Load Balancing한다.
    • TCP, UDP
  • L7
    • Application Layer(사용자의 Request) Level에서 Load Balancing한다.
    • HTTP, HTTPS, FTP

 

Load Balancer의 장애 대비는?  - 이중화하여. 이것도 cluster의 개념.

 

Reference

'IT 용어사전' 카테고리의 다른 글

Protocol 이란,,,,  (1) 2020.08.07
proxy란,,,,  (0) 2020.08.07
provisioning이란,,,  (0) 2020.08.07

+ Recent posts