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

推薦する

仮想スクロールを簡単に実装するためのVueサンプルコード

目次序文ローリング原理成し遂げるソースコード参照する序文モバイル Web ページの日常的な開発では、...

Linux コマンドを使用してオーディオ形式を変換および結合する方法

FFmpeg flacをインストールする eric@ray:~$ sudo apt install ...

動的な色切り替えの実装コードをサポートするために、CSS で SVG 画像を参照します。

表示する svg 画像を追加すると、React はファイルが見つからないというメッセージを表示します...

JavaScript は 9 グリッドのクリックによる色の変更効果を実装します

この記事では、9グリッドクリックの色変更効果を実現するためのJavaScriptの具体的なコードを参...

Linux のタイムドログ削除を実装する簡単な方法

導入Linux は、ファイル、ログ、電子メール、バックアップなどを自動的に生成できるシステムです。ハ...

Pythonは出力をcsv操作に書き込む

以下のように表示されます。 def test_write(self): フィールド=[] field...

MySQL データベース SELECT クエリ式分析

データ管理の大部分は検索であり、SELECT はその大部分を占めています。 SELECT selec...

Linux ps および pstree コマンドの知識ポイントのまとめ

Linux の ps コマンドは Process Status の略です。 ps コマンドは、システ...

この記事ではMySQLのNULLについて説明します。

目次序文MySQL の NULL 2 NULL占有長3 NULL値の比較4SQLはNULL値を処理す...

MySQL の不正な文字列値の解決方法

MySQL を使用して中国語の文字を挿入すると、多くの友人から次のエラーが報告されます。 これは、文...

MySQL での or ステートメントの使用例

1. MySQL での or 構文の使用、および MySQL 構文で or を使用する際の注意点。 ...

Linux の chown コマンドと chmod コマンドの違いの詳細な説明

Linux システムでは、chmod コマンドと chown コマンドの両方を使用して権限を設定でき...

nginxフロー制御とアクセス制御の実装

nginx トラフィック制御レート制限は非常に便利ですが、Nginx では誤解され、誤って設定される...

MySQL パーティション テーブルに関するパフォーマンス バグ

目次2. pt-pmapを使用したスタック分析3. このコラムのボトルネックポイントの分析4. パー...

HTML に埋め込まれた Flash HTML ウェブページ コードに Flash ファイルを埋め込むソリューション (パート 1)

中国の習慣では、旧暦の1月15日より前に新年を祝います。ここで、庭にいる友人たちに新年の幸せを祈りた...