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

推薦する

nginx ロードバランシングを介して https にリダイレクトする方法

ウェブ上で証明書とキーをコピーするscp -rp -P52113 /application/ngin...

MySQL データベース面接に必須の 3 つのログの紹介

目次1. redo ログ (MySQL ストレージ エンジン InnoDB のトランザクション ログ...

ログインスライダー検証を実装するJavaScript

この記事では、ログインスライダー検証を実装するためのJavaScriptの具体的なコードを参考までに...

MySQL ページング中にオフセットが大きすぎる場合の SQL 最適化の経験の共有

問題を見つけるコンテンツをリストで表示すると、リスト内のコンテンツの数は多いかもしれませんが、ユーザ...

JS デコレータ パターンと TypeScript デコレータ

目次デコレータパターンの紹介TypeScript のデコレータデコレータの使用デコレーターファクトリ...

Angularの親子コンポーネント通信の詳細な説明

目次概要1. 入力および出力プロパティの概要2. 入力属性3. プロパティバインディングは親コンポー...

フロントエンド Vue ユニットテストを始める

目次1. ユニットテストはなぜ必要なのでしょうか? 2. ユニットテストの書き方3. テストツール4...

VMware WorkStation を Docker for Windows で使用するための詳細なチュートリアル

目次1. はじめに2. Windows用Dockerをインストールする1. Windows用Dock...

Vue シンプル登録ページ + 確認コード送信機能の実装例

目次1. エフェクト表示2. 検証コードとメールプッシュ管理の強化(後述のブログを参照) 3. 一般...

CSS3で実装されたテキストポップアップ効果

成果を達成する実装コードhtml <div>123WORDPRESS.COM</d...

テキストエリアの disabled 属性と readonly 属性の具体的な使用法

障害者の定義と使用法disabled 属性はブール属性です。 disabled 属性は、テキスト領域...

MySQL デッドロックのトラブルシューティング プロセスの完全な記録

序文これまで遭遇したデータベースのデッドロックはすべて、バッチ更新中のロック順序の不一致が原因でした...

MySQL DDL による同期遅延を解決する方法

目次序文解決ツールの紹介仕組み使用制限使用上の注意使用例いくつかのパラメータの説明出力例Tencen...

Docker ベースの ELK ログ システムを構築する方法

背景要件:ビジネスがどんどん大きくなると、サーバーの数も増え、さまざまなアクセスログ、アプリケーショ...

MySQL で単一のデータベースまたはテーブルを復元する方法と、起こりうる落とし穴

序文:最も一般的に使用される MySQL 論理バックアップ ツールは mysqldump です。通常...