k8s (Kubernetes) の基本

k8s を使用する理由

本番アプリケーションには、複数のコンテナが含まれます。これらのコンテナーは、複数のサーバー ホストにデプロイする必要があります

複数のコンテナーにまたがるアプリケーション サービスを構築し、それらのコンテナーをクラスター間でスケジュールおよびスケーリングし、それらのコンテナーの状態を長期的に管理できます。

Docker テクノロジーに基づいて、デプロイと操作、リソース スケジューリング、サービス ディスカバリ、動的スケーリングなどの一連の完全な機能をコンテナ化されたアプリケーションに提供し、大規模なコンテナ クラスタ管理の利便性を向上させます。

デプロイ、スケジューリング、ノードクラスターのスケーリングなど、コンテナー操作を自動化するためのオープンソース プラットフォームです。

1. ubuntu 構成を変更する
まず、k8s では、要件を満たすいくつかの構成を実行するために、ubuntu が必要です。スワップ メモリをオフにし、パスワードなしのログインを構成するという 2 つの手順を含む非常に簡単です。この手順では、両方のホストを構成する必要があります。

スワップ メモリをオフにする
このスワップは、実際には Windows の仮想メモリと比較できます。メモリがいっぱいになると、直接スタックするのではなく、サーバーを非効率的に実行し続けることができます。ただし、k8s の新しいバージョンでは、スワップをオフにする必要があります。それでは、直接実行して /etc/fstab ファイルを変更してみましょう。

sudo vi /etc/fstab を
実行すると、次の内容が表示されるはずです。2 番目の項目を # でコメント アウトするだけです。最初の項目をコメント アウトしないように注意してください。そうしないと、再起動後にシステムがファイル システムの読み取り専用エラーを報告する可能性があります.

UUID=e2048966-750b-4795-a9a2-7b477d6681bf / ext4 errors=remount-ro 0 1
# /dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
その後、reboot と入力して再起動し、再起動後に使用しますtop コマンドを実行してタスク マネージャーを表示し、次の KiB Swap とすべて 0 が表示された場合は、シャットダウンが成功したことを意味します。

スワップを閉じた後のタスク マネージャー
上記は、スワップ メモリを永続的に閉じることです。実際、一時的に閉じることもできます。swapoff -a コマンドを使用するだけで、再起動後に効果が消えます。

Kubernetes と Docker の関係を簡単に説明する

Kubernetes の詳細を紹介する前に、もう一度 Docker について言及する必要があります.Docker を使用してプログラムをデプロイしたことがある場合は、Docker がもたらす滑らかな体験を間違いなく楽しむことができます。 、いろいろな環境に合わせて苦戦した経験があれば、その気持ちはもっと強くなると思います。

Docker がこれを実現できる理由は、長年業界を悩ませてきたアプリケーションのパッケージ化とリリースの技術的問題を「Docker イメージ」という手法で一挙に解決し、一般の開発者の敷居を大幅に下げたからです。アプリケーションを操作、維持、展開するため。アプリケーションのパッケージングの根本的な問題を解決したからこそ、Docker は開発・運用・保守担当者の大多数にいち早く受け入れられ、瞬く間にホットな技術となり、一定期間コンテナ技術の発展の波をリードしました。
実際のところ、単一のコンテナ テクノロジー ツールとしての Docker では、コンテナの「編成方法」と「管理基準」を十分に定義できず、運用レベルの大規模なコンテナ展開の要件を独自にサポートすることは困難です。そのため、コンテナー技術の開発は、Kubernetes に代表される「コンテナー オーケストレーション」の技術的ルートに急速に移行しており、これが、Docker コンテナーが本番環境で直接大規模に展開されない主な理由でもあります。
Kubernetes における Minikube、Kubectl、Kubelet とは何かを簡単に説明します

Minikube は、単一ノードの Kubernetes クラスターをローカルで簡単に実行できるようにするツールです。
Kubectl は、クラスター リソースの検査、コンポーネントの作成、削除、更新、アプリケーションの表示など、Kubernetes クラスター マネージャーの制御に使用できるコマンドライン ツールです。
Kubelet は、各ノードで実行されるプロキシ サービスであり、スレーブがマスターと通信できるようにします。

Kubernetes がクラスター管理を実装する方法を簡単に説明してください

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

Kubernetes クラスターの関連コンポーネントについて簡単に説明する

マスター コンポーネント

API サーバー

K8S の唯一の外部インターフェースは、HTTP/HTTPS RESTful API、つまり kubernetes API を提供します。すべてのリクエストは、このインターフェイスを介して通信する必要があります。これは主に、すべての REST 要求の受信、検証、および応答を担当し、結果のステータスは etcd に永続的に保存され、すべてのリソースを追加、削除、変更、およびチェックするための唯一のエントリです。

etcd

k8s クラスターの構成情報とさまざまなリソースのステータス情報を保存する役割を担い、データが変更されると、etcd は k8s 関連のコンポーネントに迅速に通知します。etcd は独立したサービス コンポーネントであり、K8S クラスターには属していません。本番環境では、サービスの可用性を確保するために、etcd をクラスターで実行する必要があります。

etcd は、キーと値のデータ ストレージを提供するために使用されるだけでなく、変更をリッスンしてプッシュするための監視メカニズムも提供します。K8S クラスタシステムでは、etcd のキー値が変化すると API Server に通知され、watch API を通じてクライアントに出力されます。

コントローラーマネージャー

クラスタのさまざまなリソースを管理して、リソースが期待どおりの状態であることを確認します。コントローラー マネージャーは、レプリケーション コントローラー、エンドポイント コントローラー、名前空間コントローラー、サービス アカウント コントローラーなど、さまざまなコントローラーで構成されます。コントローラーによって完了する主な機能には、主に次のようなライフサイクル機能と API ビジネス ロジックが含まれます。

ライフサイクル機能: 名前空間の作成とライフサイクル、イベント ガベージ コレクション、Pod 終了関連のガベージ コレクション、カスケード ガベージ コレクション、ノード ガベージ コレクションなど。

API ビジネス ロジック: たとえば、ReplicaSet によって実行されるポッドのスケーリングなど。

スケジューラー

リソース スケジューリングは、Pod を実行するノードを決定する役割を果たします。スケジューラは、クラスタ構造、各ノードの現在の負荷、およびスケジューリング中の高可用性とパフォーマンスに対するアプリケーションの要件を分析します。

ノード コンポーネント

キューブレット

kubelet はノードのエージェントです。スケジューラがノードで Pod を実行することを決定すると、Pod の特定の構成情報 (イメージ、ボリュームなど) を送信します。マスターは実行ステータスを報告します。

コンテナ ランタイム
各ノードは、イメージのダウンロードとコンテナの実行を担当するコンテナ ランタイム (コンテナ ランタイム) 環境を提供する必要があります。現在、K8S でサポートされているコンテナの動作環境には、少なくとも Docker、RKT、cri-o、Fraki などがあります。

Kube-proxy
サービスは、バックエンドの複数の Pod を論理的に表し、サービスを介して Pod にアクセスします。サービスがリクエストを受信すると、ポッドへの転送を完了するために kube-proxy が必要になります。各ノードは kube-proxy サービスを実行します, これは、アクセスされたサービスの TCP/UDP データ ストリームをバックエンド コンテナーに転送する責任があります. 複数のコピーがある場合、kube-proxy は負荷分散を実現します. 2 つの方法があります. : LVS または iptables

KubeDNS は、
K8S クラスターで DNS サービスを提供する Pod をスケジュールして実行します。同じクラスター内の他の Pod は、DNS サービスを使用してホスト名を解決できます。バージョン 1.11 以降、K8S はデフォルトで CoreDNS プロジェクトを使用して、クラスターのサービス登録とサービス検出のための動的名前解決サービスを提供します。

ダッシュボード
K8S クラスターのすべての機能は、クラスター内のアプリケーションとクラスター自体を管理する Web UI に基づいている必要があります。

リソース使用率やライフサイクル時間などのさまざまな指標データを収集および解析するHeapster
コンテナおよびノー​​ドのパフォーマンス監視および分析システム. 最新バージョンでは、その主な機能は、他のコンポーネントと組み合わせた Prometheus に徐々に置き換えられています.

Ingress Controller
Service はレイヤー 4 で動作するロード バランサーであり、Ingress はアプリケーション レイヤーで実装される HTTP(S) ロード バランサーです。ただし、Ingress リソース自体はトラフィックを通過できません。これは一連のルーティング ルールに過ぎず、これらのルールは Ingress Controller (Ingress Controller) を通じて有効にする必要があります。現在、関数プロジェクトにはおそらく次のものが含まれます: Nginx-ingress、Traefik、Envoy、HAproxy など。次の図は、Nginx-ingress のアプリケーションです。

リファレンス ドキュメント: Kubernetes ドキュメント | Kubernetes

Guess you like

Origin blog.csdn.net/weixin_42464652/article/details/122238901