Docker+K8S クラスタ環境構築と分散アプリケーション展開

Docker+K8S クラスタ環境構築と分散アプリケーション展開

1. Dockerをインストールする

yumでdockerをインストール
#サービスを開始する systemctl start docker.service
systemctl で docker.service を有効にする
#docker バージョンのテスト

2. etcdをインストールする

yum インストール etcd -y
#etcdを起動する
systemctl で etcd を起動します。
systemctl を有効にする
#etcdのヘルスステータスを確認するには、以下のコマンドを入力します。etcdctl -C http://localhost:2379 cluster-health
#Kubernetesをインストールする
yum kubernetes をインストール -y

インストール後、/etc/kubernetes/apiserver ファイルを編集し、次のように KUBE_ADMISSION_CONTROL の後の ServiceAccount を削除します。

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle、NamespaceExists、LimitRanger、SecurityContextDeny、ResourceQuota"

次に、次のプログラムを起動します (マスター)。

systemctl kube-apiserver を起動します
systemctl で kube-apiserver を有効にする
systemctl kube-controller-manager を起動します
systemctl kube-controller-manager を有効にする
systemctl kube-scheduler を起動します
systemctl kube-scheduler を有効にする

次に、Node プログラムを起動します。

systemctl kubelet を起動します
systemctl kubelet を有効にする
systemctl kube-proxy を起動します
systemctl kube-proxy を有効にする

このようにして、シンプルな K8S クラスター環境が構築されました。以下のコマンドを実行すると、クラスターの状態を表示できます。


ただし、クラスター内のポッドのネットワークを均一に管理する必要があるため、オーバーレイ ネットワーク フランネルを作成する必要があり、現時点ではクラスター環境がうまく機能していません。

1. フランネルを取り付ける:

yum インストール フランネル -y

2. ファイル /etc/sysconfig/flanneld を編集し、次のコードを追加します。

--logtostderr=false --log_dir=/var/log/k8s/flannel/ --etcd-prefix=/atomic.io/network --etcd-endpoints=http://localhost:2379 --iface=enp0s3

-iface はネットワーク カードの名前に対応します。

3. etcdでflanneldのキーを設定する

Flannel は、複数の Flannel インスタンス間の設定の一貫性を確保するために etcd を設定するため、etcd で次の設定を実行する必要があります。

etcdctl mk /atomic.io/network/config '{ "ネットワーク": "10.0.0.0/16" }'

/atomic.io/network/config このキーは、上記の /etc/sysconfig/flannel の設定項目 FLANNEL_ETCD_PREFIX に対応します。間違っていると起動に失敗します。

ネットワークは、ネットワーク セグメントを構成するために使用されます。物理マシンの IP と競合することはできません。任意に定義できますが、物理マシンの IP セグメントを避けるようにしてください。

4. 変更した Flannel を起動し、docker と kubernete を順番に再起動します。

systemctl を有効にする flanneld 
systemctl スタート フランネルド
サービスdockerの再起動
systemctl kube-apiserver を再起動します。
systemctl kube-controller-manager を再起動します。
systemctl kube-scheduler を再起動します
systemctl を有効にする flanneld
systemctl スタート フランネルド
サービスdockerの再起動
systemctl kubelet を再起動します
systemctl kube-proxy を再起動します。

このように、アプリケーションを Docker コンテナにデプロイすると、物理 IP を介してコンテナにアクセスできるようになります。

分散アプリケーションの展開

1. SpringBoot をベースにしたフレームワークを構築します (ここでは説明しません)。デフォルトではすでに構築されています。
2. Dockerfile を記述します。内容の例は次のとおりです。

#java:8からjava8イメージをダウンロードします
#ローカルファイルを /tmp ディレクトリにマウントします VOLUME /tmp
#ファイルをコンテナにコピーします ADD demo-0.0.1-SNAPSHOT.jar /demo.jar
#ポート 8080 を公開 EXPOSE 8080
#コンテナの起動後に実行されるコマンドを設定します ENTRYPOINT ["java","-jar","/demo.jar"]

docker build コマンドを使用してイメージを作成します。

docker build -t デモ 。

この時点で、docker イメージを実行すると、次のように先ほど構築したイメージが表示されます。

K8Sを使用してSpringBootアプリケーションをデプロイする

1. rc ファイル demo-rc.yaml を作成します。

APIバージョン: v1
種類: レプリケーションコントローラ
メタデータ:
 名前: デモ
仕様:
 # ノード数。複数に設定すると負荷分散を実現できます。レプリカ: 1
 セレクタ:
  アプリ: デモ
 テンプレート:
  メタデータ:
   ラベル:
    アプリ: デモ
  仕様:
   コンテナ:
   - 名前: デモ
    #画像名image: デモ
    #ローカルイメージがある場合、そのイメージはウェアハウスからプルされませんPullPolicy: IfNotPresent
    ポート:
    - コンテナポート: 8080

ポッドを作成するには、次のコマンドを実行します。

kubectl create -f デモ rc.yaml

作成が成功すると、ポッドを表示できます。


ContainerCreating は作成中であることを通知します。この時点で作成ログを表示できます。


次のようにプロンプ​​トが表示されます: redhat-c​​at.crt は存在​​しません。まず、ll コマンドを使用してファイルをチェックしてみましょう:


このファイルは /etc/rhsm/ca/redhat-uep.pem を指すリンク ファイルであることがわかりますが、このファイルは存在しません。では、このファイルはどこから来たのでしょうか?答えはこのパスにあります。rhsm ソフトウェアをインストールする必要があります。インストールするには、次のコマンドを実行します。

yum インストール *rhsm* -y

しばらく待つとインストールが完了します。

インストールが完了したら、ll コマンドを実行してファイルが存在するかどうかを確認します。

[root@MiWiFi-R3-srv ~]# ll /etc/rhsm/ca/redhat-uep.pem
ls: /etc/rhsm/ca/redhat-uep.pem にアクセスできません: そのようなファイルまたはディレクトリはありません

まだファイルは存在しないことがわかりましたが、手動で作成できます。

/etc/rhsm/ca/redhat-uep.pem をタッチします。

上記の操作が完了したら、まず rc を削除してから作成します。

[root@MiWiFi-R3-srv ~]# kubectl delete rc デモ
レプリケーションコントローラ「デモ」が削除されました
[root@MiWiFi-R3-srv ~]# kubectl create -f demo-rc.yaml 
レプリケーションコントローラ「デモ」が作成されました

しばらく待ってから、po を再度確認したところ、正常に起動していることがわかりました。

[root@MiWiFi-R3-srv ~]# kubectl get po
名前 準備完了 ステータス 再起動 年齢
demo-hdmxs 1/1 実行中 0 1分

この時点では、LAN 経由でアプリケーションにアクセスすることはできないため、サービスを作成する必要があります。

1. サービス ファイル demo-svc.yaml を作成します。

APIバージョン: v1
種類: サービス
メタデータ:
 名前: デモ
仕様:
 タイプ: NodePort
 ポート:
 - ポート: 8080
  ターゲットポート: 8080
  # ノードが外部に公開するポート(30000~32767 の範囲である必要があります)
  ノードポート: 30001
 セレクタ:
  アプリ: デモ

2. 次のコマンドを実行します。

[root@MiWiFi-R3-srv ~]# kubectl create -f demo-svc.yaml 
サービス「デモ」を作成しました

3. 作成したサービスを表示できます。


この時点で、図に示すように、ip:30001 を介してアプリケーションにアクセスできます。


アクセスできない場合は、ファイアウォールをオフにする必要があります。

systemctl 停止 ファイアウォール
iptables -P 転送 受け入れ

Docker+K8S クラスター環境構築と分散アプリケーション展開に関する記事はこれで終了です。より関連性の高い Docker K8S クラスター環境構築コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Kubernetes (k8s) 入門
  • Kubernetes 環境に単一ノードの Redis データベースをデプロイする方法
  • k8sを使用してDjangoプロジェクトをデプロイする手順
  • Javaプロジェクトのk8sデプロイメントの実装
  • Docker 学習ノート k8s デプロイ方法
  • 実稼働レベルの K8S 基本環境の展開と構成プロセス

<<:  MySQL の複数テーブル関連付け 1 対多クエリを使用して最新のデータを取得する方法の例

>>:  vue+element で動的スキニングを実装するためのサンプルコード

推薦する

Win7x64でのMySQL 5.7.18解凍版のインストール方法

関連記事: Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールする...

Lua モジュールを使用して WAF を実装する Nginx の原理の分析

目次1. WAFの背景2. WAFとは3. 動作原理4. WAF機能5. WAFと従来のファイアウォ...

画像ファイルの形式とその選択方法

1. どの 3 つの形式ですか?それぞれ、gif、jpg、png です。画像ファイルを最適化すること...

MYSQL での Truncate の使用法の詳細な説明

この記事のガイド: テーブル内のデータを削除するには、削除と切り捨ての 2 つの方法があります。TR...

MySQL データベース アカウントの作成、認証、データのエクスポートおよびインポート操作の例

この記事では、MySQL データベースでのアカウントの作成、認証、データのエクスポートおよびインポー...

Dockerデータを完全にクリーンアップする方法

目次定期的に剪定するミラーエビクションコンテナのクリーンアップネットワークソート体積の蒸発完全にクリ...

Ubuntu での Subversion (SVN) の詳細なインストールと設定

ソフトウェア開発者であれば、Subversion に精通している必要があります。 Subversio...

Ubuntu 18.0.4 MySQL 8.0.20 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.20 のインストールおよび設定方法は、参考としてグラフィック チュートリアルにま...

CSS仕様 BEM CSSとOOCSSサンプルコード詳細説明

序文プロジェクト開発中、各人のコーディング習慣が異なるため、記述された CSS コードは十分に構造化...

Vueでのバスの使用に関する詳細な説明

Vue バス メカニズム (バス) vuex を使用するだけでなく、vue 内の親子以外のコンポーネ...

JavaScript は、マウスがテーブル行を通過するときに色の識別を実装します。

この記事では、マウスがテーブルの行を通過するときにJavaScriptを使用して色ラベルを表示する方...

HTML 形式の JSON 出力の例 (テスト インターフェース)

JSON データを美しいインデント形式で表示するには、最も単純な JSON.stringify 関...

MySQL パフォーマンス ストレス ベンチマーク ツール sysbench の使い方の紹介

目次1. sysbenchの紹介#プロジェクトダウンロードアドレス: 2. Sysbenchのインス...

タイムライン効果を実現するCSS3

最近、コンピューターの電源を入れたところ、Geek Academy が新規ユーザーに 1 か月の無料...

Linuxでディスク使用量を確認する方法

1. dfコマンドを使用してディスク全体の使用量を表示します。 df コマンドは、ハードディスクのマ...