1. ホーム
  2. ドッカー

(Kubernetes)k8sのdockerインストール入門

2022-02-25 21:40:20

Kubernetes入門

Kubernetesは アプリケーションコンテナのデプロイ、スケーリング、運用を自動化するためのオープンソースプラットフォームです。 .

Kubernetesを利用することで、以下のようなユーザーのニーズに迅速かつ効率的に応えることができます。

  • アプリケーションの迅速かつ正確なデプロイ
  • アプリケーションをオンザフライでスケーリング
  • シームレスな新機能の提供
  • ハードウェアの使用を必要なリソースのみに制限

私たちの目標は、パブリッククラウドやプライベートクラウドで実行されるプログラムの負荷を軽減するためのツールやコンポーネントのエコシステムを育成することです。

Kubernetesのメリット

  •   モバイル:パブリッククラウド、プライベートクラウド、ハイブリッドクラウド、ポリモーフィッククラウド
  •   拡張性:モジュール化、プラグイン化、マウント化、コンポーザブル化
  •   自己修復:自動デプロイ、自動再起動、自動複製、自動スケーリング

Googleは2014年にKubernetesプロジェクトを立ち上げました。kubernetesは  Googleの15年にわたるスケーラブルな製品レベルのタスクの経験 コミュニティからのベストアイデアとハンズオンの経験を組み合わせて構築されました。

コンテナの利点のまとめ。

  •   アプリケーションの迅速な作成とデプロイメント。仮想マシンイメージと比較して、コンテナイメージは作成が簡単で効率的です。
  •   継続的な開発、統合、デプロイメント:高速ロールバックのもと、信頼性の高い、高頻度のコンテナイメージのコンパイルとデプロイメントを提供します(イメージの不変性に基づく)。
  •   開発と運用の分離。コンテナイメージはコンパイル/リリース時に作成されるため、プロセス全体がインフラから切り離されます。
  •   開発、テスト、製品の各フェーズにおける環境の安定性:ノートパソコン上でもクラウド上と全く同じように結果が実行されます。
  •   クラウドプラットフォームやOSでの配布のための移植性。Ubuntu、RHEL、CoreOS、オンプレミスシステム、Google Container Engineなど、あらゆるプラットフォームで動作します。
  •   アプリケーションセントリックな管理:仮想ハードウェア上でのシステム運用から、論理リソースを活用したシステム上でのプログラム運用に移行することで、システムの抽象度を高めることができます。
  •   疎結合、分散、レジリエント、無制限 マイクロサービス : アプリケーション全体は、大規模な単一目的のマシンに格納された肥大化した単一のアプリケーションスタックではなく、動的にデプロイおよび管理できる、より小さく独立したモジュールに分散されます。
  •   リソースの分離。アプリケーションパフォーマンスの予測可能性を向上させます。
  •   リソース利用:効率的かつ集中的に。

なぜKubernetesが必要なのか、何ができるのか?

少なくとも、Kubernetesは物理マシンまたは仮想マシンのクラスタ上でアプリケーションコンテナをスケジュールして実行することができます。また、Kubernetes によって、開発者は物理マシンや仮想マシンに縛られた "chain" を断ち切り、ホスト中心のアーキテクチャからコンテナ中心のアーキテクチャへと飛躍することができるようになるのです。Kubernetesは、真のコンテナ中心の開発環境を備えたインフラを提供します。

Kubernetesは、製品内でプログラムを実行するための、以下のような一般的な要件を満たしています。

以上、PaaS(Platform-as-a-Service)のシンプルさとIaaS(Infrastructure-as-a-Service)の柔軟性を兼ね備え、プラットフォームサービスプロバイダー間の移行を容易にする。

Kubernetesとはどのようなプラットフォームなのでしょうか?

Kubernetesは非常に多くの機能を提供していますが、新機能の恩恵を受ける新しいシナリオが常に存在するのです。アプリケーション固有のワークフローをパイプライン化することで、開発のスピードアップを図ることができます。最初はアドホックなオーケストレーションが許容されますが、そのためにはしばしばスケールアップした堅牢な自動化機構を持つことが必要になります。このため、Kubernetesは、アプリケーションのデプロイ、スケール、管理を容易にするコンポーネントやツールのエコシステムを構築するためのプラットフォームとしても設計されています。

タグ (ラベル)により、ユーザーは自分の好みに合わせてリソースを整理することができます。  コメント (注釈)を使用すると、ユーザーはリソースに顧客情報を追加してワークフローを最適化し、管理ツールでデバッグ状況を簡単にマークできるようになります。

さらに Kubernetesコントロールパネル は、開発者にもユーザーにも、同じように  API  が構築されています。ユーザーは、独自のコントローラを書くことができ、例えば  スケジューラ (スケジューラ)を使用し、汎用の コマンドラインツール が認識する 独自のAPI .

この デザイン は、Kubernetesの上に他の多くのシステムも構築することができます。

Kubernetesは何ではないのですか?

Kubernetesは、従来の完全に包括的なPaaS(Platform-as-a-Service)システムとは異なります。ユーザーの選択を尊重し、それが重要なのです。

Kubernetesです。

  •   は、対応するプログラムの種類を限定しない。プログラムのフレームワークを検出しない(例えば ワイルドフライ また、実行時にサポートされる言語(Java、Python、Rubyなど)を制限することもなく、単に  12因子アプリケーション Kubernetesは、ステートレス、ステートフル、データ処理ワークロードなど、できるだけ多くの種類のワークロードをサポートするように設計されています。アプリケーションがコンテナ内でうまく動作するのであれば、Kubernetes上でもうまく動作する可能性が高いだけです。
  •   ミドルウェア(メッセージバスなど)、データ処理フレームワーク(Sparkなど)、データベース(mysqlなど)、クラスタ型ストレージシステム(Cephなど)は組み込みサービスとして提供されていない。しかし、上記のプログラムはすべてKubernetes上で実行することができます。
  •   click-and-deploy"のようなサービスのためのマーケットプレイスが存在しない。
  •   ソースコードのデプロイや、プログラムのコンパイルは行わない。継続的インテグレーション(CI)ワークフローは、ユーザーやプロジェクトによってニーズや動作が異なるところです。そこでKubernetesは、レイヤー化されたCIワークフローをサポートしますが、各レイヤーでの作業状況を聞き出すことはしません。
  •   ログ記録、モニタリング、アラートシステムをユーザーが選択できるようにする。(Kubernetesはこのコンセプトが実装されるようにいくつかの統合ツールを提供します)
  •   アプリケーション設定言語/システムの完全なセットを提供せず、管理もしない(例.  jsonnet ).
  •   マシンの設定、メンテナンス、管理、自己回復のための完全なシステムを提供したり、それと連動することはありません。

一方、Kubernetes上で動作するPaaSシステムとしては、以下のようなものが多くあります。  オープンシフト および デイス と  エルダリオン . また、独自のPaaSを開発し、好みのCIシステムと統合したり、Kubernetes上にのみコンテナイメージをデプロイしたりすることも可能です。

Kubernetesはハードウェアレベルではなくアプリケーションレベルで動作するため、デプロイ、スケーリング、ロードバランシング、ロギング、モニタリングなど、PaaSが通常提供する一般的な適用機能の一部を提供します。ただし、Kubernetesは鉄壁ではなく、これらのデフォルトソリューションはオプションであり、独自に追加したり削除したりすることが可能です。

また、Kubernetesは単なるオーケストレーションシステムではありません。実は、オーケストレーションの必要性を満たしているのです。 オーケストレーションの技術的な定義は、まずAを行い、次にBを行い、最後にCを行うという定義されたワークフローの実行です。対照的に、Kubernetesは、現在の状態を必要な状態へと継続的に駆動する一連の独立した、構成可能な制御プロセスをカプセル化しています。AからCに移行する具体的なプロセスは、一意ではありません。中央集権的な制御も必要なく、どちらかというとコレオグラフィに近いアプローチです。これにより、システムはより使いやすく、より効率的で、より堅牢で、より再利用可能で、よりスケーラブルになる。

Kubernetesという言葉の意味は? k8s?

Kubernetesの語源は、ギリシャ語で舵取りや航海士を意味する言葉です。語源は、ガバナー(governor)と  サイバネティック . K8sはその略称で、"ubernete"を8つの単語に置き換えたものです。

<スパン 要約すると

k8sはオーケストレーションコンテナツールで、実際には、アプリケーションの作成から、アプリケーションの展開、アプリケーションサービス、アプリケーションの拡張と縮小、アプリケーションの更新、アプリケーションのフルライフサイクルを管理するツールです非常に便利で、自己回復障害を行うことができます、例えば、サーバーがハングアップすると、自動的に別のホストにこのサーバー上のサービスをスケジュールして、手動介入せずに実行できます例えば、サーバーは、別のホストにそのサーバー上のサービスは自動的にスケジュールして、手動介入せずに実行することができます。では、運用と保守は何に使うのかという疑問が湧いてきます。

    k8sでは、新しいバージョンへの迅速なアップデート、パッケージ化されたアプリケーション、サービスを中断することなくアップデート可能、ダウンタイムなしのサーバー障害、開発からテスト、本番環境への移行が非常に簡単で、設定ファイル一つで完了、一度イメージを生成してどこでも実行可能です。

<スパン k8sのフルライフサイクルマネジメント

    k8sでアプリケーションを管理する場合、基本的な手順は、クラスタの作成、アプリケーションのデプロイ、アプリケーションの公開、アプリケーションの拡張、アプリケーションの更新となります。

k8sでは、クラスタスケジューリングの最小単位はポッドです。例えば、nginxを使うアプリケーション、mysqlを使うアプリケーション、jettyを使うアプリケーションを実行する場合、3つを同じPodで使用し、それらに統一されたプロビジョニング機能を提供することができます。 一方、ホストは複数のPodを持つことができます。

では、なぜポッドを使うのか、なぜコンテナを使わないのか、と思われるかもしれません。ポッドを使うと、論理的なホストではなく、vmを作成してそのvm上で複数のプロセスを実行することを思い出しますが、実はその理由は同じで、ポッドの存在は主に密接につながった複数のコンテナ間で、ipアドレスや共有ストレージなどの情報を共有できるようにするためのものです。コンテナを直接スケジュールすると、複数のコンテナが別々のホストで実行される可能性があり、システムの複雑さが増します。

Centos 7にdockerをインストールする

Dockerはバージョン1.13以降、バージョン番号としてタイムラインを使用しており、Community Edition CEとEnterprise Edition EEに分けられています。

Community Editionは、個人の開発者や小規模なグループが無料で利用でき、Enterprise Editionは、公式にテスト・認証されたインフラ、コンテナ、プラグインなどの追加サービスを有償で提供するものである。

Community Editionは安定版とエッジ版がリリースされており、安定版は17.06、17.09など四半期ごとに、エッジ版は17.09、17.10など月ごとに更新されます。

 I. dockerのインストール

1. Dockerは、CentOSシステム上で3.10以上のカーネルバージョンを必要とします。このページで前提条件を確認し、お使いのバージョンのCentOSがDockerをサポートしているかどうか確認してください。

パス  uname -r  コマンドを実行すると、現在のカーネルバージョンが表示されます。

 $ uname -r

2. 使用方法  root  yumのパッケージが最新に更新されていることを確認します。

$ sudo yum update

3. 旧バージョンをアンインストールする(インストールされている場合)。

$ sudo yum remove docker docker-common docker-selinux docker-engine

4、必要なパッケージをインストールします。yum-util は yum-config-manager 機能を提供し、他の 2 つは devicemapper ドライバの依存関係です。

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5. yumソースのセットアップ

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

<イグ

6. すべてのリポジトリのすべてのDockerバージョンを表示し、インストールする特定のバージョンを選択することができます

$ yum list docker-ce --showduplicates | sort -r

<イグ

7. dockerのインストール

$ sudo yum install docker-ce # Since only stable repositories are enabled by default in the repo, the latest stable version 17.12.0 is installed here
$ sudo yum install <FQPN> # Example: sudo yum install docker-ce-17.12.0.ce

<イグ

8. 起動と追加ブートアップ

$ sudo systemctl start docker
$ sudo systemctl enable docker

9. インストールが成功したことを確認する(クライアント部分とサービス部分の両方が、Dockerインストールが正常に開始されたことを示す)。

$ docker version

<イグ

 II. 質問事項

1. 以前、古いバージョンのdockerをインストールしたことがあるため、インストール時に以下のエラーが発生します。

Transaction check error:
  file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68. gitec8512b.el7.centos.x86_64
  file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2: 1.12.6-68.gitec8512b.el7.centos.x86_64
  file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common- 2:1.12.6-68.gitec8512b.el7.centos.x86_64
  file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68. gitec8512b.el7.centos.x86_64

2. 旧バージョンのパッケージのアンインストール

$ sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

3. dockerを再度インストールする

$ sudo yum install docker-ce