임계 영역(critical section)을 만들자

  • 객체지향언어

    전적으로 개발자의 코딩에 의존

변경(mutation)을 하지 말자

  • 함수형언어. 대표적으로 erlang

    상대적으로 메모리 낭비와 단일 쓰레드 성능 저하 발생

공유(shared)를 하지말자

  • Rust

출처 : Rust 나무위키, https://lynlab.co.kr/blog/63

'잡담' 카테고리의 다른 글

티스토리 마크다운 지원  (0) 2019.04.04

크롬의 설정 파일을 변경하여 특정 확장자 파일을 자동 실행할 수 있습니다.
오피스, pdf 등의 파일을 바로 열고 싶은 업무 환경에서 사용하면 유용할 듯 합니다.
방법은 아래와 같습니다.

  1. 먼저 실행 중인 크롬 브라우저를 닫습니다.

  2. cmd 창을 실행합니다.

  3. 아래 명령어를 그대로 실행합니다. 크롬 카나리를 사용하시는 분은 Chrome 대신 Chrome SxS 경로를 입력해야 합니다.

    • cd %HOMEPATH%\AppData\Local\Google\Chrome\User Data\Default
    • notepad Preferences
  4. 열린 편집창에서 download 부분을 찾아서 "extensions_to_open":"doc:docx:xls:xlsx:ppt:pptx:pdf" 를 추가해줍니다.

    • "download":{"directory_upgrade":true} -> "download":{"directory_upgrade":true,"extensions_to_open":"doc:docx:xls:xlsx:ppt:pptx:pdf"}
  5. 크롬을 실행하여 pdf, office 문서를 열어봅니다.


[부록] 자동 실행 해제 방법

  • 크롬에서 설정 -> 고급 -> 다운로드 순으로 이동하여 '다운로드 후에 특정 파일 형식을 자동으로 열기' 를 삭제하면 됩니다. (삭제할 경우 해당 옵션이 나타나지 않습니다.)

SVN 저장소를 생성하는 쉘 스크립트 입니다.

  • SVN 버전

    • 1.9.7 (r1800392)
  • 해당 스크립트 위치

    • /home/svn
  • 스크립트
#!/bin/bash 

# @Author gentian0185 
# @Date   19.06.03 



### 상수
SVNHOST="svn://$HOST_IP" 
SVNBOT_ID="svnbot" 
SVNBOT_PASS="svnbot" 
SVN_PATH="/home/svn" 

if [ -k $1 ]; 
then 
    echo "등록할 레파지토리 명을 입력해주세요 (폴더 포함 가능)" 
    echo "ex)  svn/BOK,  SimpleProject" 
    exit 1 
fi 

SVN_MKPATH="$SVN_PATH/$1" 

while true; do 
    read -p "$SVN_MKPATH 에 레파지토리를 생성하시겠습니까? (y or n)" yn 
    case $yn in 
        [Yy]* ) break;; 
        [Nn]* ) exit;; 
        * ) echo "y or n.";; 
    esac 
done 

currPath=$(pwd) 
cd $SVN_PATH 

echo "$SVN_MKPATH 저장소 생성중..." 
echo "svnadmin create --fs-type fsfs $SVN_MKPATH" 
svnadmin create --fs-type fsfs $SVN_MKPATH 
echo "$SVN_MKPATH 저장소 생성완료" 

cd $SVN_MKPATH/conf 
echo "$(pwd) 수정 중..."



# $SVN_PATH/passwd 에 svnbot 있는지 체크하는 if 문 있으면 더욱 좋음
echo "svnbot=svnbot" >> $SVN_PATH/passwd


rm passwd

ln -s $SVN_PATH/passwd passwd 
sed -i "s/# auth-access = write/auth-access = write/g" svnserve.conf 
sed -i "s/# auth-access = read/auth-access = write/g" svnserve.conf 
sed -i "s/# password-db = passwd/password-db = passwd/g" svnserve.conf 
echo "$(pwd) 수정 완료..." 

cd $SVN_MKPATH 
echo "trunk 폴더 생성중" 
svn mkdir -m "trunk creat" --username=$SVNBOT_ID --password=$SVNBOT_PASS --non-interactive --force-log  $SVNHOST/$1/trunk 
echo "branches 폴더 생성중" 
svn mkdir -m "branches creat" --username=$SVNBOT_ID --password=$SVNBOT_PASS --non-interactive --force-log  $SVNHOST/$1/branches 
echo "tags 폴더 생성중" 
svn mkdir -m "tags creat" --username=$SVNBOT_ID --password=$SVNBOT_PASS --non-interactive --force-log  $SVNHOST/$1/tags 

echo "전체 폴더 생성완료" 
echo "저장소 생성이 완료되었습니다." 

cd $currPath 

Docker Hub 에서 기본으로 제공되는 Docker Container 에서는 Docker 데몬 서비스를 실행 할 수 없습니다.
대신 추가로 제공되는 DinD 버전을 이용하거나, Docker socker 을 공유하는 방법으로 컨테이너 내에서 컨테이너를 실행할 수 있습니다.
아래는 두가지 방법 중 Docker Socket 을 Host 와 공유하는 방법입니다.


원리는 다음과 같습니다.
Docker Container 에서도 Host에서의 Docker Daemon 에 접근하여 컨테이너를 생성하도록 합니다.
즉, 컨테이너 내부에서 또다른 컨테이너를 만드는 명령어를 실행하지만 실제로는 Host 에서 컨테이너를 생성하는 것입니다.

컨테이너를 생성할 때 '/var/run/docker.sock' 볼륨을 공유하도록 생성한 뒤, docker.io 를 설치하여 명령어를 실행하면 됩니다.
아래는 코드입니다.

docker run -ti -v /var/run/docker.sock:/var/run/docker.sock docker

실제로 컨테이너 생성 명령을 내리는 곳은 Host 라는 것을 명심하여야 합니다.
컨테이너 내부에서 띄운 컨테이너 목록을 마찬가지로 Host 에서도 확인할 수 있습니다.

출처 : https://itnext.io/docker-in-docker-521958d34efd

Jolokia 는 ?

  • Jolokia 는 JMX 에 대해 JSON 타입의 데이터를 받을 수 있는 HTTP Bridge 입니다.

  • 공식 홈페이지에서는 아래와 같이 설명하고 있습니다.

    > https://jolokia.org/
    Jolokia is remote JMX with JSON over HTTP.
    It is fast, simple, polyglot and has unique features. It's JMX on Capsaicin.

사용 방법 (war, Tomcat)

  • 해당 방법은 war 로 패키징된 웹어플리케이션을 tomcat 에 deploy 시키는 방법입니다.
  1. conf/tomcat-users.xml 에 아래 내용을 추가합니다. username, password 는 임의로 지정합니다.

    <role rolename="jolokia"/>
    <user username="tomcat" password="tomcat" roles="jolokia"/>
  2. tomcat 의 webapps 에 war 파일을 받습니다.

    cd webapps/
    wget http://search.maven.org/remotecontent?filepath=org/jolokia/jolokia-war/1.6.0/jolokia-war-1.6.0.war -O jolokia.war
    
    # auto deploy 가 아닌 경우 톰캣 재기동 진행
  3. Tomcat 구동 결과

사용방법 (JVM Agent, Tomcat)

  • 해당 방법은 tomcat 을 실행할 때 jvm agent 를 추가로 띄우는 방법입니다. 해당 방법은 oracle java (jvm) 만 사용 가능합니다.

  • 설치 디렉터리 : /etc/beats/vendor

  1. 아래와 같은 명령어로 설치를 진행합니다.

    cd /etc/beats/vendor
    wget http://search.maven.org/remotecontent?filepath=org/jolokia/jolokia-jvm/1.6.0/jolokia-jvm-1.6.0-agent.jar -O jolokia-jvm-1.6.0-agent.jar
  2. tomcat 의 bin/setenv.sh 등의 시작 파일에 아래 내용을 추가해줍니다. 여기서 8888 포트는 tomcat 과 겹치지 않도록 합니다.

    export JMX_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname='IP입력' -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port='JMX포트입력'"
    
    # http 로 출력할 포트 입력
    export JOLIKIA_OPTS=" -javaagent:/etc/beats/vendor/jolokia-jvm-1.6.0-agent.jar=port=8888,host=0.0.0.0 "
    export JAVA_OPTS="$JAVA_OPTS $JMX_OPTS"
  3. Tomcat 구동 결과

증상 발생

  • 우분투 업그레이드를 진행하였는데 업그레이드 진행한 이후 쉘 접속이 끊기는 문제가 발생하였습니다. 업그레이드는 다음과 같은 명령어를 사용하여 진행하였습니다.
# 배포 패키지 업그레이드 
sudo apt update 
sudo apt upgrade
sudo apt dist-upgrade

# 리눅스 릴리즈 업그레이드
sudo apt install update-manager-core
sudo do-release-upgrade
  • 서버에 직접 모니터를 물려서 확인해보니 물리 네트워크 인터페이스가 인식이 되지 않는 것이 문제였습니다. 해당 문제는 아래 명령어를 통해 확인하였습니다.

    ifconfig -a | grep eth0 
    # 결과값이 출력되나 IPv4 가 할당되지 않음. (평소였다면 할당되었어야 함)
    

결과값이 출력되지 않음.

  • 이후 구글링을 통해 원인을 찾았습니다.

apparmor.d 가 문제.

  • 업그레이드 직후 apparmor.d 가 문제였습니다. (그렇다고 기본 네트워크를 아예 못쓰게만드냐...)

  • 확인해보니 apparmor 는 SELinux 와 유사한 리눅스 보안 모듈이라 합니다.

해결

  • apparmor.d 정책 중 dhclient 에 대한 것을 비활성화하였습니다.

    # apparmor.d 를 비활성화
    sudo ln -s /etc/apparmor.d/sbin.dhclient /etc/apparmor.d/disable/  
    sudo /etc/init.d/apparmor reload
  • apparmor 에서 특정 정책 complain 모드로 변경하여 해결할 수도 있습니다. 여기서 complain 모드란 정책을 제한하진 않되, 로그로만 기록해 두는 모드입니다.

     sudo aa-complain /usr/sbin/dhclient
  • 아래는 비활성화 명령어 History 를 캡쳐한 부분입니다.

이으며..

  • 이 방법은 완전한 해결 방법이 아닌데다가, aa-status 명령어를 치면 나오는 모든 모듈들의 정책이 어긋나서 나온 문제로 보입니다. 해당 모듈들에 대해서 정상적인지 테스트를 해야할 듯합니다.
  • 임시로 문제가 발생하는 모듈에 대해서 aa-complain /usr/sbin/tcpdum 등의 명령어로 풀어갈 생각입니다.
  • 룰을 계속 추가하면서 사용하려니 너무 번거로워 지금은 apparmor.d 를 사용안하도록 변경하여 사용하고 있습니다. (내부망에서만 사용하는 서버니까..)

저같은 경우 마크다운으로 글을 올릴 때는 https://marxi.co/ 를 사용하여 마크다운으로 작성하여 글을 올렸었습니다.

하지만 최근에는 티스토리 자체 에디터에서 마크 다운을 지원하고 있습니다.


마크다운 그림 삽입 테스트입니다.

마크다운 테스트 글입니다.

  • Swap 제거 (Master, Worker 공통. 안해주면 kubeadm init 때 오류 발생)

    sudo su -
    
    swapoff -a
    vi /etc/fstab
    # swap에 해당하는 영역을 #로 커맨트
    #UUID=696444df-416c-4846-861e-ea4bb1f66ed0 none            swap    sw              0       0
  • Master 노드에서 아래 명령어를 통해 kubernetes 를 실행한다.

    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    #--pod-network-cidr 옵션은 flannel 을 플러그인으로 사용할 경우 필수라고 한다.
    
    # 아래 join 명령어를 그대로 복사해서 slave 에 그대로 친다.
    #  kubeadm join 211.45.109.210:6443 --token ozlx17.7uwfzw2s8candagq --discovery-token-ca-cert-hash sha256:0366346c108a810cd509b5d9d46903f1247f3d34becad31c905a94967ca5477f
    
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    export KUBECONFIG=$HOME/.kube/config
    export KUBECONFIG=$HOME/.kube/config | tee -a ~/.bashrc
    
    # ~~플러그인 설치 여기서는 수많은 network 플러그인 중 weave net 설치함~~ -> 내부 domain 을 못찾는 이슈가 생김.
    #kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
    #출처>https://www.weave.works/docs/net/latest/kubernetes/kube-addon/
    
    # 아래는 flannel 설치 방법
    # 이것 사용
    kubectl -n kube-system apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    # 도메인 미인식 오류.... kubectl -n kube-system apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
    #yaml 파일> https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
    
  • Worker 노드에서 아래 명령어를 실행한다.

    #마스터의 kubeadm init 결과로 나온 join 명령을 그대로 복사하여 붙여넣는다.
    kubeadm join 211.45.109.210:6443 --token *************** --discovery-token-ca-cert-hash sha256:****************

'잡담' 카테고리의 다른 글

각 언어들의 Shared mutable state 에 대처하는 방법  (0) 2020.01.21


카카오 오픈빌더 가이드 링크 및 방화벽 정책

이문서는 https://marxi.co/ 에서 만들어졌습니다.
%23%23%20%uCE74%uCE74%uC624%20%uC624%uD508%uBE4C%uB354%20%uAC00%uC774%uB4DC%20%uB9C1%uD06C%20%uBC0F%20%uBC29%uD654%uBCBD%20%uC815%uCC45%0A%0A%3E%20%uC774%uBB38%uC11C%uB294%20https%3A//marxi.co/%20%uC5D0%uC11C%20%uB9CC%uB4E4%uC5B4%uC84C%uC2B5%uB2C8%uB2E4.%0A%0A*%20%uC2A4%uD0AC%20%uB4F1%uB85D%uBC95%0A%3E%20https%3A//i.kakao.com/docs/skill-build%23%25EC%258A%25A4%25ED%2582%25AC-%25EC%2588%2598%25EC%25A0%2595%0A%0A*%20%uBE14%uB85D%20+%20%uC2A4%uD0AC%20%20%28%uC548%uC368%uB3C4%20%uB428%20%uAE30%uBCF8%uC2A4%uD0AC%uB85C%20%uB4F1%uB85D%uD574%uC11C..%29%0A%3E%20https%3A//i.kakao.com/docs/skill-block%23%25EB%25B8%2594%25EB%25A1%259D%25EA%25B3%25BC-%25EC%258A%25A4%25ED%2582%25AC-%25EC%2597%25B0%25EA%25B2%25B0%25ED%2595%2598%25EA%25B8%25B0%0A%0A*%20%uC2A4%uD0AC%20API%0A%3E%20https%3A//i.kakao.com/docs/skill-response-format%23%25EC%2598%2588%25EC%25A0%259C-%25EC%25BD%2594%25EB%2593%259C-6%0A%0A*%20%uAE30%uBCF8%20%uC815%uCC45%uC774%20deny%20%uC77C%20%uACBD%uC6B0%20%uD5C8%uC6A9%uD574%uC57C%20%uD558%uB294%20%uBC29%uD654%uBCBD%20IP%20%28inbound%20%uC815%uCC45%29%0A%3E%20219.249.231.40%7E42%20%20%28%uC790%uCCB4%20%uD14C%uC2A4%uD2B8%20%uC11C%uBC84%uB85C%20%uAC80%uC99D%uD558%uC5EC%20%uD655%uC778%uD55C%20%uAC83%uC774%uB77C%20%uC5B8%uC81C%uB4E0%20%uBC14%uB014%20%uC218%20%uC788%uC2B5%uB2C8%uB2E4.%29


 폐쇄망에서 White box로 특정 IP만 허용해야했기에, 위 IP 주소를 직접 체크하였습니다.

 https://i.kakao.com/docs/ 에서 챗봇 사용 방법을 찾아보시면 됩니다.

 기존에 외부 API 형태로 플러스친구 챗봇을 제공하셧던 분이라면 스킬을 통하여 동일하게 구현이 가능하며,
저같은 경우는 편법이지만 폴백 블록에 등록된 시나리오와 스킬을 연결하여 이전 플러스친구 챗봇과 동일하게 구현하였습니다.




Edit

HyperledgerFabric with Kubernetes

이문서는 https://marxi.co/ 에서 만들어졌습니다.

사양

  • 우분투 16.04 (Slave는 17 이었던거 같지만 정상작동했음.)

설치

  • 기존에 남아있는 kubernetes 삭제

    sudo apt-get purge kubeadm
    sudo apt-get purge kubectl
    sudo apt-get purge kubelet
    sudo apt-get purge kubernetes-cni
    rm -rf /etc/systemd/system/kubelet.service.d
    rm -rf /opt/cni/bin
    rm -rf ~/.kube/config

Kubernetes 설치 (version 1.13.1)

  • 참고한 자료

    https://github.com/IBM/blockchain-network-on-kubernetes/blob/master/README-ko.md
    https://medium.com/@dirty49374/kubeadm%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-kubernetes-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-ubuntu-18-04-61710f0b4db8
    https://medium.com/@debutinfotech/deploying-hyperledger-fabric-v1-2-on-kubernetes-cluster-94a4c8032f3

  • Master, Worker 아래 명령어를 통해 설치한다.. 소스 추가 등은 기존에 한 적이 있다면 생략

    sudo su -
    # google k8s 패키지 소스 등록
    apt update && apt upgrade -y
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
    deb http://apt.kubernetes.io/ kubernetes-xenial main
    EOF

    apt-get update
    apt install linux-image-extra-virtual ca-certificates curl software-properties-common -y
    # docker 소스 등록
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    apt update
    apt install docker-ce kubelet kubeadm kubectl kubernetes-cni -y
  • Swap 제거 (Master, Worker 공통. 안해주면 kubeadm init 때 오류 발생)

    sudo su -
    swapoff -a
    vi /etc/fstab
    # swap에 해당하는 영역을 #로 커맨트
    #UUID=696444df-416c-4846-861e-ea4bb1f66ed0 none swap sw 0 0
  • Master 노드에서 아래 명령어를 통해 kubernetes 를 실행

    sudo kubeadm init --pod-network-cidr=10.244.0.0/16

    #--pod-network-cidr 옵션은 flannel 을 플러그인으로 사용할 경우 필수라고 한다.
    # 아래 join 명령어를 그대로 복사해서

    # kubeadm join 10.0.0.194:6443 --token au4wjg.rk4ft0pgf9babix7 --discovery-token-ca-cert-hash sha256:ff5aa52f16e1a738bf49fc6291e2813b43f7722d40af317bec046c1f3b50eebf
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    export KUBECONFIG=$HOME/.kube/config
    export KUBECONFIG=$HOME/.kube/config | tee -a ~/.bashrc
    # ~~플러그인 설치 여기서는 수많은 network 플러그인 중 weave net 설치함~~ -> 내부 domain 을 못찾는 이슈가 생김.
    kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
    >https://www.weave.works/docs/net/latest/kubernetes/kube-addon/
    # 아래는 flannel 설치 방법
    kubectl -n kube-system apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
    >https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
  • Worker 노드에서 아래 명령어 실행

    #마스터의 kubeadm init 결과로 나온 join 명령을 그대로 복사하여 붙여넣는다.
    kubeadm join 10.0.0.194:6443 --token *************** --discovery-token-ca-cert-hash sha256:****************

플러그인 설치

  • 대시보드 (마스터 노드)

    https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

    kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
    kubectl proxy --port=8001 --address=10.0.0.194 --accept-hosts='^10.0.0.[0-9]*$'
    # 기본적으로 서버내 브라우저로 하면 정상동작한다.. 위로 하면 api 정보만 나옴. 다른 옵션을 추가로 줘야 할 듯 함.
    #로그인 토큰 얻기
    kubectl -n kube-system get secret
    kubectl -n kube-system describe secrets replicaset-controller-token-kzpmc
    eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJyZXBsaWNhc2V0LWNvbnRyb2xsZXItdG9rZW4tcGI3ZmwiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicmVwbGljYXNldC1jb250cm9sbGVyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYWRjNjgxYWEtMTUzOC0xMWU5LWIzYzgtMTAxZjc0MGRhMjcwIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOnJlcGxpY2FzZXQtY29udHJvbGxlciJ9.jjM7B4mx8bUgjvLRMaiTSTbKQKbGJ9V3HbkJ-3muAnqWNk7FJxK25LneO69pONGr_EhFKdfGj_u_Tsgc3gMtKaE_vrCDBKInZzLSMsG4lx4BptA0T7kLiS0yo52kZC5JQ4hucVWE4k7Qkw2AvOVDQikiNiN9Ygcg4Dj6YtF43HTsV4zX8bYgi5emGZTC8AOx-5gTaYY6oAEAT-A1xsJcxjxbB-21IujibplCLo-5QtXMPFURZOuGNvHdU3E9dCwZB1ErsmYrLr6__W2Ra9dvR9Yp6-kuth4_yDyM2NTI4xTzIJz_iQSdg4rAPx0EKzz0Jja8il2v9UEYyEP-NRvzeg

    #위 로그인은 마스터의 local에서만 가능함

Hyperledger Fabric 설치

  • git 받기

    cd /root/fabric
    git clone https://github.com/IBM/blockchain-network-on-kubernetes.git
    cd blockchain-network-on-kubernetes
  • Kubernetes 서버 버전이 v1.11.x 이상인 경우 아래 커멘드 실행.


    ## macOS
    sed -i '' s#unix:///host/var/run/docker.sock#tcp://docker:2375# configFiles/peersDeployment.yaml
    ## Linux
    sed -i s#unix:///host/var/run/docker.sock#tcp://docker:2375# configFiles/peersDeployment.yaml
  • container 에 host 수정 (실행이 안되는 오류로 도메인문제인지 확인하기 위해 사용)

    kubectl describe pods/blockchain-orderer-7db9889bcc-2k5rf | grep IP | awk {'print $2'}
    #find ./ -name "*" -exec sed -i 's/old/new/g' {} \;
  • 패브릭 배포

    chmod +x setup_blockchainNetwork.sh
    ./setup_blockchainNetwork.sh

이슈

  1. 패브릭 배포할 때 ./setup_blockchainNetwork.sh 명령어 실행시 특정 명령어가 무한루프 도는 오류

    • 내부 스크립트를 한땀한땀 따서 실행. -> 그 뒤 setup_blockchainNetwork.sh 를 커스터마이징 하여 해결 완료.

  2. PV, PVC 생성 후, pod 생성할 때 디렉터리 공유가 안되는 현상 (/shared 가 계속 copy 성공해도 비어있음.)

    • 원원

      • 원인을 local 과 hostPath 형태의 Volume 이 accessMode ReadWriteMany 를 지원 안해서라고 판단됨.

      • 원인 추측 출처 http://arisu1000.tistory.com/27849

      • nfs 를 설치하기로 함. (10.0.0.194 서버)

    • 해결

      • NFS 설치 후 적용

      • 출처 : http://darksoulstory.tistory.com/9

      • 설치 진행 후 /shared/nfs 폴더 생성

        apt-get install nfs-common nfs-kernel-server portmap
        mkdir /shared/nfs
        cd /shared/nfs
        chmod 777 /shared/nfs
        chown nobody:nogroup /shared/nfs
      • NFS 설정 파일 변경

          • vi /etc/exports 하여 하단에 내용 추가

            #형식 : [/공유 디렉터리] [접근 IP] [옵션]
            /shared/nfs * (rw,no_root_squash,async)

      • NFS 커널 서버 및 NFS 포트맵 재 시작

        systemctl restart nfs-kernel-server
        systemctl restart portmap

      • 클라이언트에서 유틸 설치 진행

        apt install nfs-common
        apt install cifs-utils
        #테스트
        mount -t nfs -o nolock 10.0.0.194:/shared/nfs /mnt/nfs
        mkdir /mnt/nfs/a
  3. 채널 생성 실패.

    • 실행

      • kubectl create -f ${KUBECONFIG_FOLDER}/create_channel.yaml

      • 오류 출력 문구

      • Error: failed to create deliver client: orderer client failed to connect to blockchain-orderer:31010: failed to create new connection: context deadline exceeded

    • 원인

      • blockchain-orderer 에 대한 도메인 네임을 못찾아서 생긴 문제.

      • network plugin 으로 weave net 을 사용하였는데, 해당 네트워크에서는 DNS 에 있지 않는 도메인은 못 찾는 것 같음.

    • 해결

      • 네트워크 설치 방법 변경

      • weave net 대신 flannel 를 설치하여 해결함.

마치며…

  • IBM 에서 제공한 Kubernetes 에서 Hyperledger Fabric 을 동작시키는 방법 의 문서를 토대로 작성하였는데, 이 문서가 IBM Cloud 를 사용한다는 가정하에 만들어져있던 문서다보니 디스크 볼륨 구성을 새로하였습니다.

  • 네트워크 부분에서는 flannel 의 latest 버전이 설치가 안되고, weave net 로 설치하면 Domain 이 인식이 안되는 등의 문제가 있던 이슈도 있었습니다.

  • 좀더 자세한 자료를 얻고 싶다면, https://github.com/IBM/blockchain-network-on-kubernetes/blob/master/README-ko.md 을 확인하시기 바랍니다.

자주쓰는 명령어

kubectl describe pods/$(kubectl get pods |grep ca |awk '{print $1}') |grep IP
# peer1 이름 확인
kubectl get pods | grep org1peer1 | awk '{print $1}'
# 체인코드 인스턴스화 JOB 로그확인
kubectl logs --all-containers=true -f `kubectl get pods|grep chaincodeinstantiate|awk '{print $1}'`
# peer1 쉘실행
kubectl exec -it `kubectl get pods|grep org1peer1|awk '{print $1}'` /bin/bash
%23%20HyperledgerFabric%20with%20Kubernetes%0A%0A%3E%20%uC774%uBB38%uC11C%uB294%20https%3A//marxi.co/%20%uC5D0%uC11C%20%uB9CC%uB4E4%uC5B4%uC84C%uC2B5%uB2C8%uB2E4.%0A%0A%23%23%20%uC0AC%uC591%0A*%20%uC6B0%uBD84%uD22C%2016.04%20%28Slave%uB294%2017%20%uC774%uC5C8%uB358%uAC70%20%uAC19%uC9C0%uB9CC%20%uC815%uC0C1%uC791%uB3D9%uD588%uC74C.%29%0A%0A%23%23%20%uC124%uCE58%0A%0A*%20%uAE30%uC874%uC5D0%20%uB0A8%uC544%uC788%uB294%20kubernetes%20%uC0AD%uC81C%0A%20%20%60%60%60%0A%20%20sudo%20apt-get%20purge%20kubeadm%0A%20%20sudo%20apt-get%20purge%20kubectl%0A%20%20sudo%20apt-get%20purge%20kubelet%0A%20%20sudo%20apt-get%20purge%20kubernetes-cni%0A%20%20rm%20-rf%20/etc/systemd/system/kubelet.service.d%0A%20%20rm%20-rf%20/opt/cni/bin%0A%20%20rm%20-rf%20%7E/.kube/config%0A%0A%20%20%60%60%60%0A%0A%23%23%23%20Kubernetes%20%uC124%uCE58%20%28version%201.13.1%29%0A%0A*%20%uCC38%uACE0%uD55C%20%uC790%uB8CC%0A%20%20%3Ehttps%3A//github.com/IBM/blockchain-network-on-kubernetes/blob/master/README-ko.md%0A%20%20%3Ehttps%3A//medium.com/@dirty49374/kubeadm%25EC%259D%2584-%25EC%2582%25AC%25EC%259A%25A9%25ED%2595%2598%25EC%2597%25AC-kubernetes-%25EC%2584%25A4%25EC%25B9%2598%25ED%2595%2598%25EA%25B8%25B0-ubuntu-18-04-61710f0b4db8%0A%20%20%3Ehttps%3A//medium.com/@debutinfotech/deploying-hyperledger-fabric-v1-2-on-kubernetes-cluster-94a4c8032f3%0A%0A*%20Master%2C%20Worker%20%uC544%uB798%20%uBA85%uB839%uC5B4%uB97C%20%uD1B5%uD574%20%uC124%uCE58%uD55C%uB2E4..%20%uC18C%uC2A4%20%uCD94%uAC00%20%uB4F1%uC740%20%uAE30%uC874%uC5D0%20%uD55C%uC801%uC774%20%uC788%uB2E4%uBA74%20%uC0DD%uB7B5%uD55C%uB2E4.%0A%20%20%60%60%60%0A%20%20sudo%20su%20-%0A%0A%20%20%23%20google%20k8s%20%uD328%uD0A4%uC9C0%20%uC18C%uC2A4%20%uB4F1%uB85D%0A%20%20apt%20update%20%26%26%20apt%20upgrade%20-y%0A%20%20curl%20https%3A//packages.cloud.google.com/apt/doc/apt-key.gpg%20%7C%20apt-key%20add%20-%0A%0A%20%20cat%20%3C%3CEOF%20%3E%20/etc/apt/sources.list.d/kubernetes.list%0A%20%20deb%20http%3A//apt.kubernetes.io/%20kubernetes-xenial%20main%0A%20%20EOF%0A%0A%20%20apt-get%20update%0A%20%20apt%20install%20linux-image-extra-virtual%20ca-certificates%20curl%20software-properties-common%20-y%0A%0A%20%20%23%20docker%20%uC18C%uC2A4%20%uB4F1%uB85D%0A%20%20curl%20-fsSL%20https%3A//download.docker.com/linux/ubuntu/gpg%20%7C%20sudo%20apt-key%20add%20-%0A%0A%20%20add-apt-repository%20%20%20%20%22deb%20%5Barch%3Damd64%5D%20https%3A//download.docker.com/linux/ubuntu%20%24%28lsb_release%20-cs%29%20stable%22%0A%0A%20%20apt%20update%0A%20%20apt%20install%20docker-ce%20kubelet%20kubeadm%20kubectl%20kubernetes-cni%20-y%0A%20%20%60%60%60%0A%0A%0A*%20Swap%20%uC81C%uAC70%20%28Master%2C%20Worker%20%uACF5%uD1B5.%20%uC548%uD574%uC8FC%uBA74%20kubeadm%20init%20%uB54C%20%uC624%uB958%20%uBC1C%uC0DD%29%0A%20%20%60%60%60%0A%20%20sudo%20su%20-%0A%0A%20%20swapoff%20-a%0A%20%20vi%20/etc/fstab%0A%20%20%23%20swap%uC5D0%20%uD574%uB2F9%uD558%uB294%20%uC601%uC5ED%uC744%20%23%uB85C%20%uCEE4%uB9E8%uD2B8%0A%20%20%23UUID%3D696444df-416c-4846-861e-ea4bb1f66ed0%20none%20%20%20%20%20%20%20%20%20%20%20%20swap%20%20%20%20sw%20%20%20%20%20%20%20%20%20%20%20%20%20%200%20%20%20%20%20%20%200%0A%20%20%60%60%60%0A%0A%0A*%20Master%20%uB178%uB4DC%uC5D0%uC11C%20%uC544%uB798%20%uBA85%uB839%uC5B4%uB97C%20%uD1B5%uD574%20kubernetes%20%uB97C%20%uC2E4%uD589%uD55C%uB2E4.%0A%20%20%60%60%60%0A%20%20sudo%20kubeadm%20init%20--pod-network-cidr%3D10.244.0.0/16%0A%20%20%23--pod-network-cidr%20%uC635%uC158%uC740%20flannel%20%uC744%20%uD50C%uB7EC%uADF8%uC778%uC73C%uB85C%20%uC0AC%uC6A9%uD560%20%uACBD%uC6B0%20%uD544%uC218%uB77C%uACE0%20%uD55C%uB2E4.%0A%0A%20%20%23%20%uC544%uB798%20join%20%uBA85%uB839%uC5B4%uB97C%20%uADF8%uB300%uB85C%20%uBCF5%uC0AC%uD574%uC11C%0A%20%20%23%20kubeadm%20join%2010.0.0.194%3A6443%20--token%20au4wjg.rk4ft0pgf9babix7%20--discovery-token-ca-cert-hash%20sha256%3Aff5aa52f16e1a738bf49fc6291e2813b43f7722d40af317bec046c1f3b50eebf%0A%0A%20%20mkdir%20-p%20%24HOME/.kube%0A%20%20sudo%20cp%20-i%20/etc/kubernetes/admin.conf%20%24HOME/.kube/config%0A%20%20sudo%20chown%20%24%28id%20-u%29%3A%24%28id%20-g%29%20%24HOME/.kube/config%0A%20%20export%20KUBECONFIG%3D%24HOME/.kube/config%0A%20%20export%20KUBECONFIG%3D%24HOME/.kube/config%20%7C%20tee%20-a%20%7E/.bashrc%0A%0A%20%20%23%20%7E%7E%uD50C%uB7EC%uADF8%uC778%20%uC124%uCE58%20%uC5EC%uAE30%uC11C%uB294%20%uC218%uB9CE%uC740%20network%20%uD50C%uB7EC%uADF8%uC778%20%uC911%20weave%20net%20%uC124%uCE58%uD568%7E%7E%20-%3E%20%uB0B4%uBD80%20domain%20%uC744%20%uBABB%uCC3E%uB294%20%uC774%uC288%uAC00%20%uC0DD%uAE40.%0A%20%20kubectl%20apply%20-f%20%22https%3A//cloud.weave.works/k8s/net%3Fk8s-version%3D%24%28kubectl%20version%20%7C%20base64%20%7C%20tr%20-d%20%27%5Cn%27%29%22%0A%20%20%3Ehttps%3A//www.weave.works/docs/net/latest/kubernetes/kube-addon/%0A%0A%20%20%23%20%uC544%uB798%uB294%20flannel%20%uC124%uCE58%20%uBC29%uBC95%0A%20%20kubectl%20-n%20kube-system%20apply%20-f%20https%3A//raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml%0A%20%20%3Ehttps%3A//raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml%0A%20%20%60%60%60%0A%0A*%20Worker%20%uB178%uB4DC%uC5D0%uC11C%20%uC544%uB798%20%uBA85%uB839%uC5B4%uB97C%20%uC2E4%uD589%uD55C%uB2E4.%0A%20%20%60%60%60%0A%20%20%23%uB9C8%uC2A4%uD130%uC758%20kubeadm%20init%20%uACB0%uACFC%uB85C%20%uB098%uC628%20join%20%uBA85%uB839%uC744%20%uADF8%uB300%uB85C%20%uBCF5%uC0AC%uD558%uC5EC%20%uBD99%uC5EC%uB123%uB294%uB2E4.%0A%20%20kubeadm%20join%2010.0.0.194%3A6443%20--token%20***************%20--discovery-token-ca-cert-hash%20sha256%3A****************%0A%20%20%60%60%60%0A%0A%0A%23%23%23%20%uD50C%uB7EC%uADF8%uC778%20%uC124%uCE58%0A%0A*%20%uB300%uC2DC%uBCF4%uB4DC%20%28%uB9C8%uC2A4%uD130%20%uB178%uB4DC%29%0A%20%20%3Ehttps%3A//kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/%0A%20%20%60%60%60%0A%20%20kubectl%20create%20-f%20https%3A//raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml%0A%20%20kubectl%20proxy%20--port%3D8001%20--address%3D10.0.0.194%20--accept-hosts%3D%27%5E10.0.0.%5B0-9%5D*%24%27%0A%20%20%23%20%uAE30%uBCF8%uC801%uC73C%uB85C%20%uC11C%uBC84%uB0B4%20%uBE0C%uB77C%uC6B0%uC800%uB85C%20%uD558%uBA74%20%uC815%uC0C1%uB3D9%uC791%uD55C%uB2E4..%20%uC704%uB85C%20%uD558%uBA74%20api%20%uC815%uBCF4%uB9CC%20%uB098%uC634.%20%uB2E4%uB978%20%uC635%uC158%uC744%20%uCD94%uAC00%uB85C%20%uC918%uC57C%20%uD560%20%uB4EF%20%uD568.%0A%0A%20%20%23%uB85C%uADF8%uC778%20%uD1A0%uD070%20%uC5BB%uAE30%0A%20%20kubectl%20-n%20kube-system%20get%20secret%0A%20%20kubectl%20-n%20kube-system%20describe%20secrets%20replicaset-controller-token-kzpmc%0A%20%20%20eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJyZXBsaWNhc2V0LWNvbnRyb2xsZXItdG9rZW4tcGI3ZmwiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicmVwbGljYXNldC1jb250cm9sbGVyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYWRjNjgxYWEtMTUzOC0xMWU5LWIzYzgtMTAxZjc0MGRhMjcwIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOnJlcGxpY2FzZXQtY29udHJvbGxlciJ9.jjM7B4mx8bUgjvLRMaiTSTbKQKbGJ9V3HbkJ-3muAnqWNk7FJxK25LneO69pONGr_EhFKdfGj_u_Tsgc3gMtKaE_vrCDBKInZzLSMsG4lx4BptA0T7kLiS0yo52kZC5JQ4hucVWE4k7Qkw2AvOVDQikiNiN9Ygcg4Dj6YtF43HTsV4zX8bYgi5emGZTC8AOx-5gTaYY6oAEAT-A1xsJcxjxbB-21IujibplCLo-5QtXMPFURZOuGNvHdU3E9dCwZB1ErsmYrLr6__W2Ra9dvR9Yp6-kuth4_yDyM2NTI4xTzIJz_iQSdg4rAPx0EKzz0Jja8il2v9UEYyEP-NRvzeg%0A%0A%20%20%20%23%uC704%20%uB85C%uADF8%uC778%uC740%20local%uC5D0%uC11C%uB9CC%20%uAC00%uB2A5%uD55C%uB4EF/..............%0A%20%20%60%60%60%0A%0A%0A%23%23%23%20Hyperledger%20Fabric%20%uC124%uCE58%0A%0A*%20git%20%uBC1B%uAE30%0A%20%20%60%60%60%0A%20%20cd%20/root/fabric%0A%20%20git%20clone%20https%3A//github.com/IBM/blockchain-network-on-kubernetes.git%0A%20%20cd%20blockchain-network-on-kubernetes%0A%20%20%60%60%60%0A%0A*%20Kubernetes%20%uC11C%uBC84%20%uBC84%uC804%uC774%20v1.11.x%20%uC774%uC0C1%uC778%20%uACBD%uC6B0%20%uC544%uB798%20%uCEE4%uBA58%uB4DC%20%uC2E4%uD589.%0A%20%20%60%60%60%0A%20%20%23%23%20macOS%0A%20%20sed%20-i%20%27%27%20s%23unix%3A///host/var/run/docker.sock%23tcp%3A//docker%3A2375%23%20configFiles/peersDeployment.yaml%0A%20%20%23%23%20Linux%0A%20%20sed%20-i%20s%23unix%3A///host/var/run/docker.sock%23tcp%3A//docker%3A2375%23%20configFiles/peersDeployment.yaml%0A%20%20%60%60%60%0A%0A*%20container%20%uC5D0%20host%20%uC218%uC815%20%20%28%uC774%uC81C%20%uC548%uC500%29%0A%20%20%60%60%60%0A%20%20%20%20kubectl%20describe%20pods/blockchain-orderer-7db9889bcc-2k5rf%20%7C%20grep%20IP%20%7C%20awk%20%7B%27print%20%242%27%7D%0A%20%20%20%20%23find%20./%20-name%20%22*%22%20-exec%20sed%20-i%20%27s/old/new/g%27%20%7B%7D%20%5C%3B%0A%20%20%60%60%60%0A%0A*%20%uD328%uBE0C%uB9AD%20%uBC30%uD3EC%0A%20%20%60%60%60%0A%20%20chmod%20+x%20setup_blockchainNetwork.sh%0A%20%20./setup_blockchainNetwork.sh%0A%20%20%60%60%60%0A%0A%0A%0A%0A%0A%0A%23%23%23%20%uC774%uC288%0A1.%20%uD328%uBE0C%uB9AD%20%uBC30%uD3EC%uD560%20%uB54C%20./setup_blockchainNetwork.sh%20%uBA85%uB839%uC5B4%20%uC2E4%uD589%uC2DC%20%uD2B9%uC815%20%uBA85%uB839%uC5B4%uAC00%20%uBB34%uD55C%uB8E8%uD504%20%uB3C4%uB294%20%uC624%uB958%0A%20%20*%20%uB0B4%uBD80%20%uC2A4%uD06C%uB9BD%uD2B8%uB97C%20%uD55C%uB540%uD55C%uB540%20%uB530%uC11C%20%uC2E4%uD589.%20-%3E%20%uADF8%20%uB4A4%20setup_blockchainNetwork.sh%20%uB97C%20%uCEE4%uC2A4%uD130%uB9C8%uC774%uC9D5%20%uD558%uC5EC%20%uD574%uACB0%20%uC644%uB8CC.%0A%0A2.%20PV%2C%20PVC%20%uC0DD%uC131%20%uD6C4%2C%20pod%20%uC0DD%uC131%uD560%20%uB54C%20%uB514%uB809%uD130%uB9AC%20%uACF5%uC720%uAC00%20%uC548%uB418%uB294%20%uD604%uC0C1%20%28/shared%20%uAC00%20%uACC4%uC18D%20copy%20%uC131%uACF5%uD574%uB3C4%20%uBE44%uC5B4%uC788%uC74C.%29%0A%20%20*%20%uC6D0%uC778%0A%20%20%20%20*%20%uC6D0%uC778%uC744%20local%20%uACFC%20hostPath%20%uD615%uD0DC%uC758%20Volume%20%uC774%20accessMode%20ReadWriteMany%20%uB97C%20%uC9C0%uC6D0%20%uC548%uD574%uC11C%uB77C%uACE0%20%uD310%uB2E8%uB428.%0A%20%20%20%20*%20%uC6D0%uC778%20%uCD94%uCE21%20%uCD9C%uCC98%20http%3A//arisu1000.tistory.com/27849%0A%20%20%20%20*%20nfs%20%uB97C%20%uC124%uCE58%uD558%uAE30%uB85C%20%uD568.%20%2810.0.0.194%20%uC11C%uBC84%29%0A%0A%20%20*%20%uD574%uACB0%0A%20%20%20%20*%20NFS%20%uC124%uCE58%20%uD6C4%20%uC801%uC6A9%0A%20%20%20%20*%20%uCD9C%uCC98%20%3A%20http%3A//darksoulstory.tistory.com/9%0A%20%20%20%20*%20%uC124%uCE58%20%uC9C4%uD589%20%uD6C4%20/shared/nfs%20%uD3F4%uB354%20%uC0DD%uC131%0A%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20apt-get%20install%20nfs-common%20nfs-kernel-server%20portmap%0A%20%20%20%20%20%20mkdir%20/shared/nfs%0A%20%20%20%20%20%20cd%20/shared/nfs%0A%20%20%20%20%20%20chmod%20777%20/shared/nfs%0A%20%20%20%20%20%20chown%20nobody%3Anogroup%20%20/shared/nfs%0A%20%20%20%20%20%20%60%60%60%0A%0A%20%20%20%20*%20NFS%20%uC124%uC815%20%uD30C%uC77C%20%uBCC0%uACBD%0A%20%20%20%20%20%20*%20vi%20/etc/exports%20%uD558%uC5EC%20%uD558%uB2E8%uC5D0%20%uB0B4%uC6A9%20%uCD94%uAC00%0A%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%23%uD615%uC2DD%20%3A%20%5B/%uACF5%uC720%20%uB514%uB809%uD130%uB9AC%5D%20%5B%uC811%uADFC%20IP%5D%20%5B%uC635%uC158%5D%0A%20%20%20%20%20%20/shared/nfs%20*%20%28rw%2Cno_root_squash%2Casync%29%0A%20%20%20%20%20%20%60%60%60%0A%20%20%20%20*%20NFS%20%uCEE4%uB110%20%uC11C%uBC84%20%uBC0F%20NFS%20%uD3EC%uD2B8%uB9F5%20%uC7AC%20%uC2DC%uC791%0A%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20systemctl%20restart%20nfs-kernel-server%0A%20%20%20%20%20%20systemctl%20restart%20portmap%0A%20%20%20%20%20%20%60%60%60%0A%0A%20%20%20%20*%20%uD074%uB77C%uC774%uC5B8%uD2B8%uC5D0%uC11C%20%uC720%uD2F8%20%uC124%uCE58%20%uC9C4%uD589%0A%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20apt%20install%20nfs-common%0A%20%20%20%20%20%20apt%20install%20cifs-utils%0A%20%20%20%20%20%20%23%uD14C%uC2A4%uD2B8%0A%20%20%20%20%20%20mount%20-t%20nfs%20-o%20nolock%2010.0.0.194%3A/shared/nfs%20/mnt/nfs%0A%20%20%20%20%20%20mkdir%20/mnt/nfs/a%0A%20%20%20%20%20%20%60%60%60%0A%0A3.%20%uCC44%uB110%20%uC0DD%uC131%20%uC2E4%uD328.%0A%20%20*%20%uC2E4%uD589%0A%20%20%20%20*%20kubectl%20create%20-f%20%24%7BKUBECONFIG_FOLDER%7D/create_channel.yaml%0A%20%20*%20%uC624%uB958%20%uCD9C%uB825%20%uBB38%uAD6C%0A%20%20%20%20*%20Error%3A%20failed%20to%20create%20deliver%20client%3A%20orderer%20client%20failed%20to%20connect%20to%20blockchain-orderer%3A31010%3A%20failed%20to%20create%20new%20connection%3A%20context%20deadline%20exceeded%0A%20%20*%20%uC6D0%uC778%0A%20%20%20%20*%20blockchain-orderer%20%uC5D0%20%uB300%uD55C%20%uB3C4%uBA54%uC778%20%uB124%uC784%uC744%20%uBABB%uCC3E%uC544%uC11C%20%uC0DD%uAE34%20%uBB38%uC81C.%0A%20%20%20%20*%20network%20plugin%20%uC73C%uB85C%20weave%20net%20%uC744%20%uC0AC%uC6A9%uD558%uC600%uB294%uB370%2C%20%uD574%uB2F9%20%uB124%uD2B8%uC6CC%uD06C%uC5D0%uC11C%uB294%20DNS%20%uC5D0%20%uC788%uC9C0%20%uC54A%uB294%20%uB3C4%uBA54%uC778%uC740%20%uBABB%20%uCC3E%uB294%20%uAC83%20%uAC19%uC74C.%0A%20%20*%20%uD574%uACB0%0A%20%20%20%20*%20%uB124%uD2B8%uC6CC%uD06C%0A%20%20%20%20*%20weave%20net%20%uB300%uC2E0%20flannel%20%uB97C%20%uC124%uCE58%uD558%uC5EC%20%uD574%uACB0%uD568.%0A%0A%0A%0A%0A%23%23%23%20%uB9C8%uCE58%uBA70...%0A%0A%0A*%20IBM%20%uC5D0%uC11C%20%uC81C%uACF5%uD55C%20%60Kubernetes%20%uC5D0%uC11C%20Hyperledger%20Fabric%20%uC744%20%uB3D9%uC791%uC2DC%uD0A4%uB294%20%uBC29%uBC95%60%20%uC758%20%uBB38%uC11C%uB97C%20%uD1A0%uB300%uB85C%20%uC791%uC131%uD558%uC600%uB294%uB370%2C%20%uC774%20%uBB38%uC11C%uAC00%20IBM%20Cloud%20%uB97C%20%uC0AC%uC6A9%uD55C%uB2E4%uB294%20%uAC00%uC815%uD558%uC5D0%20%uB9CC%uB4E4%uC5B4%uC838%uC788%uB358%20%uBB38%uC11C%uB2E4%uBCF4%uB2C8%20%uB514%uC2A4%uD06C%20%uBCFC%uB968%20%uAD6C%uC131%uC744%20%uC0C8%uB85C%uD558%uC600%uB2E4.%0A%0A*%20%uB124%uD2B8%uC6CC%uD06C%20%uBD80%uBD84%uC5D0%uC11C%uB294%20flannel%20%uC758%20latest%20%uBC84%uC804%uC774%20%uC124%uCE58%uAC00%20%uC548%uB418%uACE0%2C%20weave%20net%20%uB85C%20%uC124%uCE58%uD558%uBA74%20Domain%20%uC774%20%uC778%uC2DD%uC774%20%uC548%uB418%uB294%20%uB4F1%uC758%20%uBB38%uC81C%uAC00%20%uC788%uB358%20%uC774%uC288%uB3C4%20%uC788%uC5C8%uB2E4.%0A%0A*%20%uD655%uC778%uD574%uBCF4%uB2C8%20%uCC38%uACE0%uD55C%20%uBB38%uC11C%20%uC790%uCCB4%uC5D0%uC11C%20%uC0AC%uC6A9%uD55C%20Kubernetes%20%uBC84%uC804%uC774%20%uC124%uCE58%uD558%uB824%uB294%20%uBC84%uC804%uBCF4%uB2E4%200.4%20%uB0AE%uC740%20%uBC84%uC804%uC774%uC5C8%uB2E4.%0A%0A*%20%uC880%uB354%20%uC790%uC138%uD55C%20%uC790%uB8CC%uB97C%20%uC5BB%uACE0%20%uC2F6%uB2E4%uBA74%2C%20https%3A//github.com/IBM/blockchain-network-on-kubernetes/blob/master/README-ko.md%20%uC744%20%uCC38%uC870%uD558%uAE38%20%uBC14%uB780%uB2E4.%0A%0A%0A%0A%0A%0A%0A%23%23%23%20%uC790%uC8FC%uC4F0%uB294%20%uBA85%uB839%uC5B4%0A%60%60%60%0Akubectl%20describe%20pods/%24%28kubectl%20get%20pods%20%7Cgrep%20ca%20%7Cawk%20%27%7Bprint%20%241%7D%27%29%20%20%7Cgrep%20IP%0A%0A%23%20peer1%20%uC774%uB984%20%uD655%uC778%0Akubectl%20get%20pods%20%7C%20grep%20org1peer1%20%7C%20awk%20%27%7Bprint%20%241%7D%27%0A%0A%23%20peer1%20%uB85C%uADF8%uD655%uC778%0Akubectl%20logs%20--all-containers%3Dtrue%20-f%20%60kubectl%20get%20pods%7Cgrep%20chaincodeinstantiate%7Cawk%20%27%7Bprint%20%241%7D%27%60%0A%0A%23%20peer1%20%uC258%uC2E4%uD589%0Akubectl%20exec%20-it%20%60kubectl%20get%20pods%7Cgrep%20org1peer1%7Cawk%20%27%7Bprint%20%241%7D%27%60%20/bin/bash%0A%0A%60%60%60%0A


+ Recent posts