k8s+docker クラスターの統合と構築 (完全版)

1. Kubernetesシリーズの紹介

1. 背景の紹介

  クラウドコンピューティングは急速に発展しています

  • IaaS

    • PaaS

      • SaaS

  Docker テクノロジーは飛躍的に進歩しています

  • 一度構築すればどこでも実行可能

    • コンテナは高速かつ軽量です

      • 完全な生態環境

2. Kubernetes とは何ですか?

  まず第一に、これはコンテナーテクノロジーに基づいた分散アーキテクチャのための新しい主要なソリューションです。 Kubernetes (k8s) は、Google のオープンソース コンテナ クラスタ管理システム (Google 内部: Borg) です。 Docker テクノロジーに基づいて、コンテナ化されたアプリケーションの展開と運用、リソースのスケジューリング、サービス検出、動的スケーリングなどの一連の完全な機能を提供し、大規模なコンテナ クラスターの管理をより便利にします。

  Kubernetes は、完全なクラスター管理機能、マルチレベルのセキュリティ保護とアクセス メカニズム、マルチテナント アプリケーションのサポート機能、透過的なサービス登録と検出メカニズム、組み込みのインテリジェントなロード バランサー、強力な障害検出と自己検出機能を備えた、完全な分散システム サポート プラットフォームです。 - 修復機能、ローリング サービス アップグレードとオンライン拡張機能、スケーラブルな自動リソース スケジューリング メカニズム、および複数粒度のリソース クォータ管理機能。同時に、Kubernetes は、開発、展開テスト、運用および保守の監視を含むあらゆる側面をカバーする完全な管理ツールを提供します。

Kubernetes では、Service は分散クラスター アーキテクチャの中核であり、Service オブジェクトには次の重要な特性があります。

一意に指定された名前を持つ

仮想 IP (クラスター IP、サービス IP、または VIP) とポート番号を持っている

特定のリモート サービス機能を実現できる

このサービス機能を提供する一連のコンテナ アプリケーションにマップされます

  現在、Service のサービス プロセスは、Redis、Memcache、MySQL、Web サーバー、または特定のビジネスを実装する特定の TCP サーバー プロセスなど、ソケット通信に基づく外部サービスを提供していますが、通常、Service は複数の関連する Service プロセスで構成されており、サービスを提供します。各サービス プロセスには独立したエンドポイント (IP+ポート) アクセス ポイントがありますが、Kubernetes を使用すると、サービスを介して指定されたサービスに接続できます。 Kubernetes の透過的な負荷分散と障害回復メカニズムを使用すると、バックエンドにサービス プロセスがいくつあるか、障害によりサービス プロセスが他のマシンに再デプロイされるかどうかに関係なく、通常のサービス呼び出しには影響しません。さらに重要なのは、サービス自体は作成後に変更されないということです。つまり、Kubernetes クラスターでは、サービスの IP アドレスの変更を心配する必要がありません。

  コンテナは強力な分離機能を備えており、サービスを提供するプロセス群をコンテナ内に分離する必要があります。この目的を達成するために、Kubernetes は各サービス プロセスを対応する Pod にパッケージ化し、Pod 内で実行されるコンテナにする Pod オブジェクトを設計しました。 Service と Pod 間の関連付け管理を確立するために、Kubernetes は各 Pod にラベルを付けます。たとえば、MySQL を実行している Pod には name=mysql というラベルが付けられ、PHP を実行している Pod には name=php というラベルが付けられ、その後、対応する Service にラベルが付けられます。ラベル セレクター Label Selector を定義します。これにより、Service と Pod 間の関連付けの問題をうまく解決できます。

  クラスター管理の観点から、Kubernetes はクラスター内のマシンをマスター ノードと作業ノードのグループに分割し、そのうちマスター ノードはクラスター管理に関連する一連のプロセス (kube-apiserver、kube-controller-manager) を実行します。これらのプロセスは、リソース管理、Pod スケジューリング、エラスティック スケーリング、セキュリティ制御、システム監視、エラー修正などのクラスター全体の管理機能を実現し、すべて自動的に完了します。ノードはクラスター内の作業ノードとして機能し、実際のアプリケーションを実行します。ノード上で Kubernetes によって管理される最小の実行単位はポッドです。ノードは、Kubernetes の kubelet および kube-proxy サービス プロセスを実行します。これらのサービス プロセスは、ポッドの作成、起動、監視、再起動、破棄、およびソフトウェア モードのロード バランサーの実装を担当します。

  Kubernetes クラスターでは、従来の IT システムにおけるサービスの拡張とアップグレードという 2 つの主要な問題が解決されます。拡張が必要な​​サービスに関連付けられたポッドのレプリケーション コントローラー (RC) を作成するだけで、サービスの拡張やその後のアップグレードなどの問題が簡単に解決されます。 RC 定義ファイルには、以下の 3 つの重要な情報を含めます。

ターゲットポッドの定義

ターゲット Pod が実行する必要があるレプリカの数 (レプリカ)

監視対象のPodラベル(Label)

  RC を作成した後、Kubernetes は RC で定義されたラベルを通じて対応するポッド インスタンスをフィルターし、そのステータスと数量をリアルタイムで監視します。インスタンスの数が定義されたレプリカの数より少ない場合は、次の基準に基づいてポッド インスタンスが作成されます。 RC で定義されたポッド テンプレート。その後、新しいポッドが適切なノードにスケジュールされ、ポッド インスタンスの数が所定の目標に達するまで実行が開始されます。このプロセスは完全に自動化されています。

  

 Kubernetes の利点:

  • コンテナオーケストレーション

  • 軽量

  • オープンソース

  • 柔軟なスケーリング

  • 負荷分散

3. Kubernetes の中心となる概念

3.1、マスター

  k8s クラスタの管理ノードは、クラスタを管理し、クラスタのリソース データへのアクセスを提供する責任があります。 Etcd ストレージ サービス (オプション) を使用し、Api サーバー プロセス、コントローラー マネージャー サービス プロセス、およびスケジューラー サービス プロセスを実行し、作業ノード Node を関連付けます。

  • Kubernetes API サーバーは、HTTP REST インターフェイスの主要なサービス プロセスを提供し、Kubernetes のすべてのリソースの追加、削除、変更、クエリなどの操作の唯一のエントリ ポイントです。これはクラスタ制御のエントリプロセスでもあります。

  • Kubernetes Controller Manager は、すべての Kubernetes リソース オブジェクトの自動化されたコントロール センターです。

  • Kubernetes スケジュールは、リソースのスケジューリング (ポッドのスケジューリング) を担当するプロセスです。

3.2、ノード

  ノードは、Kubernetes クラスター アーキテクチャでポッドを実行するサービス ノード (エージェントまたはミニオンとも呼ばれます) です。ノードは Kubernetes クラスター操作の単位であり、割り当てられたポッドの操作をホストするために使用され、ポッドが実行されるホストです。マスター管理ノードに関連付けられており、名前、IP、およびシステム リソース情報が含まれています。

  • dockereningサービスを実行する

  • デーモンクネレット

  • ロードバランサkube-proxy

各 Node ノードは、次の主要なプロセスのセットを実行します。

kubelet: ポッドのコンテナの作成、起動、停止などのタスクを担当します。

kube-proxy: Kubernetes Service の通信および負荷分散メカニズムを実装する重要なコンポーネント

Docker Engine (Docker): Docker エンジン。ネイティブ コンテナの作成と管理を担当します。

  ノード ノードは、動作中に Kubernetes クラスターに動的に追加できます。デフォルトでは、kubelet 自体がマスターに登録されます。これは、Kubernetes が推奨するノード管理方法でもあります。kubelet プロセスは、次のような独自の情報をマスターに定期的に報告します。オペレーティング システム、Docker のバージョン、CPU とメモリ、実行中の Pod などの情報が含まれるため、マスターは各 Node ノードのリソース使用状況を把握し、効率的でバランスの取れたリソース スケジューリング戦略を実装できます。

3.3、サブ

ノード ノード上で実行される複数の関連コンテナの組み合わせ。ポッドに含まれるコンテナは同じホスト上で実行され、同じネットワーク名前空間、IP アドレス、ポートを使用し、ローカルホスト経由で通信できます。ポッドは、Kurbernetes の作成、スケジューリング、管理のための最小単位であり、コンテナよりも高いレベルの抽象化を提供し、展開と管理をより柔軟にします。ポッドには 1 つのコンテナまたは複数の関連コンテナを含めることができます。

Podには実際には通常のPodと静的Podの2種類があり、後者は特殊で、Kubernetesのetcdストレージには存在せず、特定のNode上の特定のファイルに、そのNode上にのみ保存されます。 。通常のポッドが作成されると、etcd ストレージに配置され、Kubernetes マスターによってバインドする特定のノードにスケジュールされ、ポッドは kubelet プロセスによって関連する Docker のセットにインスタンス化されます。対応するノード。コンテナは起動され、開始されます。デフォルトでは、ポッド内のコンテナが停止すると、Kubernetes は自動的にこの問題を検出し、ポッドを再起動します (ポッド内のすべてのコンテナを再起動します)。ポッドが配置されているノードがダウンした場合このノード上のすべてのポッドが他のノードに再スケジュールされます。

3.4、レプリケーションコントローラー

レプリケーション コントローラーは、ポッド コピーを管理し、クラスター内に指定された数のポッド コピーが存在することを確認するために使用されます。クラスター内のレプリカの数が指定された数より大きい場合は、指定された数を超えるコンテナーが停止され、それ以外の場合は、指定された数よりも少ないコンテナーが開始され、数が変わらないことが保証されます。レプリケーション コントローラーは、弾力的なスケーリング、動的な拡張、ローリング アップグレードを実現するためのコアです。

3.5、サービス

サービスは、ポッドの論理コレクションとそのコレクションにアクセスするための戦略を定義し、実際のサービスを抽象化したものです。サービスは、統合されたサービス アクセス エントランス、サービス プロキシおよび検出メカニズムを提供し、複数のポッドを同じラベルに関連付けます。ユーザーはバックグラウンド ポッドがどのように実行されるかを知る必要はありません。

外部システムからサービスにアクセスする際の問題

まず、Kubernetes の 3 つの IP を理解する必要があります。

  • ノードIP: ノードノードのIPアドレス

  • ポッド IP: ポッドの IP アドレス

  • クラスターIP: サービスのIPアドレス  

    

まず、ノード IP は、Kubernetes クラスター内のノードの物理ネットワーク カード IP アドレスであり、このネットワークに属するすべてのサーバーは、このネットワークを介して直接通信できます。これは、Kubernetes クラスターの外部のノードが Kubernetes クラスター内のノードまたは TCP/IP サービスにアクセスする場合、ノード IP を介して通信する必要があることも示しています。

次に、Pod IP は各 Pod の IP アドレスで、docker0 ブリッジの IP アドレス セグメントに基づいて Docker エンジンによって割り当てられ、通常は仮想の第 2 層ネットワークです。

最後に、クラスター IP は仮想 IP ですが、次の理由により偽の IP ネットワークに似ています。

クラスター IP は Kubernetes Service オブジェクトにのみ作用し、Kubernetes によって IP アドレスが管理および割り当てられます。

クラスター IP を ping できません。応答する「エンティティ ネットワーク オブジェクト」がありません。

クラスター IP はサービス ポートと組み合わせて特定の通信ポートを形成することのみが可能であり、クラスター IP だけでは通信の基盤を持たず、Kubernetes クラスターのような閉じられた空間に属します。

Kubernetes クラスター内では、ノード IP ネットワーク、ポッド IP ネットワーク、およびクラスター IP ネットワーク間の通信には、Kubernetes 自体によって設計された特別なプログラミング ルーティング ルールが使用されます。

3.6、ラベル

Kubernetes の API オブジェクトは Label によって識別されます。Label の本質は、キーと値がユーザーによって指定される一連の Key/Value ペアです。ラベルは、ノード、ポッド、サービス、RC などのさまざまなリソース オブジェクトにアタッチできます。リソース オブジェクトは任意の数のラベルを定義でき、同じラベルを任意の数のリソース オブジェクトに追加できます。ラベルはレプリケーション コントローラーとサービスの動作の基礎であり、この 2 つはラベルを介してノード上で実行されるポッドに関連付けられます。

1 つ以上の異なるラベルを指定したリソース オブジェクトにバンドルすることで多次元のリソース グループ管理機能を実装できるため、リソースの割り当て、スケジューリング、構成などの管理タスクを柔軟かつ便利に実行できます。

バージョンタグ: "リリース": "安定版"、"リリース": "カナリア"....

環境タグ: "環境": "開発"、"環境": "qa"、"環境": "本番"

スキーマ タグ: "層": "フロントエンド"、"層": "バックエンド"、"層": "ミドルウェア"

パーティション ラベル: "パーティション": "顧客 A"、"パーティション": "顧客 B"

品質管理タグ: 「追跡」: 「毎日」、「追跡」: 「毎週」。

ラベルは、私たちがよく知っているラベルと同等です。リソース オブジェクトのラベルを定義することは、それにラベルを与えることと同じです。その後、ラベル セレクター (ラベル セレクター) を通じて、特定のラベルを持つリソース オブジェクトをクエリおよびフィルターできます。Kubernetes はこれを使用します。メソッドは、SQL に似たシンプルで汎用的なオブジェクト クエリ メカニズムを実装します。

Kubernetes での Label Selector の重要な使用シナリオは次のとおりです。

kube-Controller プロセスは、リソース オブジェクト RC にラベル セレクターを定義することで監視対象の Pod コピーの数をフィルタリングし、コピー数が常に期待される設定を満たす完全自動制御プロセスを実現します。

 kube-proxy プロセスは、サービスのラベル セレクターを通じて対応するポッドを選択し、各サービスのリクエスト転送ルーティング テーブルを対応するポッドに自動的に確立することで、サービスのインテリジェントなロード バランシングを実現します。

 特定のノードに特定のラベルを定義し、ポッド定義ファイルでラベル スケジューリング戦略ノードセレクターを使用することにより、kuber-scheduler プロセスはポッドの「ダイレクト スケジューリング」機能を実装できます。

4. Kubernetes のアーキテクチャとコンポーネント

- サービスのグループ化、小規模クラスター、マルチクラスター

- サービスのグループ化、大規模クラスター、単一クラスター

4.1. Kubernetes コンポーネント:

Kubernetes マスター制御コンポーネントは、次のコンポーネントを含むシステム全体 (クラスター) をスケジュールおよび管理します。

4.1.1、Kubernetes APIサーバー

Kubernetes システムへの入り口として、コア オブジェクトの追加、削除、変更、クエリ操作をカプセル化し、RESTful API インターフェイスの形式で外部の顧客や内部コンポーネントに提供します。維持される REST オブジェクトは永続化され、Etcd に保存されます。

4.1.2.Kubernetes スケジューラ

    新しく作成されたポッドのノード選択 (つまり、マシンの割り当て) を実行し、クラスターのリソースのスケジューリングを担当します。コンポーネントは分離されているため、他のスケジューラと簡単に置き換えることができます。

4.1.3.Kubernetes コントローラー

    さまざまなコントローラーの実行を担当します。Kubernetes の正常な動作を保証するために、多くのコントローラーが提供されています。

4.1.4.レプリケーションコントローラー

    レプリケーション コントローラーを管理および保守し、レプリケーション コントローラーとポッドを関連付け、レプリケーション コントローラーによって定義されたレプリカの数が実際に実行されているポッドの数と一致していることを確認します。

4.1.5.ノードコントローラー

    ノードを管理および保守し、ノードの健全性状態を定期的にチェックし、(障害のある | 障害がない) ノードを識別します。

4.1.6.名前空間コントローラー

    ネームスペースを管理および保守し、ポッド、サービスなどのネームスペース内の API オブジェクトを含む無効なネームスペースを定期的にクリーンアップします。

4.1.7.サービスコントローラー

    サービスを管理および維持し、負荷とサービス エージェントを提供します。

4.1.8.エンドポイントコントローラー

    エンドポイントの管理と保守、サービスとポッドの関連付け、サービスのバックエンドとしてのエンドポイントの作成、ポッドの変更時にエンドポイントをリアルタイムで更新します。

4.1.9.サービスアカウントコントローラー

    サービス アカウントを管理および保守し、ネームスペースごとにデフォルトのサービス アカウントを作成し、サービス アカウントのサービス アカウント シークレットを作成します。

4.1.10。永続ボリュームコントローラー

    Persistent Volume と Persistent Volume Claim を管理および保守し、新しい Persistent Volume Claim にバインドするための Persistent Volume を割り当て、解放された Persistent Volume のクリーンアップとリサイクルを実行します。

4.1.11.デーモンセットコントローラー

    デーモン セットを管理および保守します。デーモン ポッドを作成し、指定されたノード上でデーモン ポッドが正常に実行されるようにします。

4.1.12。デプロイメントコントローラー

    デプロイメントを管理および保守し、デプロイメントとレプリケーション コントローラーを関連付け、指定された数のポッドが実行されていることを確認します。デプロイメントが更新されると、レプリケーション コントローラーとポッドの更新を制御します。

4.1.13.ジョブコントローラー

    ジョブを管理および保守し、Jod のワンタイム タスク ポッドを作成し、ジョブで指定された数のタスクが完了することを確認します。

4.1.14。ポッド オートスケーラー コントローラー

    Pod の自動スケーリングを実現し、監視データを定期的に取得し、ポリシー照合を実行し、条件が満たされた場合に Pod スケーリング アクションを実行します。

4.2、Kubernetes ノード

Kubernetes ノードはノードを実行し、次のコンポーネントを含むビジネス コンテナを実行および管理します。

4.2.1、Kubelet

Kubelet はコンテナの管理と制御を担当し、Kubernetes API サーバーからポッド作成リクエストを受け取り、コンテナを開始および停止し、コンテナの実行ステータスを監視し、Kubernetes API サーバーに報告します。

4.2.2、Kubernetesプロキシ

Pod のプロキシ サービスの作成を担当する Kubernetes Proxy は、Kubernetes API サーバーからすべてのサービス情報を取得し、サービス情報に基づいてプロキシ サービスを作成して、サービスからポッドへのリクエストのルーティングと転送を実装することで、Kubernetes レベルの仮想サービスを実現します。転送ネットワーク。

4.3.3、ドッカー

コンテナサービスはノード上で実行する必要があります

2. KubernetesをベースにしたDockerクラスタ環境構築の実践

Kubernetes は、Docker に基づいて Google によって構築された分散クラスターであり、次の主要コンポーネントで構成されます。

1、etc:

高可用性ストレージの共有構成とサービス検出は、ノード マシン上のフランネルと組み合わせて使用​​され、各ノードで実行されている Docker が異なる IP セグメントを持つことができるようにするために使用されます。最終的な目標は、異なるノードで実行されている Docker コンテナが異なる IP セグメントを持つようにすることです。 ip セグメント: 他のコンテナ (他のノードで実行されている Docker コンテナ) とは異なる IP アドレス。

2、フランネル:

ネットワーク構造のサポート

3、APIサーバーへ:

kubectl を通じて直接制御するか、リモート API を使用して制御するかにかかわらず、apiServer を経由する必要があります。

4、kube-コントローラー-マネージャー:

レプリケーション コントローラー、エンドポイント コントローラー、名前空間コントローラー、およびサービスアカウント コントローラーに対するループ制御。kube-apiserver と対話して、これらのコントローラーが機能することを確認します。

5、スケジューラーになる

Kubernetes スケジューラの機能は、特定のスケジューリング アルゴリズムに従って、指定された作業ノード (ノード) にポッドをスケジュールすることです。このプロセスはバインドとも呼ばれます。

6、クベレット

Kubelet は Kubernetes ノード上で実行され、コンテナ エージェントの論理的な後継者です。

7、代理人になる

kube-proxy は、ノードノード上で実行される kubernetes のコンポーネントであり、サービス プロキシの役割を果たします。

3. 環境を準備する

1. アーキテクチャ トポロジ図

ここに画像の説明を挿入します

2. 2 台の CentOS7 システム マシンの環境計画:

192.168.10.130: Kubernetes マスターのインストールに使用されます

192.168.10.131: Kubernetes ノードとして使用 (node1)

角色 IP 構成要素
マスター 192.168.10.130 etcd、kube-apiserver、kube-controller-manager、kube-scheduler
ノード01 192.168.10.131 kubelet、kube-proxy、docker
ノード02 192.168.10.132 kubelet、kube-proxy、docker

3. 環境説明

オペレーティングシステム: CentOS7

Kubernetes バージョン: v1.8.3

Docker バージョン: v17.09-ce

すべて最新の安定バージョンを使用します。

SELinux をオフにします。

注:私が使用しているバージョンは次のとおりです。

システム カーネルを確認します。 uname -r により、結果 3.10.0-229.el7.x86_64 が表示されます。

システムのバージョンを確認します: cat /etc/centos-release

結果を表示 CentOS Linux リリース 7.1.1503 (コア)

システムビット番号を確認します: getconf LONG_BIT

オペレーティング システム: CentOS Linux リリース 7.1.1503 (コア)

Kubernetes バージョン: v1.10。

Docker バージョン: v17.05-ce

etcd バージョン: v3.34

SELinux をオフにします。

導入部分

4. クラスターをデプロイする

1. バイナリパッケージをダウンロードします。

Kubernetes ソフトウェア パッケージと ETCD

公式ダウンロード アドレスからダウンロードできます。アドレスは次のとおりです。クリックしてリンクを開きます。最新のダウンロード バージョンは V1.10 でブロックされます。クリックしてリンクを開くを参照してください。いずれにせよ、私はまだV1.0のクライアントバイナリ、サーババイナリ、ノードバイナリを入れてダウンロードしました。 ETCD はリンクをクリックするとダウンロードできます。

ソフトウェアパッケージの目的

kubernetes-server-linux-amd64.tar.gz

バージョンは V1.10 (KUBE-APISERVER、KUBE-CONTROLLER-MANAGER、KUBE-SCHEDULE を含む)

ダウンロード アドレス: kubernetes-server-linux-amd64.tar.gz_無料高速ダウンロード | Baidu Netdisk - 無制限の共有

kubernetes-node-linux-amd64.tar.gz

バージョンは V1.10 で、KUBELET、KUBE-PROXY、KUBECTL が含まれており、最初に Docker をインストールする必要があります。

ダウンロード アドレス:kubernetes-node-linux-amd64.tar.gz_無料高速ダウンロード | Baidu Netdisk - 無制限の共有

etcd-v3.3.4-linux-amd64.tar.gz

バージョンは V3.34 で、Kubernetes マスターには ETCD データ ストレージが必要です

ダウンロード アドレス:etcd-v3.3.4-linux-amd64.tar.gz_無料高速ダウンロード | Baidu Netdisk - 無制限の共有

ドッカー

バージョン V1.17.05

2.ダウンロードが完了したら、サーバーにアップロードします

kubernetes-server-linux-amd64.tar.gz をマスターノードにアップロードします。

kubernetes-node-linux-amd64.tar.gz がノードにアップロードされます。

etcd-v3.3.4-linux-amd64.tar.gz をノードにアップロードします

5. システム上で実行されているファイアウォールと selinux をオフにし、タイムゾーンのホスト名を設定します。

1. システムでファイアウォールが有効になっている場合は、次の手順に従ってファイアウォールをオフにします (すべてのマシン)

# systemctl ファイアウォールを停止 # systemctl ファイアウォールを無効にする

2. selinuxを閉じる

vim /etc/sysconfig/selinux

次の値を検索して変更します
SELINUX=無効

変更後、次のコマンドを実行して変更を有効にします
setenforce 0

3. ホスト名master1、node1...タイムゾーンをそれぞれ設定します。

タイムゾーンを設定します。マスターマシンとノードマシンの両方を実行する必要があり、時間が統一されます。

timedatectl set-timezone アジア/上海

マスターホスト名を設定する

hostnamectl set-ホスト名マスター

ノードのホスト名を設定する

hostnamectl set-hostname ノード #node 実行

6. マスター (つまり、kubernetes-server) ホスト マシンのインストールと構成

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

ETCD は、共有構成とサービス検出のための分散型一貫性のある KV ストレージ システムであり、主に追加、削除、変更、セキュリティ認証、クラスタリング、選択、トランザクション、分散ロック、監視メカニズムなどが含まれ、RAFT プロトコルを実装しています。強力な

1.1. ファイルを解凍します。

etcd-v3.3.4-linux-amd64.tar.gz

1.2 ファイルを指定されたディレクトリまたは現在のディレクトリにコピーします。ただし、ファイルは bin ディレクトリにある必要があります。

解凍ディレクトリ内の etcd と etcdctl を /usr/local/bin ディレクトリにコピーするか、自分で bin ディレクトリを作成し、作成した bin ディレクトリに etcd と etcdctl を配置します。

cd /usr/local/bin/

1.3 etcd設定ファイルの設定

リストされた項目が正しく構成されており、コメントアウトされていないことを確認してください。これは、次の構成に当てはまります。 

[telecom@master ~]$ vim /etc/etcd/etcd.conf

ETCD_NAME=「デフォルト」

ETCD_DATA_DIR="/var/lib/kubelet"

ETCD_LISTEN_PEER_URLS="http://192.168.10.130:2380"

ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://127.0.0.1:2379,http://192.168.10.130:2379,http://192.168.10.130:4001"

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.130:2380"

# 別の ETCD_NAME (例: test) を使用する場合は、この名前の ETCD_INITIAL_CLUSTER 値を設定します。つまり、「test=http://...」

ETCD_INITIAL_CLUSTER="デフォルト=http://192.168.10.130:2380"

ETCD_INITIAL_CLUSTER_STATE="新規"

ETCD_INITIAL_CLUSTER_TOKEN="etcd クラスター"

ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"

ETCD_HEARTBEAT_INTERVAL=6000

ETCD_ELECTION_TIMEOUT=30000

1.4. systemctl の設定

/etc/systemd/system/ ディレクトリに etcd.service を作成します。システム ディレクトリがない場合は、単に作成します。最初に ETCD ストレージ ディレクトリ アドレス /home/chen/etcd/data を作成し、次に ETCD 設定ファイル ディレクトリを作成します. /etc/etcd/、ETCD のデフォルト構成を使用するため、/etc/etcd/etcd.conf ファイルは空であってもかまいません。

[telecom@master ~]$ vim /etc/systemd/system/etcd.service

[ユニット]

説明=etcd サーバー

After=network.target

After=network-online.target

Wants=network-online.target

 

[サービス]

#Type=simple

Type=notify

WorkingDirectory=/var/lib/kubelet

環境ファイル=-/etc/etcd/etcd.conf

ExecStart=/usr/local/bin/etcd

[インストール]

WantedBy=マルチユーザー.ターゲット

1.5. 設定後。コマンドを実行する

systemctl デーモン リロード

systemctl で etcd.service を有効にする

systemctl start etcd.service

systemctl ステータス etcd.service

systemctl stop etcd.service

発生した問題

/usr/local/bin/etcd の生成: ディレクトリではありません

新しい
mkdir -p /var/lib/kubelet

/etc/systemd/system/etcd.service を変更します
WorkingDirectory のパスを変更する
[サービス]
WorkingDirectory=/var/lib/kubelet

/etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/kubelet"

次に、必要に応じて上記のコマンドを実行すると、成功します。

1.6. etcd ステータスの確認

画像

1.7. etcd へのデータの書き込みが成功したかどうかを確認し、実行します

ETCDCTL_API=3 をエクスポート
  
etcdctl set 键 “值”
    
etcdctl 取得 

例:[telecom@master ~]$ etcdctl set li "123"
 
123

[telecom@master ~]$ etcdctl get li

1.8. 環境変数を設定する

vi /etc/profile中

エクスポート ETCDCTL_API=3
の追加

実行ソース /etc/profile

画像

エラーが報告された場合は、journalctl -f -t etcd およびjournalctl -u etcd を使用して問題を特定します。

画像

おすすめ

転載: blog.csdn.net/Isonion/article/details/132431860