HyperledgerFabric with Kubernetes
이문서는 https://marxi.co/ 에서 만들어졌습니다.
사양
우분투 16.04 (Slave는 17 이었던거 같지만 정상작동했음.)
설치
-
기존에 남아있는 kubernetes 삭제
sudo apt-get purge kubeadmsudo apt-get purge kubectlsudo apt-get purge kubeletsudo apt-get purge kubernetes-cnirm -rf /etc/systemd/system/kubelet.service.drm -rf /opt/cni/binrm -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 -ycurl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -cat <<EOF > /etc/apt/sources.list.d/kubernetes.listdeb http://apt.kubernetes.io/ kubernetes-xenial mainEOFapt-get updateapt 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 updateapt install docker-ce kubelet kubeadm kubectl kubernetes-cni -y -
Swap 제거 (Master, Worker 공통. 안해주면 kubeadm init 때 오류 발생)
sudo su -swapoff -avi /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:ff5aa52f16e1a738bf49fc6291e2813b43f7722d40af317bec046c1f3b50eebfmkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configexport KUBECONFIG=$HOME/.kube/configexport 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.yamlkubectl proxy --port=8001 --address=10.0.0.194 --accept-hosts='^10.0.0.[0-9]*$'# 기본적으로 서버내 브라우저로 하면 정상동작한다.. 위로 하면 api 정보만 나옴. 다른 옵션을 추가로 줘야 할 듯 함.#로그인 토큰 얻기kubectl -n kube-system get secretkubectl -n kube-system describe secrets replicaset-controller-token-kzpmceyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJyZXBsaWNhc2V0LWNvbnRyb2xsZXItdG9rZW4tcGI3ZmwiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicmVwbGljYXNldC1jb250cm9sbGVyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYWRjNjgxYWEtMTUzOC0xMWU5LWIzYzgtMTAxZjc0MGRhMjcwIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOnJlcGxpY2FzZXQtY29udHJvbGxlciJ9.jjM7B4mx8bUgjvLRMaiTSTbKQKbGJ9V3HbkJ-3muAnqWNk7FJxK25LneO69pONGr_EhFKdfGj_u_Tsgc3gMtKaE_vrCDBKInZzLSMsG4lx4BptA0T7kLiS0yo52kZC5JQ4hucVWE4k7Qkw2AvOVDQikiNiN9Ygcg4Dj6YtF43HTsV4zX8bYgi5emGZTC8AOx-5gTaYY6oAEAT-A1xsJcxjxbB-21IujibplCLo-5QtXMPFURZOuGNvHdU3E9dCwZB1ErsmYrLr6__W2Ra9dvR9Yp6-kuth4_yDyM2NTI4xTzIJz_iQSdg4rAPx0EKzz0Jja8il2v9UEYyEP-NRvzeg#위 로그인은 마스터의 local에서만 가능함
Hyperledger Fabric 설치
-
git 받기
cd /root/fabricgit clone https://github.com/IBM/blockchain-network-on-kubernetes.gitcd blockchain-network-on-kubernetes -
Kubernetes 서버 버전이 v1.11.x 이상인 경우 아래 커멘드 실행.
## macOSsed -i '' s#unix:///host/var/run/docker.sock#tcp://docker:2375# configFiles/peersDeployment.yaml## Linuxsed -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
이슈
-
패브릭 배포할 때 ./setup_blockchainNetwork.sh 명령어 실행시 특정 명령어가 무한루프 도는 오류
내부 스크립트를 한땀한땀 따서 실행. -> 그 뒤 setup_blockchainNetwork.sh 를 커스터마이징 하여 해결 완료.
-
PV, PVC 생성 후, pod 생성할 때 디렉터리 공유가 안되는 현상 (/shared 가 계속 copy 성공해도 비어있음.)
원원
원인을 local 과 hostPath 형태의 Volume 이 accessMode ReadWriteMany 를 지원 안해서라고 판단됨.
원인 추측 출처 http://arisu1000.tistory.com/27849
nfs 를 설치하기로 함. (10.0.0.194 서버)
해결
NFS 설치 후 적용
설치 진행 후 /shared/nfs 폴더 생성
apt-get install nfs-common nfs-kernel-server portmapmkdir /shared/nfscd /shared/nfschmod 777 /shared/nfschown nobody:nogroup /shared/nfs-
NFS 설정 파일 변경
vi /etc/exports 하여 하단에 내용 추가
#형식 : [/공유 디렉터리] [접근 IP] [옵션]/shared/nfs * (rw,no_root_squash,async)
NFS 커널 서버 및 NFS 포트맵 재 시작
systemctl restart nfs-kernel-serversystemctl restart portmap클라이언트에서 유틸 설치 진행
apt install nfs-commonapt install cifs-utils#테스트mount -t nfs -o nolock 10.0.0.194:/shared/nfs /mnt/nfsmkdir /mnt/nfs/a
-
채널 생성 실패.
실행
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
'수집함' 카테고리의 다른 글
Docker 내부 구조 (0) | 2020.05.14 |
---|---|
Chrome 에서 특정 확장자 파일 다운로드 후 자동 실행하기 (1) | 2019.09.20 |
Docker Container 내에서 Docker Container 를 생성하기 (DooD 방식) (0) | 2019.06.26 |