kubernetes-1-スタンドアロンバージョンのkubernetesのオンラインインストールとコンポーネントの紹介

1はじめに

クラウドコンピューティングの急速な発展

  • IaaS
  • PaaS
  • SaaSの
    ドッカー技術は飛躍的に進み、
  • 一度構築すれば、どこでも実行できます
  • コンテナの高速で軽量
  • 完全な生態環境

Kubernetesはk8sとも呼ばれ、主に自動展開、拡張と縮小、およびコンテナ化されたアプリケーションの管理に使用されるオープンソースシステムです。多くのアプリケーションのコンテナをいくつかの論理ユニットに分割して、管理と検出を容易にします。

まず第一に、それはコンテナ技術に基づく分散アーキテクチャのための新しい主要なソリューションです。Kubernetes(k8s)は、Googleのオープンソースコンテナクラスター管理システム(Google内部:Borg)です。Dockerテクノロジーに基づいて、デプロイと操作、リソーススケジューリング、サービスディスカバリ、コンテナー化されたアプリケーションの動的スケーリングなどの一連の完全な機能を提供し、大規模なコンテナークラスター管理の利便性を向上させます。

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

1.1サービス

(1)Kubernetesでは、サービスがコアでありサービスは、外部にサービスを提供するために一意の名前とip:portを持つ必要があります。

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

拥有一个唯一指定的名字
拥有一个虚拟IP(Cluster IP、Service IP、或VIP)和端口号
能够体现某种远程服务能力
被映射到了提供这种服务能力的一组容器应用上

サービスのサービスプロセスは現在、Redis、Memcache、MySQL、Webサーバー、または特定のビジネスを実装する特定のTCPサーバープロセスなどの外部サービスを提供するソケット通信に基づいていますが、サービスは通常、複数の関連するサービスプロセスで構成されています。各サービスプロセスには独立したエンドポイント(IP +ポート)アクセスポイントがありますが、Kubernetesを使用すると、サービスを介して指定されたサービスに接続できます。

Kubernetesに組み込まれている透過的な負荷分散と障害回復メカニズムにより、バックエンドにサービスプロセスがいくつあるか、または障害が原因でサービスプロセスが他のマシンに再デプロイされるかどうかに関係なく、通常のサービスに影響を与えることはありません。呼び出し、さらに重要なことに、サービス自体が作成されると、サービス自体は変更されません。つまり、Kubernetesクラスターでは、サービスのIPアドレスの変更について心配する必要はありません。

1.2サブ

(2)サービスはコンテナによって提供されます。サービスの高可用性を確保するために、サービスを提供するコンテナは1つだけではありません。グループが必要ですこのコンテナのグループをポッドと呼びますポッドは、kubernetesの最も基本的な操作単位です。

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

(3)サービスとポッド間の管理を実現するためにラベル概念があり、同じ機能のポッドを同じラベルに設定します。たとえば、mysqlサービスを提供するすべてのポッドにname = mysqlのラベルを付けることができるため、mysqlサービスはname = mysqlラベルを含むすべてのポッドで機能します。

(4)ポッドはノード上で実行されます。ノードは物理マシンまたは仮想マシンにすることができます。通常、ノード上で数百のポッドが実行されます。各ポッドは一時停止と呼ばれる特別なコンテナを実行します。他のコンテナはビジネスコンテナと呼ばれます。ビジネスコンテナは一時停止コンテナのネットワークスタックとボリュームマウントボリュームを共有するため、同じポッド内で通信とデータビジネスコンテナ間の交換はより効率的です。

1.3クラスター管理

(5)クラスター管理の観点から、kubernetesは、クラスター内のマシンをマスターノードと作業ノードのグループノードに分割します。その中で、kube-apiserver、kube-controller-manager、およびkube-schedulerはマスター上で実行されます。 。リソース管理、ポッドスケジューリング、エラスティックスケーリング、セキュリティ制御、システムモニタリング、エラー修正などの機能を実現します。

ノードは、アプリケーションを実行し、サービスを提供する作業ノードです。ノードの最小単位はポッドです。kubernetesdのkubeletおよびkube-proxyサービスプロセスはノードで実行されています。ポッドの作成、起動、監視、再起動、破棄を担当し、負荷分散が実現されています。

クラスター管理に関して、Kubernetesは、クラスター内のマシンをマスターノードと作業ノードのグループに分割します。その中で、クラスター管理に関連するプロセスのグループkube-apiserver、kube-controller-manager、およびkube-schedulerが実行されています。これらのプロセスは、リソース管理、ポッドスケジューリング、エラスティックスケーリング、セキュリティ制御、システムモニタリング、エラー修正など、クラスター全体の管理機能を実現し、すべて完全に自動化されています。

ノードは、クラスター内の作業ノードとして、実際のアプリケーションを実行します。ノード上でKubernetesによって管理される最小のオペレーティングユニットはポッドです。Kubernetesのkubeletおよびkube-proxyサービスプロセスはノード上で実行されています。これらのサービスプロセスは、ポッドの作成、起動、監視、再起動、破棄、およびソフトウェアモードを実装するロードバランサーを担当します。

1.4サービスの拡張とアップグレード

(6)拡張とアップグレードには重要なものが必要です。レプリケーションコントローラー(RC)、RCには次の3つの重要な情報が含まれている必要があります。

(1)目标pod的定义。
(2)目标pod需要运行的副本数量(replicas)。
(3)要监控的目标pod的标签(Label)。

Kubernetesクラスターでは、従来のITシステムにおけるサービスの拡張とアップグレードの2つの主要な問題を解決します。拡張が必要な​​サービスに関連付けられたポッドのレプリケーションコントローラー(RC)を作成するだけで、サービスの拡張とその後のアップグレードが解決されます。

作業プロセス:RCで3つのインジケーターを定義する必要があります。kubernetesは、RCで定義されたラベルに従って対応するポッドを除外し、それらのステータスと数をリアルタイムで監視します。インスタンスの数が定義されたレプリカの数より少ない場合、RCに基づいて、新しいポッドを作成するためのポッドテンプレートを定義し、ポッドを適切なノードにスケジュールして開始および実行します。プロセス全体は、手動の介入なしで完全に自動化されています。

2フレーム構造

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

2.1マスターコンポーネント

ここに画像の説明を挿入します
マスターはクラスター全体のコントロールセンターです。kubernetesのすべての制御コマンドは、特定の実行プロセスを担当するマスターに送信されます。一般に、マスターは物理マシンまたは仮想マシンから独立しており、その重要性は自明です。
(1)すべてのクラスター制御コマンドがマスターコンポーネントに渡され、マスターコンポーネントで実行されます。
(2)各Kubernetesクラスターには、少なくとも1セットのマスターコンポーネントがあります(現在のデフォルト:1つ)。
(3)マスターコンポーネントの各セットには、3つのコアコンポーネント(コントローラーマネージャー、apiserver、スケジューラー)とクラスターデータ構成センターなどが含まれます。

2.1.1キューブapiserver

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

HTTP Restインターフェイスの主要なサービスプロセスを提供します。これは、すべてのリソースの追加、削除、変更、およびチェック操作の唯一のエントリであり、クラスター制御のエントリプロセスでもあります。これは、etcdと直接通信するKubernetesシステムの唯一のコンポーネントです。
(1)クラスター制御の唯一のエントリ。Kubernetesクラスター制御RESTfulAPIのコアコンポーネントを提供します。
(2)クラスター内のさまざまなコンポーネント間のデータ相互作用と通信の中心。
(3)クラスター制御のセキュリティメカニズム(ID認証、承認、およびアドミッション制御)を提供します。

2.1.2kube-controller-manager

これは、すべてのリソースの自動化制御センターであり、リソースオブジェクトのマスターとして理解できます。
(1)クラスター内のさまざまなリソースコントローラーのコアマネージャー。
(2)特定のリソースごとに、対応するコントローラーがあります。
(3)その下で管理されている各コントローラーに対応するリソースが常に「期待される状態」にあることを確認します。

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

(1)Replication Controller
管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。
(2)Node Controller
管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。
(3)Namespace Controller
管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。
(4)Service Controller
管理维护Service,提供负载以及服务代理。
(5)EndPoints Controller
管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。
(6)Service Account Controller
管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。
(7)Persistent Volume Controller
管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。
(8)Daemon Set Controller
管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。
(9)Deployment Controller
管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。
(10)Job Controller
管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目
(11)Pod Autoscaler Controller
实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。

2.1.3kube-scheduler

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

バス会社の「ディスパッチルーム」に相当するリソーススケジューリング(ポッドスケジューリング)のプロセスを担当します。
(1)APIサーバーのWatchインターフェースを介して新しく作成されたポッドレプリカの情報を監視し、スケジューリングアルゴリズムを介してポッドに最適なノードを選択します。
(2)カスタムスケジューリングアルゴリズムプロバイダーをサポートします。
(3)デフォルトのスケジューリングアルゴリズムには、事前選択戦略と最適化戦略が組み込まれており、意思決定では、リソース要件、サービス品質、ソフトウェアとハ​​ードウェアの制約、アフィニティ、データの局所性、およびその他のインデックスパラメータが考慮されます。

2.1.4etcdサーバー

Kubernetes内のすべてのリソースオブジェクトのデータは、Kubernetesのストレージ状態のデータベースであるetcdに保存されます。
(1)Kubernetesクラスターのメインデータベースには、すべてのリソースオブジェクトと状態が格納されます。
(2)デフォルトでマスターコンポーネントと同じノードにデプロイされます。
(3)Etcdのデータ変更はすべてAPIサーバーを介して実行されます。

2.2ノードコンポーネント

ここに画像の説明を挿入しますマスターに加えて、Kubernetesクラスター内の他のマシンはノードと呼ばれ、以前のバージョンはミニオンと呼ばれます。ノードは、物理マシンまたは仮想マシンにすることができます。一部のワークロード(つまり、Dockerコンテナー)は各ノードに割り当てられます。ノードがダウンすると、そのノードで実行されているアプリケーションは他のノードに転送されます。
ノード:
Kubernetesクラスター内の実際のワークロードノード(1)Kubernetesクラスターは、ワークロードを実行するために複数のノードによって共有され、ポッドは実行のために特定のノードに割り当てられます。
(2)Kubernetesは、ノードコントローラーを介してノードリソースを管理します。クラスター内のノードの動的な追加または削除をサポートします。
(3)KubeletとKube-proxyは各クラスターノードにデプロイされます。

2.2.1クベレット

コンテナの管理を担当するKubeletは、Kubernetes APIサーバーからポッド作成リクエストを受信し、コンテナの起動と停止、コンテナの実行ステータスの監視、KubernetesAPIサーバーへのレポートを行います。

ポッド対応コンテナの作成、開始、停止を担当し、マスターノードと緊密に連携してクラスター管理の基本機能を実現します。
(1)クラスター内の各ノード(マスターとノード間のブリッジ)にある非コンテナーサービスプロセスコンポーネント。
(2)マスターがこのノードに発行するポッドの作成、開始、停止などの管理タスクを処理し、ノード情報をAPIサーバーに登録します。
(3)ノード上のコンテナとノードのリソースを監視し、ノードのリソース占有率をマスターに定期的に報告します。

2.2.2kube-proxy

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

Kubernetesサービスの通信および負荷分散メカニズムを実現するための重要なコンポーネント。
Kube-proxyは各ノードで実行されます。
(1)サービスの抽象的な概念の実現、サービスへの要求は、戦略(負荷分散)アルゴリズムに従ってバックエンドポッド(エンドポイント)に配信されます。
(2)デフォルトではiptablesモードが使用されます。
(3)ノードポートモードをサポートして、クラスター内のサービスへの外部アクセスを実現します。

2.2.3Dockerエンジン

Dockerエンジンは、ネイティブコンテナーの作成と管理を担当します。
コンテナサービスはノードで実行する必要があります。

3スタンドアロンインストール

(1)centos組み込み保護ウォールサービスを
オフにします#systemctl disable Firewalld
#systemctl stop Firewalld
(2)etcdとKubernetesソフトウェアをインストールします
[Dockerソフトウェアは自動的にインストールされます]
#yum install -y etcd kubernetes
(3)インストール後ソフトウェア、2つのA構成ファイル
Docker構成ファイル/ etc / sysconfig / dockerを変更します。ここで、OPTIONSの内容は次のように設定されます。

OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'

Kubernetsapiserver構成ファイル/ etc / kubernetes / apiserver:

将 –adminssion_control参数中的ServiceAccount删除

(4)すべてのサービスを次の順序で開始します。

systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy

おすすめ

転載: blog.csdn.net/qq_20466211/article/details/113033684