この記事では、Ubuntuの16.04 64の両方にソースからクラスタKubeEdge 1.1.0を展開するプロセスを開始する方法を説明し、デュアルコアCPUの仮想マシン、クラウドKubernetesバージョン1.17.0、Golangバージョン1.12.4ビット。この記事では、いくつかの実用的な基準値を持っています。
I.概要
1.1環境
クラウド:Ubuntuの16.04 64ビット、ユーザー名はUbuntuのです。IPは192.168.0.102です。
エッジ終了:上記と同様、IPは192.168.0.140です。
KubeEdgeの展開は、両端が含まれます。
- クラウド
ドッキングウィンドウは、KubeEdgeクラウドクラスターとコアモジュールをkubernetes。 - 縁端
ドッカー、MQTT KubeEdge縁端及びコアモジュール。
1.2依存性
バージョン(ツール、コンパイラを含む)に依存するコンポーネント:
- golang
https://studygolang.com/dlダウンロードするには、バージョン1.12.14を。コンパイルソースコードがコンパイルされていない場合、あなたがインストールする必要はありません、が必要です。それは最新のコード、または公開されたバージョン1.1.0であるかどうかを、1.13バージョンgolangをサポートしていないので、現在の公式の要件、使用のバージョンに必要1.12 golangによると、golangバージョンのKubeEdgeの互換性、ことに留意すべきです。 - K8Sバージョン
1.17、他の記事の導入に固有の参照。現在の公式文書によると、唯一のバージョン1.16をサポートしていますが、この記事では、1.17の展開で、問題はなかったです。 - mosquitto
https://mosquitto.org/download/ダウンロードする1.6.8、。 - KubeEdgeは(雲、縁端)関連の
ダウンロードにV1.1.0、https://github.com/kubeedge/kubeedge/releasesを。
注、githubのは、常に非常に安定していなかったので、ダウンロードがより多くの時間がかかる場合があります。
1.3方法論
KubeEdge公式インストールマニュアルよりも最も権威ます。https://docs.kubeedge.io/en/latest/setup/setup.html。インストールするには、ソースからコンパイルした文書は、関与しています。しかし、初心者として、個人的に私は、公式文書が十分な詳細ではないと思われます。そこに多くのオンラインチュートリアルのインストールと展開は異なる方法が、ありますが、目的は同じです。ここに私の経験によると次のように要約:
-
各ステップで
、インストール公式文書によれば、第1の証明書を生成し、その後雲コアとエッジ側のプログラムを取得するソースコードをコンパイル。そして、設定ファイルを変更し、最後に実行します。 -
シングは、事前forearmedされ
、ダウンロード公式コンパイルされたバイナリ(cloudcore、edgecore)、または2つのバイナリファイルを取得するには、ソースコードをコンパイルします。レディー設定ファイル(とメイク適応)。そして実行します。本論文では、このよう。まず、すべての文書を作成し、プロジェクトディレクトリの統一された展開の中に置きました。
なお、KubeEdge公式文書のみKubeEdge展開に関連する伴い、KubeEdgeもドッキングウィンドウとkubernetesを(縁端にもmosquittoに依存)によって決まります。これらの専門家は、スペース、この記事が、より多くの関与を減少させるために、追加実施する必要がありますが、記事への展開のリンクを与えられました。
第二に、準備
2.1展開ファイルのディレクトリを作成します
作成、展開プロジェクトディレクトリを:
# mkdir ~/kubeedge
サブディレクトリを作成します。
# cd ~/kubeedge
# mkdir cloud edge certs yamls src
役割:
クラウド:cloudcoreと構成ファイルを含むクラウド関連の文書、。
エッジ:edgecoreや設定ファイルなどの縁端文書、。
本命:証明書ファイル。
yamls:一部yamlsファイル。
SRC:ソースディレクトリ(コードクローンを作成していないときに自動的に作成)。
2.2 KubeEdgeバイナリー
** KubeEdgeは、ここでソースからコンパイルされた使用します。**
2.2.1公式文書にコンパイル
公式のコンパイル済みのバイナリをダウンロードするHttps://github.com/kubeedge/kubeedge/releases。アーカイブ名kubeedge-V1.1.0-linuxの-amd64.tar.gz。
ソースコードをコンパイルすることによって得ることができる、方法は、後で参照します。
コンパイルされたバイナリに加えて、だけでなく、ソースコードをダウンロードする必要があり、アドレスは次のとおりです。https://github.com/kubeedge/kubeedge。コンフィギュレーション・ファイルのセクションは、ソースコードを見つけるために倉庫にのみ利用可能であるため(もちろん、ファイルのダウンロードに対応GitHubのリポジトリ上で直接見ることができます)。
2.2.2 KubeEdgeソースコンパイラ
1、ビルドにGolang環境
ダウンロード良いgolang、およびエキス:
# mkdir ~/tools
# tar xf go1.12.14.linux-amd64.tar.gz -C ~/tools
最後に、〜/ .bashrcのファイルに追加します。
export PATH=$PATH:/home/ubuntu/tools/go/bin
export GOROOT=/home/ubuntu/kubeedge
export GOPATH=/home/ubuntu/kubeedge
ソース〜/ .bashrcの効果を実行します。検証:
# ubuntu@ubuntu:~/kubeedge$ go version
go version go1.12.14 linux/amd64
2、クローン倉庫:
# git clone https://github.com/kubeedge/kubeedge.git $GOPATH/src/github.com/kubeedge/kubeedge
クローニングが遅い場合は、zipパッケージをダウンロードして、$ GOPATH / SRC / github.com / kubeedgeにソース抽出することができます / kubeedge、 このディレクトリはソースディレクトリでなければならないことに注意を。
3、gccのバージョンをテストします:
# gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
gccのインストールされていない場合は、インストール自体。
クラウドをコンパイルします。
# cd $GOPATH/src/github.com/kubeedge/kubeedge/
# make all WHAT=cloudcore
生成Cloudcoreバイナリファイルはクラウドディレクトリにあります。Cloudcore同じディレクトリとプロジェクトディレクトリを展開する設定ファイル(confディレクトリ)にコピーします。
# cp -a cloud/cloudcore ~/kubeedge/cloud/
# cp -a cloud/conf/ ~/kubeedge/cloud/
コンパイル縁端:
cd $GOPATH/src/github.com/kubeedge/kubeedge
make all WHAT=edgecore
バイナリファイルは、エッジのディレクトリに置かれて生成Edgecore。展開プロジェクトディレクトリにバイナリファイルと設定ファイルをコピーします。
# cp -a edge/edgecore ~/kubeedge/edge/
# cp -a edge/conf/ ~/kubeedge/edge/
証明書の生成2.3
# $GOPATH/src/github.com/kubeedge/kubeedge/build/tools/certgen.sh genCertAndKey edge
# cp -a /etc/kubeedge/* ~/kubeedge/certs
CAおよび本命には/ etc / kubeedge / CA位置と/ etcいる/ kubeedge / certsのディレクトリには、certsディレクトリ展開プロジェクトのディレクトリにコピーします。これは、実行するために、クラウド・マシンにあるので、雲がエッジノードに配布を容易にするために、certsディレクトリのコピーを証明書を持っていることに留意されたいです。
装置および機器CRD YAMLファイルのモジュールをコピー2.4
cp $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/devices/* ~/kubeedge/yamls
2.5コピーのNode.js
cp $GOPATH/src/github.com/kubeedge/kubeedge/build/node.json ~/kubeedge/cloud
解釈:Node.jsのノードの構成情報がクラウドマシンで実行する必要がある、(しかし実際には、ノードのK8Sを意識しましょう本当の意味で参加しない)クラスタに追加終わりのエッジの役割。
ドライブ構成ノード2.6
設定ファイルを開き、〜/ kubeedge /クラウド/ confに/ controller.yaml、2 kubeconfig、このパスは、それ以外の場合は、プロンプトが表示されます、〜などの変数を含めることはできませんのでご注意のパスを変更します。
create kube client failed with error: stat $HOME/.kube/config: no such file or directory
start unix domain socket server
デフォルトは公式であるkubeconfig: "/root/.kube/config"
、紙を変更しましたkubeconfig: "/home/ubuntu/.kube/config"
。
2.7エッジノード
オープン〜/ kubeedge /エッジ/ confに/ edge.yaml プロファイル。
サービスIPを変更します。url: wss://0.0.0.0:10000
そしてurl: 127.0.0.1:10001
クラウドIPに置き換えられ、へurl: wss://192.168.0.102:10000
とurl: 192.168.0.102:10001
。
変更された値のcgroup-ドライバは、すなわちにsystemd cgroup-driver: systemd
。クラウドK8Sもsystemdに使用しているため、一貫性のために、それが修正されます。
注:ファイルのV1.1.0バージョン、ノード名のリリースはfb4ebb70-2783-42b8-b3ef-63e2fd6d242e
、交換しますedge-node
。すでにリポジトリ設定ファイルをマスターしますedge-node
。
これまでのところ、雲のエッジとバイナリの終わりと設定KubeEdgeは修正が完了し、準備ができています。公式には、デフォルトの設定を使用することを言及しませんでした。
2.8 MQTT
MQTTのみマージナルエンドのニーズ。
端末は、エッジUbuntuシステムである場合、ソースと直接搭載:
add-apt-repository ppa:mosquitto-dev/mosquitto-ppa // 添加源
apt-get update // 更新
apt-get install mosquitto // 安装
また、コンパイルするソースコードを使用することができます。
2.9ドッカーとkubernetes
ドッカーを参照してくださいに取り付けられ、ここで、kubernetesは参照するマウントここに。kubernetesのみ展開することなく、マスター、ノードを展開できることに留意すべきです。ただし、ネットワークのプラグインをインストールする必要があります(インストールされていない場合は、ここで疑問が、状態は準備ができていません)。
デプロイメント
すでにとして準備ができたファイルは、直接多くの方が簡単に展開します。なお、端縁と機械の上端にファイルと証明書をコピーする必要があります。多くの点では、SCPコマンドを使用することをお勧めします。SSHプロトコルがインストールされていることを条件とします。コピー(また、分布とも呼ばれる)の例:
ssh 192.168.0.140 "mkdir -p /etc/kubeedge ~/kubeedge/edge"
scp -r ~/kubeedge/certs/* 192.168.0.140:/etc/kubeedge
scp -r ~/kubeedge/edge/* 192.168.0.140:~/kubeedge/edge/
解釈:
最後の/ etc / kubeedgeディレクトリのエッジにコピー機の証明書。端縁〜/ kubeedge /エッジ/ディレクトリにファイルをコピーします。
著者は、ルートSSHログインを許可するように設定し、公開鍵を追加しています。パスワードを入力する必要はありません。そのようなモードが存在しない場合は、手動でコピーします。
3.1クラウド
プロジェクトディレクトリに展開:
cd ~/kubeedge
3.1.1クラスタの展開K8S
具体的な展開は、以下のように要約ここでは、記事を参照してください。
クラスタを作成するには:
# kubeadm init --pod-network-cidr=10.244.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers
スタートネットワークプラグフランネル。
3.1.2追加 - エッジクラスタ
# kubectl apply -f cloud/node.json
ノードのステータスを表示します。
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
edge-node NotReady edge 9s
ubuntu Ready master 15h v1.17.0
出力から見ると、縁端の準備ができていません。
機器モジュールやデバイスの作成3.1.3 CRD
# kubectl apply -f yamls
注、yamls YAMLディレクトリ2つのファイル、ここで指定したディレクトリがあり、ディレクトリ内のすべてのファイルが自動的に実行されます。
雲コアの実行3.1.4
# cd cloud
# ./cloudcore // 建议先如此,方便观察日志
3.2縁端
エンドマシンのエッジ展開プロジェクトディレクトリ:
# cd ~/kubeedge/edge
コア端のエッジを実行します。
# ./edgecore // 建议先如此,方便观察日志
ファイル名を指定して実行MQTT:
# mosquitto -d -p 1883
3.3検証
クラウドで状態を確認します。
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
edge-node Ready edge 23s v1.15.3-kubeedge-v1.1.0
ubuntu Ready master 1h v1.17.0
ドライブレディ状態とエッジの両端。
クラウドでアプリケーションをデプロイします。
# kubectl apply -f $GOPATH/src/github.com/kubeedge/kubeedge/build/deployment.yaml
あなたが見ることができた後、nginxのは、コンテナターミナルの端で実行されています。ビューポッド:
# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-77698bff7d-bwc94 1/1 Running 1 1m56s <none> edge-node <none> <none>
コンテナの端面図のエッジで:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
882570ac2dec 53f3fd8007f7 "nginx -g 'daemon of…" 7 seconds ago Up 6 seconds k8s_nginx_nginx-deployment-77698bff7d-bwc94_default_4b4cdbcd-fcae-45d4-abb2-46ddd5c3c41e_1
183903d7816f kubeedge/pause:3.1 "/pause" 7 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp k8s_POD_nginx-deployment-77698bff7d-bwc94_default_4b4cdbcd-fcae-45d4-abb2-46ddd5c3c41e_6
第五に、改善
ログの利便性を表示するには、直接エンドの雲コアとエッジを実行します。本番環境を満たすために、私たちはすることができ、文書の公式ウェブサイトを参照して、システムサービスに追加する必要があります。コアプログラムとのconfが同じディレクトリになければならないことに留意すべきです。
すでに照合展開スクリプトやプログラム、更新する必要があるとして、あなたは、単にファイルを置き換えることができます。一度生成された証明書を再利用することができる後、限り雲ように、2つのエッジに完全に一致しています。
展開プロセスので、基本的には反復的な作業-理論的には、直接私の経験にスクリプトを使用して展開する必要があり、最初の接点は、これはお勧め、またはステップバイステップではなく、フォローアップの効率を向上させるためにされていない、スクリプトを使用することをお勧めします。
FOLLOW
ARMv7の端エッジの展開を可能にします。
複数のエッジエンドアプリケーションを研究。
(x86などのような、のARMv7のための1つの)異なるアプリケーションエッジエンドシステムの研究。
研究KubeEdge源(Golangレベルを改善します)。
エンド・エッジ情報が表示されFailed to get host IP: failed to get network interface: eth0 err:route ip+net: no such network interface
、まだ研究を。
七、トス
公式にはkeadm展開ツールを提供し、このツールを使用するときに展開します:
gzip: stdin: unexpected end of file
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
Error: failed to run 'sh -c cd /etc/kubeedge/ && tar -C /etc/kubeedge/ -xvzf kubeedge-v1.1.0-linux-amd64.tar.gz && cp /etc/kubeedge//kubeedge/edge/edgecore /usr/local/bin/.' because of error : exit status 2
ソースコードを追跡し、パスの一部がソースコードを変更あきらめ、月Golangの観点から、連絡先のみを条件を満たしていない見つけました。
公式文書を読んで、私たちは(もっと自分自身の理由のためである)理解する上でいくつかの問題が発生しました。読者がどこヘッド数回どこはいわからないので、何の文書番号は、単独のタイトルは、区別の大きさではありません。また、この文Please make sure edge-node is added in kubernetes.
偏差理解が、私は(すなわち使用kubeadm縁端を追加参加)クラスタのエッジにノードを追加するK8Sだと思った、実際にクラスタ内のノードを追加し、node.jsonファイルを展開する意味するべきです。
参照
- 公式のソースリポジトリ:https://github.com/kubeedge/kubeedge
- アーカイブ:https://github.com/kubeedge/kubeedge/releases
- 公式インストールマニュアルます。https://docs.kubeedge.io/en/latest/setup/setup.html
- キーのインストールスクリプト:https://github.com/du2016/one-step-install-kubeedge