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 で動的スキニングを実装するためのサンプルコード

推薦する

Linuxでシンボリックリンクを削除(削除)するコマンド

Linux では、シンボリック リンクを作成または削除する必要がある場合があります。もしそうなら、何...

Linux ベースの MySQL マスター スレーブ構成の全プロセスを記録する

mysql マスタースレーブ構成1. 準備ホスト: 192.168.244.128スレーブ: 192...

JavaScript でローカル変数をグローバル変数に変換する方法

まず関数の自己呼び出しを知る必要がある関数の自己呼び出し - 自己呼び出し関数1 回限りの関数 - ...

CSSの一般的なプロパティ

CSS の背景: background:#00ffee; //背景色を設定するbackground-...

Vueのdiffアルゴリズムについての簡単な説明

目次概要バーチャルドム原理実装プロセスパッチ方式sameVnode関数patchVnode関数upd...

Nginxを使用してストリーミングメディアサーバーを構築し、ライブブロードキャスト機能を実現する

前面に書かれた近年、ライブストリーミング業界は非常に人気が高まっています。伝統的な業界でのライブスト...

HTML およびプラグイン アプリケーションにおけるデータ カスタム属性の使用の概要

HTML にはデータ属性が含まれていることがよくあります。これらは HTML5 のカスタム属性です。...

InnoDB がシリアル化分離レベルを実装する方法

シリアル化の実装InnoDB は 2 つの方法でシリアル化を実装します。まず、SELECT 文が明示...

Centos7 に Docker をインストールします (2020 の最新バージョンが利用可能、コピーして貼り付けるだけ)

操作については、こちらの公式ドキュメントを参照してください。インストール1. 古いバージョンの do...

マークアップ言語 - 印刷スタイルシート

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

CSS 位置プロパティが絶対の場合のパーセンテージ値の計算

位置が絶対の場合、関連する属性のパーセンテージは、参照先の要素 (包含ブロック) を基準として計算さ...

CSS (カスケーディング スタイル シート) の一般的な用語の概要

CSS を使用する場合は、DOCTYPE (ドキュメント タイプ定義) を記述することを忘れないでく...

理論: 2年間のユーザーエクスペリエンス

<br />国内のウェブサイトが本格的に普及し、ユーザーエクスペリエンスに重点が置かれる...

Dockerコンテナのエクスポートとインポートの例

目次DockerコンテナのエクスポートDockerコンテナのインポ​​ートこの記事では主に、コンテナ...