前回の記事 では、マイクロサービスの魅力的な世界について詳しく説明しました。これは、マイクロサービスとそのパターンに関する私の包括的な記事シリーズの始まりでした。 「マイクロサービス アーキテクチャ パターン パート 1: 分解パターン」 論理的なステップとしては、このシリーズの第 2 部に進むことになりますが、次に調査してお話ししたいのは、これらのマイクロサービスをエンド ユーザーにシームレスに提供する重要なプロセスであると判断しました。 コンテンツの概要 モチベーション [モジュール 1]: AWS EC2 仮想サーバー [モジュール 2]: Jenkins サーバー [モジュール 3]: Git と Github [モジュール 4]: Apache Maven [モジュール 5]: ドッカー [モジュール 6]: Ansible [モジュール 7]: Kubernetes 結論 著者について モチベーション CI/CD は、アプリ開発のさまざまな段階に自動化を追加することで実現される、アプリを顧客に配信するための手法です。 CI/CD (継続的インテグレーションと継続的デプロイメント) を把握することで、開発者はバックエンド プロジェクトの成果物がプロジェクト リポジトリの境界を越えてどのように存在するかをより深く理解できるようになると私は信じています。この理解は、開発者の視点に根本的な変化をもたらす可能性もあります。自分の仕事を単にコード行として見るのではなく、プロジェクトのより広範なコンテキストを価値のある製品として受け入れることができるようになります。 この記事では、実際の応用を通じて CI/CD プロセスをわかりやすく説明することを目的としています。ステップバイステップのチュートリアルをモジュールごとに分けて説明し、CI/CD パイプラインを手動で構築します。これを行うために、 などの最新の DevOps ツールの力を活用します。それでは、この旅を始めましょう! AWS、Docker、Kubernetes、Ansible、Git、Apache Maven、 Jenkins [モジュール 1]: AWS EC2 仮想サーバー このモジュールは、AWS EC2 仮想サーバー インスタンスの作成専用です。この記事の一部として、Jenkins、Ansible、Kubernetes 用に 3 つの EC2 インスタンスをセットアップします。現時点では、次のモジュールに進み、「[モジュール 2]: Jenkins」、「[モジュール 6]: Ansible」、および「[モジュール 7]: Kubernetes」セクションでこのモジュールに再度アクセスできます。 ステップ 1: AWS アカウントを作成する https://aws.amazon.com にアクセスします。 ボタンをクリックします。 [AWS アカウントの作成] アカウント作成 Web ページの指示に従います。 ステップ 2: AWS アカウントにサインインする https://console.aws.amazon.com/console/home に移動します。 ボタンをクリックします。 「サインイン」 この Web ページに必要な資格情報をすべて入力します。 ステップ 3: EC2 仮想サーバーを見つける 検索ボックスで EC2 を検索します。 をクリックして、[EC2 仮想サーバー] を選択します。 [EC2 サービス] ボタンをクリックします。 [インスタンスの起動] ステップ 4: 「名前とタグ」セクションを構成する セクションに進みます。 「名前とタグ」 セクションに新しい AWS EC2 仮想サーバー インスタンスの名前を入力します。 「名前」 をクリックして、仮想サーバーにタグを追加することもできます。 「追加タグを追加」 ステップ 5: 「アプリケーションと OS イメージ (Amazon マシン イメージ)」セクションを構成する セクションに進みます。 「アプリケーションと OS イメージ (Amazon マシン イメージ)」 仮想サーバーを プレイするには: 無料で 仮想サーバーのオペレーティング システム ( を選択します。 Amazon Linux) セクションで、 を持つマシンを選択します。 [Amazon Machine Image (AMI)] 無料利用枠の対象タグ ステップ 6: 「インスタンスタイプ」セクションを構成する セクションに進みます。 「インスタンスタイプ」 仮想サーバーを プレイするには: 無料で セクションで、 持つタイプを選択します。 [インスタンス タイプ] 無料利用枠対象タグを 私の場合、それは です。 t2.micro (ファミリー: t2 1cCPU 1 GiB メモリ、現在の世代: true) ステップ 7: 「ストレージの構成」セクションを構成する セクションに進みます。 「ストレージの構成」 仮想サーバーを プレイするには: 無料で デフォルト設定を変更しないでください。無料利用枠の対象となるお客様は 入手できます。 、30 GB の EBS 汎用 (SSD) または磁気ストレージを ステップ 8: 「ネットワーク設定」セクションを構成する セクションに進みます。 「ネットワーク設定」 仮想サーバーのセキュリティを設定する必要があります。これをする、 ボタンをクリックします。 「セキュリティグループの作成」 セクションに新しいセキュリティ グループの名前を追加します。 「セキュリティ グループ名」 セクションに新しいセキュリティ グループの説明を追加します。 「説明」 デフォルトでは、仮想サーバーは ( ) 経由でアクセスできます。追加の接続タイプが必要な場合は、追加の受信セキュリティ グループ ルールを追加して接続タイプを追加します。 タイプ - SSH、プロトコル - TCP、ポート - 22 ステップ 9: 「キーペア (ログイン)」セクションを構成する セクションに進みます。 「キーペア(ログイン)」 新しいキーペアをまだ作成していない場合は作成します。 まだ作成していない場合: 「キーペア」を ボタンをクリックします。 「新しいキーペアの作成」 セクションで新しいキー ペアに名前を付けます。 「キー ペア名」 キーペアのタイプ または を選択します。私は タイプを選びました。 RSA ED25519 RSA 秘密キーのファイル形式を選択します。 と の選択。私は 形式を選択します。 .pem .ppk .pem ボタンをクリックします。 「キーペアの作成」 秘密キー ファイルをダウンロードするように求めるポップアップ ウィンドウが表示されます。同意してファイルをコンピュータにダウンロードします。 ステップ 10: EC2 仮想サーバーインスタンスを起動する ボタンをクリックして EC2 仮想サーバー インスタンスを起動します。 [インスタンスの起動] EC2 仮想サーバー インスタンスの作成プロセスが完了すると、次のように表示されます。 次に、 ボタンをクリックして セクションに移動する必要があります。 「すべてのインスタンスを表示」 「インスタンス」 これで、AWS EC2 仮想サーバー インスタンスが実行されていることがわかります。 [モジュール 2]: Jenkins サーバー 次に、EC2 仮想サーバー インスタンスで JenkinsServer を構成しましょう。 ステップ 1: AWS EC2 仮想サーバーインスタンスを作成する Jenkins を実行するには仮想サーバーが必要です。 このチュートリアルの セクションの手順に従ってこのステップを完了し、JenkinsServer という名前の EC2 仮想サーバー インスタンスを作成します。 「[モジュール 1]: AWS EC2 仮想サーバー」 セキュリティグループ設定を追加することを忘れないでください。これにより、 と それぞれポート と で動作できるようになります。 Jenkins SSH が 8080 22 EC2 仮想サーバー インスタンスを区別するには、 という名前を使用します。 「JenkinsServer」 新しい AWS EC2 インスタンス用に セキュリティ グループと を作成します。記事内でさらに再利用できます。 「JenkinsServer」 「CI_CD_Pipeline」 「CI_CD_Pipeline_Key_Pair」 ステップ 2: AWS EC2 仮想サーバー インスタンスに接続する → → AWS コンソールのホームページ EC2 管理コンソールのダッシュボード インスタンスに移動します。 次に、 を選択し、 ボタンをクリックします。 JenkinsServer 「接続」 すると、この Web ページが表示されます。もう一度 ボタンをクリックしてください。 「接続」 これで、EC2 仮想サーバー インスタンスのオンライン ターミナルが表示されます。 ステップ 3: Jenkins リポジトリをダウンロードする 次に、EC2 仮想サーバー インスタンスに Jenkins をダウンロードする必要があります。 次の指示に従ってください。 Jenkins のダウンロード に移動します。 Web ページ 安定版 (LTS) および通常リリース (毎週) のオプションが表示されます。 LTS オプションを選択します。 Red Hat/Fedora/Alma/Rocky/CentOS このWebページが表示されます。 コマンドをコピーして実行すると、インターネット上の Jenkins リポジトリから Jenkins ファイルがダウンロードされ、EC2 仮想サーバー インスタンス上の指定された場所に保存されます。 「sudo get..」 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo これで Jenkins がダウンロードされました。 ステップ 4: Jenkins キーをインポートする Jenkins のインストールを完了するには、Jenkins キーをインポートする必要があります。 Jenkins キーをインポートするには、 コマンドをコピーして実行する必要があります。 「sudo rpm..」 sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key このようにして、 パッケージ マネージャーは、インストールする Jenkins パッケージが Jenkins プロジェクトによって公開されたものとまったく同じであること、および改ざんまたは破損していないことを確認できます。 「rpm」 ステップ 5: Java をインストールする Jenkins を実行するには、EC2 仮想サーバー インスタンスに をインストールする必要があります。 Java をインストールするには、次のコマンドを使用します。 Java sudo amazon-linux-extras install java-openjdk11 -y 次のコマンドを使用して、 が正しくインストールされたかどうかを確認します。 Java java -version そのようなものが見られます。 ステップ 6: fontconfig をインストールする Jenkins を実行するには、EC2 仮想サーバー インスタンスに をインストールする必要があります。 fontconfig このコマンドを使用します。 sudo yum install fontconfig java-11-openjdk -y Fontconfig は、システム全体のフォント構成、カスタマイズ、アプリケーション アクセスを提供するように設計されたライブラリです。 Jenkins にはフォントをレンダリングする機能があるため、Jenkins にはこれが必要です。 ステップ 7: Jenkins をインストールする 前のステップでは、特定の Jenkins リポジトリを使用するように EC2 仮想サーバー インスタンスを構成し、このリポジトリに関連付けられた GPG キーをインポートしました。次に、追加した Jenkins も含め、認識しているすべてのリポジトリを検索して Jenkins パッケージを見つけるコマンドを実行する必要があります。 Jenkins リポジトリで Jenkins パッケージを見つけると、ダウンロードしてインストールします。 このコマンドを実行してみましょう。 sudo yum install jenkins -y ステップ 8: Jenkins を開始する このコマンドを使用して Jenkins を起動できます。 sudo systemctl start jenkins Jenkins が実行されていることを確認するには、次のコマンドを使用します。 sudo systemctl status jenkins 以下のスクリーンショットに出力がそのまま表示されます。 これで、Jenkins が起動して実行されるようになります。 ステップ 9: Jenkins にアクセスする Jenkins アプリケーションにアクセスするには、任意の Web ブラウザを開いて、EC2 インスタンスのパブリック IP アドレスまたはドメイン名に続いてポート 8080 を入力します。 http://<your-ec2-ip>:8080 初めて Jenkins にアクセスすると、自動生成されたパスワードでロックされます。 次のコマンドを使用して、このパスワードを表示する必要があります。 sudo cat /var/lib/jenkins/secrets/initialAdminPassword このパスワードをコピーし、ブラウザに戻り、管理者パスワード フィールドに貼り付けて、[続行] をクリックします。 すると、このWebページが表示されるようになります。 これで、Jenkins サーバーを使用できるようになりました。 ステップ 10: 新しい Jenkins パイプラインを作成する これで、Jenkins が正常に動作しているので、Jenkins パイプラインの作成を開始できます。 Jenkins パイプラインを作成するには、新しい「Freestyle プロジェクト」を作成する必要があります。新しい「Freestyle プロジェクト」を作成するには、Jenkins ダッシュボードに移動し、 ボタンをクリックする必要があります。 「新しい項目」 Github の名前「Freestyle プロジェクト」(「パイプライン」という名前は今後使用されます) を入力し、 ボタンをクリックします。 「OK」 次に、パイプラインの 入力します。 説明を 次に、「適用」ボタンをクリックして「保存」します。その後、このチュートリアルで構築するパイプラインの基礎を作成したことになります。 [モジュール 3]: Git と Github Jenkins が AWS EC2 仮想サーバー インスタンス上で実行されるようになったので、パイプラインを使用して Git を構成できます。 Git は、ソフトウェア チームが特別な種類のデータベース内のコードに対するすべての変更を追跡できるように設計された、 の分散バージョン管理システム (VCS) です。間違いがあった場合、開発者は時計を戻し、コードの以前のバージョンを比較して、チームメンバー全員への混乱を最小限に抑えながら間違いを修正することができます。 VCS は特に次の場合に役立ちます。 なぜなら、開発時間を短縮し、デプロイメントの成功率を高めるのに役立つからです [1]。 無料のオープンソース DevOps 最も一般的なバージョン管理システムである Git を使用すると、プロジェクトの Github リポジトリから、Jenkins がインストールされている EC2 仮想サーバー インスタンスに最新のコードをプルできます。 ステップ 1: Git をインストールする このコマンドを使用して Git をインストールします。 sudo yum install git -y 次に、次のコマンドを使用して、Git が動作していることを確認します。 git --version 現在、Git は EC2 仮想サーバー インスタンス上で正常に動作しています。 ステップ 2: Jenkins ダッシュボードを開く Git は EC2 仮想サーバー インスタンス上で正常に動作しているため、Jenkins を Git と統合できるようになりました。 この統合を開始するには、Jenkins Github プラグインをインストールしましょう。 Jenkins ダッシュボード セクションに移動します。 ステップ 3: Jenkins プラグイン マネージャーを開く ボタンをクリックし、 ボタンをクリックします。 「Jenkins の管理」 「プラグインの管理」 ステップ 4: Github Jenkins プラグインを見つける ボタンをクリックします。 「利用可能なプラグイン」 プラグインの検索ボックスを見つけます。 Github プラグインを選択します。 Github ステップ 5: Github Jenkins プラグインをインストールする プラグインを選択します。そして、 ボタンをクリックします。 Github 「再起動せずにインストール」 Github プラグインのダウンロードが完了するまで待ちます。 はい! Jenkins Github プラグインがインストールされています。 ステップ 6: Github Jenkins プラグインを構成する GitHub Jenkins プラグインがインストールされたので、最終的に Jenkins を Git と統合するようにこのプラグインを構成できます。そのためには、「トップページに戻る」ボタンをクリックしてメインページに戻る必要があります。 次に、メイン ページで、 ボタンをクリックし、 ボタンをクリックする必要があります。 「Jenkins の管理」 「グローバル ツール構成」 次に、グローバル ツール構成 Web ページで、Git セクションに移動する必要があります。 [Git] セクションでは、コンピューター上の Git の名前とパスを指定して Git を構成する必要があります。 次に、 ボタンと ボタンをクリックします**。** 「適用」 「保存」 これで、Jenkins Github プラグインの構成が完了しました。 ステップ 7: Git をパイプラインに統合する Jenkins Github プラグインがインストールされて構成されたので、パイプライン内でこのプラグインを利用できるようになります。これにより、モジュール 2 で作成したパイプラインが、指定した GitHub リポジトリからプロジェクト コードをプルできるようになります。 このプラグインをパイプラインに統合するには、[ソース コード管理] セクションに移動し、パイプラインで Git を選択する必要があります。次に、プロジェクト リポジトリの URL を指定する必要があります。プロジェクト リポジトリが Github で公開されている場合、認証情報を提供する必要はありません。プロジェクト リポジトリが Github 上でプライベートである場合は、認証情報を提供する必要があります。 次のリポジトリ URL: で私のプロジェクトを使用できます。 https://github.com/Sunagatov/Hello.git それをコピーして「 入力に貼り付けるだけです。次に、 ボタンと ボタンをクリックして、Git とパイプラインの統合を完了します。 リポジトリ URL」 「適用」 「保存」 ステップ 8: パイプラインに統合された Git をテストする これで、更新されたパイプラインを使用して、Github からプロジェクトをプルできるようになりました。これを行うには、**「今すぐビルド」** ボタンをクリックする必要があります。その結果、ビルド履歴にビルドが成功したことが表示されます。 ビルド履歴から最初のビルドを開きます。 これで、最初のビルドの成功したジョブ結果が表示されます。 AWS EC2 ターミナルを開いた場合。パイプラインが正常に動作していることを確認できます。 このコマンドを使用するだけです。 cd /var/lib/jenkins/workspace/{your pipeline name} このようにして、Github からのプロジェクトが AWS EC2 仮想サーバー インスタンスにプルされたことがわかります。 [モジュール 4]: Apache Maven ソフトウェア開発において広く使用されているビルド自動化およびプロジェクト管理ツールです。プロジェクトの依存関係を管理し、一貫したビルド ライフサイクルを提供することで、コードのコンパイル、テスト、パッケージ化のプロセスを合理化します。 Maven は、XML ベースの構成ファイル (POM ファイル) を使用してプロジェクトの構造、依存関係、およびタスクを定義し、開発者が複雑なソフトウェア プロジェクトを効率的に管理および展開できるようにします。 Apache Maven は、 Git をパイプラインに統合したので、プロジェクトをビルド、テスト、パッケージ化できる Apache Maven を組み込むことでパイプラインをさらに強化できます。これを行うには、Jenkins と Git がインストールされている AWS EC2 仮想サーバー インスタンスに Apache Maven をインストールする必要があります。 ステップ 1: Apache Maven をダウンロードする Apache Maven をダウンロードするには、 ディレクトリに移動します。 「/opt」 cd /opt そして、このコマンドを使用します。 sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz このコマンドは、最新の公式 Apache Maven をダウンロードします (公式 Apache Maven Web サイトで最新バージョンを確認してください)。最新の公式 Apache Maven リリースを見つけるには、リンク を使用してください。 https://maven.apache.org/download.cgi ステップ 2: アーカイブから Apache Maven を抽出する 次のコマンドを使用して、ダウンロードしたアーカイブから Apache Maven を抽出します。 sudo tar -xvzf apache-maven-*.tar.gz ステップ 3: JAVA_HOME と M2_HOME を追加する このコマンドを使用してルート フォルダーに移動します。 cd ~ このコマンドを使用して ファイルを編集します。 .bash_profile vi .bash_profile 変数と M2_HOME 変数を追加します。 JAVA_HOME 変数には JDK11 へのパスを割り当て、 変数には Maven ディレクトリへのパスを割り当てます。 JAVA_HOME M2_HOME JDK パスを検索するには、次のコマンドを使用します。 sudo find / -name java VIMの使い方 ファイルを には、キーボード ボタン を押してデータを挿入します。 編集する 「I」 ファイル には、キーボード ボタン「esc」を押して「:w」と入力します。 を保存する ファイル には、キーボード ボタン を押して と入力します。 を終了する 「esc」 「:q」 変更を保存します。 次に、このコマンドを実行してシステム変数を更新します。 source .bash_profile を確認するには、次のコマンドを使用します。 $PATH echo $PATH 確認するには、次のコマンドを使用します。 Apache Maven を mvn -v すべてを正しく実行すると、Apache Maven のバージョンを表示できるようになります。 ステップ 4: Apache Maven Jenkins プラグインをインストールする Apache Maven は EC2 インスタンスで使用できるため、Apache Maven プラグインをインストールしてパイプラインと統合できます。 これを実現するには、次の手順に従います。 「ダッシュボード」 →「Jenkinsの管理」→「プラグインの管理」→「利用可能」に移動します。 検索ボックスに と入力します。 「Maven」 プラグインを選択します。 「Maven Integration」 ダウンロードプロセスが終了するまで待ちます。 そして ボタンをクリックしてください。 「トップページに戻る」 ステップ 5: Apache Maven Jenkins プラグインを構成する Apache Maven Jenkins プラグインが正常にインストールされると、モジュール 2 と 3 で作成および更新したパイプライン内でこのプラグインを利用できるようになります。 これを行うには、次の手順に従います。 に移動します。 「ダッシュボード」 →「Jenkinsの管理」→「グローバルツール構成」→「JDK」 「JDKを追加」ボタンをクリックします。 「自動的にインストールする」のチェックを外します。 次に セクションに進みます。 ボタンをクリックします。 「Maven」 「Maven を追加」 「自動的にインストールする」のチェックを外します。 次に、 と パスを追加します。 名前 MAVEN_HOME ボタンと ボタンをクリックします。 「適用」 「保存」 これで、Apache Maven Jenkins プラグインの構成が完了しました。 ステップ 6: Apache Maven をパイプラインに統合する Apache Maven GitHub プラグインがインストールされて構成されたので、パイプライン内で Apache Maven を利用できるようになりました。これにより、「[モジュール 2]: Jenkins Server」で作成したパイプラインでプロジェクト コードを構築し、jar アーティファクトを作成できるようになります。 Apache Maven をパイプラインに統合するには、次の手順に従う必要があります。 「ダッシュボード」 →「CI_CD_Pipeline」→「構成」→「ビルドステップ」に移動します。 ボタンをクリックします。 「ビルドステップを追加」 オプションを選択します。 「トップレベルの Maven ターゲットを呼び出す」 「Maven バージョン」として を選択します 「Apache-Maven」 。 入力に コマンドを追加します。 「目標」 「クリーンパッケージ」 ボタンをクリックします。 「詳細」 入力に「pom.xml」を追加します。 「POM」 最後に、 ボタンと ボタンをクリックして、Apache Maven とパイプラインの統合を完了する必要があります。 「適用」 「保存」 ステップ 7: パイプラインに統合された Apache Maven をテストする これで、更新されたパイプラインを使用して Github プロジェクトを構築できるようになりました。これを行うには、**「今すぐビルド」** ボタンをクリックする必要があります。その結果、ビルド履歴にジョブの成功結果が表示されます。 AWS EC2 ターミナルを開いた場合。パイプラインが正常に動作していることを確認できます。 このコマンドを使用するだけです。 cd /var/lib/jenkins/workspace/{your pipeline name}/target こうすることで、GitHub からのプロジェクトのビルドが成功したことを示す JAR アーティファクトを確認できます。 [モジュール 5]: ドッカー 次に、Docker と Ansible をインストールする新しい EC2 インスタンスを「Ansible Server」という名前で作成しましょう。 ステップ 1: AWS EC2 仮想サーバーインスタンスを起動する このチュートリアルの「 セクションの手順に従って、このステップを完了します。セキュリティグループ設定を追加することを忘れないでください。これにより、Docker と SSH がそれぞれポート 8080 と 22 で動作できるようになります。 AWS EC2 仮想サーバー インスタンスの起動」 ステップ 2: AWS EC2 仮想サーバー インスタンスに接続する 「接続」ボタンをクリックします。 これで、EC2 仮想サーバー インスタンスのオンライン ターミナルが表示されます。 sudo chown ansible-admin:ansible-admin /opt/docker ステップ 3: Ansible EC2 仮想サーバーに Docker をインストールします。 次に、Ansible EC2 インスタンスに docker をインストールする必要があります。これを行うには、新しい docker フォルダーを作成する必要があります。 sudo mkdir /opt/docker 次に、次のコマンドを実行して docker をインストールします。 sudo yum install docker -y ステップ 4: 現在のユーザーを Ansible EC2 仮想サーバーの Docker グループに追加する Docker 管理者権限を付与するには、現在のユーザー EC2 仮想サーバー の Docker グループに追加する必要があります。 「ansible-admin」を 「AnsibleServer」 sudo usermod -a -G docker ansible-admin これらの変更を有効にするには、ログアウトしてから再度ログインする必要があります。 その後、次のコマンドを実行できます id ansible-admin 新しい docker ユーザーが存在することを確認します。 ステップ 5: Docker を起動する これで、Docker が Ansible EC2 インスタンスにインストールされたので、次のコマンドを実行して起動できるようになります。 sudo systemctl start docker Docker が起動すると、次のコマンドを実行できます。 sudo systemctl status docker docker がアクティブで現在実行中であることを確認します。 ステップ 6: Dockerfile を作成する パイプラインの最終バージョンでは、プロセスに GitHub プロジェクトから新しい Docker イメージを作成し、それを Docker Hub にプッシュすることが含まれます。これを実現するには、GitHub プロジェクトに Dockerfile が含まれている必要があります。 「 モジュールで提供されたプロジェクト を使用した場合、このプロジェクト リポジトリには既に Dockerfile が含まれているため、新しい Dockerfile を作成する必要はありません。 [モジュール 3]: Git と Github」 「Hello」 FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ] 独自のプロジェクト リポジトリを使用していて、そこに Dockerfile が含まれていない場合は、新しい Dockerfile を作成する必要があります。 新しい Dockerfile を作成するには、次のコマンドを実行すると、新しいファイルが作成されます。 sudo touch Dockerfile 次に、コンテナ化されたアプリケーション環境を構築する方法を説明する一連のコマンドをこのファイルに入力します。これらのコマンドには、イメージへのファイルのコピー、ソフトウェアのインストール、環境変数の設定、コンテナーの構成などのアクションが含まれます。 これらのコマンドを Dockerfile に入力するには、次のコマンドを実行します。 vim Dockerfile Dockerfile を使用する準備ができました。 ステップ 7: Docker にログインする Dockerfile を使用する準備ができたので、**"JenkinsServer"**EC2 インスタンスからプロジェクトの JAR アーティファクトをコピーし、それを EC2 インスタンスに貼り付けます。この転送はパイプラインを通じてさらに自動化されることに注意することが重要です。 "AnsibleServer" このステップを完了すると、セットアップした Docker 環境とともに Dockerfile をテストする準備が整います。 テストを開始する前に、Dockerhub で必ず認証を行ってください。次のコマンドを実行します。 docker login このコマンドでは、ユーザー名とパスワードを含む Dockerhub ログイン資格情報の入力を求められます。 これで、 へのログインプロセスが完了し、テストを続行する準備が整いました。 Docker Docker 環境と Dockerfile をテストする ステップ 8: Dockerhub へのログインが完了すると、準備した Dockerfile のテストを開始する準備が整いました。 このコマンドを実行してdockerイメージを作成します。 docker build -t hello:latest . 次に、後続のコマンドを実行して、イメージの Dockerhub へのアップロードを容易にするタグを確立します。 docker tag hello:latest zufarexplainedit/hello:latest 最後に、このコマンドを実行して、Docker イメージを Dockerhub にプッシュします。 docker push zufarexplainedit/hello:latest これらの手順に従って、Dockerhub アカウントに移動して、新しいイメージが表示されるかどうかを確認します。 画像が効果的に追加されたことが確認できるはずです。この結果により、Docker 環境のインストールが成功し、Dockerfile が正しいことが確認されます。 [モジュール 6]: Ansible 次に、EC2 仮想サーバー インスタンス上で Ansible サーバーを構成しましょう。 ステップ 1: AWS EC2 仮想サーバーインスタンスを作成する Ansible を実行するには仮想サーバーが必要です。 このチュートリアルの セクションの指示に従ってこのステップを完了し、Ansible の EC2 仮想サーバー インスタンスを作成します。 「[モジュール 1]: AWS EC2 仮想サーバー」 セキュリティグループ設定を追加することを忘れないでください。これにより、 と それぞれポート と で動作できるようになります。 Ansible SSH が 8080 22 EC2 仮想サーバー インスタンスを区別するには、 という名前を使用します。 「AnsibleServer」 セキュリティ グループと を新しい EC2 インスタンスに再利用できます。 「CI_CD_Pipeline」 「CI_CD_Pipeline_Key_Pair」 「AnsibleServer」 ステップ 2: AWS EC2 仮想サーバー インスタンスに接続する AWS コンソールのホームページ → EC2 管理コンソールのダッシュボード → インスタンス → AnsibleServer に移動します。 次に ボタンをクリックします。 「接続」 すると、この Web ページが表示されます。もう一度 ボタンをクリックしてください。 「接続」 これで、EC2 仮想サーバー インスタンスのオンライン ターミナルが表示されます。 次に、EC2 仮想サーバー インスタンス上で Ansible Server を構成しましょう。 ステップ 3: 「AnsibleServer」AWS EC2 仮想サーバー インスタンスのホスト名を変更する EC2 仮想サーバー インスタンスで AnsibleServer を構成する場合、最初に行う必要があるのは、ホスト名を変更することです。 やりましょう。次のコマンドを実行してホスト名ファイルを開きます。 sudo vi /etc/hostname 次のようなものが表示されるはずです。 このホスト名を 次に、再起動します。 「ansible-server」に置き換えます。 sudo init 6 ステップ 4: 「AnsibleServer」AWS EC2 仮想サーバー インスタンスに新しいユーザーを追加して構成する 次に、新しい ユーザーを AWS EC2 仮想サーバー インスタンスに追加しましょう。 ansible-admin これを行うには、次のコマンドを使用します。 sudo useradd ansible-admin 次に、 ユーザーのパスワードを設定します。 ansible-admin sudo passwd ansible-admin また、 ファイルを編集してユーザー権限を構成する必要があります。 sudoers sudo visudo この ファイルに を追加します。 sudoers 「ansible-admin ALL=(ALL) ALL」 また、 ファイルを編集して PasswordAuthentication を有効にする必要があります。 /etc/ssh/sshd_config sudo vi /etc/ssh/sshd_config 次に、サービスをリロードしてこれらの変更を確認する必要があります。 sudo service sshd reload このコマンドを実行すると、次のように表示されます。 これで、このコマンドを使用して、以降のすべてのコマンドに sudo を追加することを避けることができます。 sudo su - ansible-admin ステップ 5: AWS EC2 仮想サーバーインスタンスでキーを生成する この記事では、K8s EC2 仮想サーバー インスタンスなどのリモート サーバーをさらに管理することを計画しています。このため、SSH キーを設定する必要があります。 ssh-keygen このコマンドを実行すると、次のように表示されます。 これで SSH キーが生成され、使用できるようになりました。 ステップ 6: Ansible をインストールする これで、 EC2 仮想サーバー インスタンスに Ansible をインストールできるようになりました。 「AnsibleServer」 やりましょう。 このコマンドを実行して Ansible をインストールします。 sudo amazon-linux-extras install ansible2 Ansible を確認するには、次のコマンドを使用します。 ansible --version このコマンドを実行すると、次のように表示されます。 ステップ 7: JenkinsServer EC2 インスタンスに Jenkins の「Publish over SSH」プラグインをインストールする Ansible は EC2 仮想サーバー インスタンスにインストールされているため、Ansible と統合するように Jenkins を構成できます。 Jenkins を Ansible がインストールされている EC2 仮想サーバー インスタンスおよび がインストールされている他の EC2 仮想サーバー インスタンスと統合するには プラグインをインストールする必要があります。 「AnsibleServer」 Kubernetes 、「Publish over SSH」 →「 → → に移動します。 「ダッシュボード」 Jenkinsの管理」 「システムの構成」 「利用可能なプラグイン」 次に、検索ボックスに と入力します。 「Publish over SSH」 ボタンをクリックします。ダウンロードプロセスが終了するまで待ちます。 「再起動せずにインストール」 これで、「Publish over SSH」プラグインが Jenkins EC2 仮想サーバー インスタンスにインストールされました。 ステップ 8: Jenkins の「Publish over SSH」プラグインを構成する Apache Maven Jenkins プラグインが正常にインストールされると、モジュール 2 と 3 で作成および更新したパイプライン内でこのプラグインを利用できるようになります。 これを行うには、次の手順に従います。 → → → に移動します。 「ダッシュボード」 「Jenkins の管理」 「システムの構成」 「SSH 経由で公開」 ホスト名、ユーザー名、秘密キー (該当する場合はパスワード) など、必要なデータをスクリーンショットにあるとおりにすべて入力します。 次に、 ボタンと ボタンをクリックします。 「適用」 「保存」 これで、 Jenkins プラグインの構成が完了しました。 「Publish over SSH」 次に、「設定のテスト」をクリックして、プラグインが正しく動作していることを検証します。 左側では、テスト プラグインの設定ステータスが「成功」であることがわかります。これはプラグインの設定が正しいことを意味します。 ステップ 9: AnsibleServer に新しい Docker ディレクトリを作成する AnsibleServer EC2 インスタンス上に、プロジェクト JAR が保存される新しいフォルダーを作成する必要があります。この jar は、後で Docker イメージを作成するために使用されます。 はじめましょう。 AnsibleServer EC2 インスタンスの フォルダーに移動します。 「/opt」 cd /opt そこに新しいフォルダー を作成します。 「docker」 sudo mkdir docker この フォルダーに権限を与えます。 「docker」 sudo chown ansible-admin:ansible-admin docker 次に、このコマンドを実行して フォルダーの権限を確認します。 「docker」 ll フォルダー ユーザーでアクセスできることがわかります。 「docker」 に「ansible-admin」 Github プラグインを に統合する ステップ 10: 「Publish over SSH」 パイプライン Github プラグインがインストールおよび構成されたので、「[モジュール 2]: Jenkins Server」で作成したパイプラインにプラグインを統合して、プロジェクトの jar アーティファクトを「 から 。 「Publish over SSH」 JenkinsServer」 「AnsibleServer」 Github プラグインをパイプラインに統合するには、次の手順に従う必要があります。 「Publish over SSH」 「ダッシュボード」 →「CI_CD_Pipeline」→「構成」→「ビルド後のアクション」に移動します。 ボタンをクリックします。 「ビルド後のアクションを追加」 オプションを選択します。 「SSH 経由でビルド アーティファクトを送信する」 セクションの 入力に を追加します**。** 「SSH サーバー」 「名前」 「AnsibleServer」 セクションの 入力に を追加します**.** 「転送セット」 「ソースファイル」 「target/*.jar」 セクションの 入力に を追加します**。** 「転送セット」 「プレフィックスの削除」 「target/」 セクションの 入力に を追加します**。** 「転送セット」 「リモート ディレクトリ」 「//opt/docker/」 ここでは、「転送セット」セクションの「実行コマンド」入力に空の文字列を入力するだけです。 最後に、 ボタンと ボタンをクリックして、 プラグインとパイプラインの統合を完了する必要があります。 「適用」 「保存」 「SSH 経由で公開」 Github プラグイン「SSH 経由で公開」をテストする ステップ 11: パイプラインに統合された これで、更新されたパイプラインを使用して、プロジェクト jar アーティファクトを「 から に転送できるようになりました。これを行うには、 ボタンをクリックする必要があります。その結果、ビルド履歴にジョブの成功結果が表示されます。 JenkinsServer」 「AnsibleServer」 「今すぐビルド」 AWS EC2ターミナルを開いた場合。パイプラインが正常に動作していることを確認できます。 「AnsibleServer」 このコマンドを使用するだけです。 cd /opt/docker こうすることで、GitHub からのプロジェクトのビルドが成功したことを示す JAR アーティファクトを確認できます。 ステップ 12: Ansible ホストを構成する Ansible Playbook を実行するときは、それを実行するホストを指定します。これは 2 つの方法で行うことができます。 Playbook で、 パラメーターを IP アドレスまたはホスト名のリストに設定できます。 Playbook でホストを直接指定する: hosts Ansible では、インベントリ ファイルでホストのリストを定義し、Playbook の実行時にこのファイルを参照できます。デフォルトのインベントリ ファイルは です。 インベントリ ファイルを使用する: /etc/ansible/hosts を編集すると、Playbook を実行するたびにホストの IP アドレスを書き出すことなく、ホストのグループを簡単に管理できます。 /etc/ansible/hosts 次のコマンドを実行して、AnsibleServer EC2 インスタンスのホストを調べてみましょう。 sudo ifconfig AnsibleServer EC2 インスタンス ホストを見つけたら、次のコマンドを実行して、それを Ansible hosts ファイルに追加できます。 sudo vi /etc/ansible/hosts 「[ansible]」を参照として追加することもできます サーバーのクラスターを管理していて、そのすべてにプレイブックを適用したい場合は、プレイブックで各サーバーの IP アドレスを指定する代わりに、すべてのサーバーをインベントリ ファイルのグループに追加して、プレイブック内のグループ。 ステップ 13: Ansible のローカルホストへのパスワードレス SSH 認証を構成する Ansible は、リモート サーバー上のタスクを自動化するように設計されています。パスワードレス SSH 認証により、Ansible は手動でパスワードを入力しなくてもこれらのサーバーに接続できるようになります。 このコマンドを実行して、ansible-admin ユーザーの SSH キーを使用して、自分のコンピューターから別のコンピューター (IP アドレス 172.31.34.41 のコンピューターなど) への安全な接続を作成します。 sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address} 私の場合はこんな感じです。 sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub ansible-admin@172.31.34.41 が表示されます。パスワードなしの SSH 認証のインストールが正常に完了したことを意味します。 「追加されたキーの数: 1」 ステップ 14: Docker タスク用の新しい Ansible プレイブックを作成する Ansible の設定がすべて完了し、準備が整ったので、パイプライン用の新しい Ansible プレイブックを作成できます。この Playbook により、Ansible が新しい Docker イメージを作成して Dockerhub に送信できるようになります。 その方法は次のとおりです。 まず、新しい Ansible Playbook ファイルを作成します。このコマンドを使用するだけです。 touch hello-app.yml 次に、新しく作成した ファイルを編集します。このコマンドを使用して編集用に開きます。 hello-app.yml vi hello-app.yml ファイル内に次の内容を入力します。 --- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest Docker タスク用の Ansible プレイブックを使用する準備ができました。 ステップ 13: Docker タスクを使用して Ansible プレイブックをテストする Ansible、Ansible Playbook、AnsibleServer、および JenkinsServer がすべて適切に構成されたら、Ansible Playbook をテストします。 Ansible プレイブックの場所に移動します。 cd /opt/docker 次に、以下のコマンドを実行します。 sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml 完了すると、Ansible プレイブックの実行結果が正常に表示されることがわかります。 さらに、Dockerhub アカウントにアクセスして、新しいイメージが表示されるかどうかを確認してください。 新しく追加された画像が表示されるはずです。この結果により、Ansible プレイブックが正しいことが確認されます。 に統合する ステップ 14: Ansible Docker タスクを パイプライン Github プラグイン、Ansible、Docker がインストールおよび設定されたので、「[モジュール 2]: Jenkins Server」で作成したパイプラインにそれらをすべて統合して、プロジェクトの jar アーティファクトを転送できるようになりました。 「 から に変更し、プロジェクトから新しい Docker イメージを構築して、この Docker イメージを Dockerhub にプッシュします。 「Publish over SSH」 JenkinsServer」 「AnsibleServer」 これを実現するには、次の手順に従う必要があります。 「ダッシュボード」 →「CI_CD_Pipeline」→「構成」→「ビルド後のアクション」→「SSH 経由でビルド アーティファクトを送信」に移動します。 入力に コマンドを追加します。 「Exec command」 「sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml」 最後に、 と ボタンをクリックして、パイプラインとの Ansible Docker タスクの統合を終了します。 「適用」ボタン 「保存」 ステップ 15: パイプラインに統合された 「Docker タスクを含む Ansible プレイブック」をテストする これで、アップグレードされたパイプラインをテストして、プロジェクトの jar アーティファクトを「 から にシームレスに転送し、プロジェクトから新しい Docker イメージを構築して、この Docker イメージを Dockerhub にプッシュできるようになりました。これを行うには、 ボタンをクリックする必要があります。その結果、ビルド履歴にジョブの成功結果が表示されます。 JenkinsServer」 「AnsibleServer」 「今すぐビルド」 さらに、Dockerhub アカウントにアクセスして、新しいイメージが表示されるかどうかを確認してください。 新しく追加された画像が表示されるはずです。この結果は、Docker タスクを含む Ansible プレイブックがパイプラインに正常に統合されたことを確認します。 [モジュール 7]: Kubernetes 次に、EC2 インスタンスで K8 を構成しましょう。新しい EC2 インスタンスを作成し、 クラスターとさらに対話するための kubectl コマンドライン ツールをインストールします。 Kubernetes ステップ 1: AWS EC2 仮想サーバーインスタンスを起動する このチュートリアルの「 セクションの手順に従って、このステップを完了します。 AWS EC2 仮想サーバー インスタンスの起動」 セキュリティグループ設定を追加することを忘れないでください。これにより、 と それぞれポート と で動作できるようになります。 すべてのツール SSH が 8080 22 EC2 仮想サーバー インスタンスを区別するには、 という名前を使用します。 「K8sServer」 セキュリティ グループと を新しい EC2 インスタンスに再利用できます。 「CI_CD_Pipeline」 「CI_CD_Pipeline_Key_Pair」 「K8sServer」 ステップ 2: AWS EC2 仮想サーバー インスタンスに接続する 「接続」ボタンをクリックします。 これで、EC2 仮想サーバー インスタンスのオンライン ターミナルが表示されます。 ステップ 3: 「KubernetesServer」AWS EC2 仮想サーバー インスタンスのホスト名を変更する EC2 仮想サーバー インスタンス上で KuberenetesServer を構成する場合、最初に行う必要があるのは、ホスト名を変更することです。 やりましょう。次のコマンドを実行してホスト名ファイルを開きます。 sudo vi /etc/hostname このようなものが表示されるはずです。 このホスト名を に置き換えて再起動します。 「kubernetes-server」 sudo init 6 ホスト名が変更されました。 ステップ 4: AWS CLI のバージョンを確認する このコマンドを使用して バージョンを確認します。 AWS の aws --version こうすることで、現在の aws-cli バージョンを確認できます。 バージョン が表示される場合は、最新バージョンをダウンロードする必要があります。 aws-cli/1.18 ステップ 5: AWS CLI を更新する EC2 インスタンスに古い aws-cli バージョンがあることがわかったので、それを更新する必要があります。それには、AWS → ドキュメント → AWS コマンドラインインターフェイス → バージョン 2 のユーザーガイドに移動します。 コピーして貼り付けます。 curl コマンドを まず、このコマンドを実行して awscli バージョン 2 をダウンロードします。 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" ダウンロードプロセスが開始されるまで待ちます。 このようなものが表示されるはずです。 次に、このコマンドを実行して、awscli バージョン 2 アーカイブを解凍する必要があります。 unzip awscliv2.zip 3 番目に、このコマンドを実行して awscli バージョン 2 をインストールする必要があります。 sudo ./aws/install 次に、Kubernetes EC2 仮想サーバー インスタンスのオンライン ターミナルをリロードします。 次に、このコマンドを使用して AWS のバージョンを確認します。 aws --version aws cli に aws-cli/2 があることがわかります。 ステップ 6: kubectl をインストールする 基盤となるインフラストラクチャに関係なく、Kubernetes クラスターと対話するための基本的なコマンドライン ツールです。これにより、Kubernetes クラスター内でリソースの管理、アプリケーションのデプロイ、ネットワークの構成、ログへのアクセス、その他のさまざまなタスクの実行が可能になります。 Kubectl は、 次に、Kubernetes クラスターとさらに対話するために、kubectl コマンドライン ツールをインストールする必要があります。そのためには、 → → → →「 または → に移動する必要があります。 「AWS」 「ドキュメント」 「Amazon EKS」 「ユーザー ガイド」 kubectl の インストール 更新」 「Linux」 または、リンク をクリックするだけです。 https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html まず、このコマンドを実行してkubectlをダウンロードします。 curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl ダウンロードプロセスを待ちます。 このようなものが表示されます。 kubectlに権限を与えます。 chmod +x kubectl kubectl を /usr/local/bin フォルダーに移動します。 sudo mv kubectl /usr/local/bin kubectlのバージョンを確認してください。 kubectl version --output=yaml ステップ 7: eksctl をインストールする は、特に Amazon EKS サービスに合わせて調整された別のコマンドライン ツールです。 Eksctl を使用すると、AWS EKS クラスターの作成、ノード グループの管理、および AWS インフラストラクチャのセットアップと管理の多くを抽象化することによる IAM ロールや他の AWS サービスとの統合など、EKS に固有のタスクを実行できます。 Eksctl コマンドを実行してkubectlをダウンロードします。 curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp eksctl を /usr/local/bin フォルダーに移動します。 sudo mv /tmp/eksctl /usr/local/bin eksctlのバージョンを確認してください。 eksctl version バージョンが表示されるはずです ステップ 8: eksctl の IAM ロールを作成する IAM ロールを作成し、 EC2 インスタンスにアタッチする必要があります。 「KubernetesServer」 これを行うには、検索ボックスで EC2 を見つける必要があります。 / のリンクをクリックして、EC2 仮想サーバーを選択します。 https://us-east-1.console.aws.amazon.com/ec2 → に移動します。 IAM ダッシュボード ロール ロール Web ページで ボタンをクリックします。 IAM [ロールの作成] 次に、 そして ボタンをクリックします。 「AWS サービス」、「EC2」を選択します。 「次へ」 次に、検索ボックスで 、 、 、 を見つけて、 ボタンをクリックします。 「AmazonEC2FullAccess」 「AmazonEC2FullAccess」 「IAMFullAccess」 「AWSCloudFormationFullAccess」 「アクセス許可の追加」 そして、 ボタンをクリックします。 「次へ」 次に、 入力に と入力します。 「ロール名」 「Eksctl_Role」 そして ボタンをクリックします。 「ロールの作成」 最後にロールが作成されます。 ステップ 9: IAM ロールを eksctl に接続する AWS EC2 インスタンスの Web ページに移動します。 次に、 → → 「KuberbetesServer」を選択します。 「アクション」 「セキュリティ」 「IAM ロールの変更」をクリックします。 を選択し、 ボタンをクリックします。 「Eksctl_Role」 「IAM ロールを更新」 これで、IAM ロールが および eksctl ツールに接続されました。 「EKS_Server」 ステップ 10: eksctl クラスターを作成する クラスターは、AWS 上の管理された Kubernetes 環境であり、セットアップ、スケーリング、メンテナンスなどの複雑なインフラストラクチャタスクを自動化します。これは、コンテナ化されたアプリケーションのデプロイ、管理、スケーリング、運用の合理化、開発者が基盤となるインフラストラクチャの管理ではなくコーディングに集中できるようにするための、効率的で安全な AWS に最適化されたプラットフォームを提供するため、不可欠です。 Amazon EKS (Elastic Kubernetes Service) 次に、EKS クラスターをセットアップします。 これを実現するには、次の手順に従います。 次のコマンドを特定の情報に変更します。 eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2> 例えば私の場合はこんな感じです。 eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro 変更したコマンドを実行し、クラスターの作成プロセスが完了するまで辛抱強く待ちます。 AWS CloudFormation Web ページでは、EKS クラスターのステータスが と表示されていることがわかります。 「作成中」 クラスターの作成手順には通常、約 20 分かかります。完了すると、ターミナルにプロセスの結果が表示されます。 さらに、AWS CloudFormation ウェブページで 作成が成功したことを確認できます。 EKS クラスターの ステップ 11: Kubernetes デプロイメント yaml ファイルを作成する Kubernetes クラスター内の特定のアプリケーションまたはサービスを管理および保守する方法を定義する YAML 形式で記述された構成スクリプトです。これには、アプリケーションを実行しているコンテナーのデプロイ、スケーリング、更新、および監視を調整するための手順がカプセル化されています。このファイルには、コンテナー イメージ、必要なレプリカ数、リソース制限、環境変数、ネットワーク設定などの詳細が含まれます。 Kubernetes クラスターに適用すると、デプロイメント YAML ファイルはアプリケーションの望ましい状態を確保し、コンテナーの作成、スケーリング、リカバリを自動的に管理して、望ましいレベルの可用性と信頼性を維持します。 Kubernetes デプロイメント YAML ファイルは、 これで、Kubernetes クラスター、eksctl、kubectl がインストールおよび構成されたので、Kubernetes デプロイメント yaml ファイルを作成できます。 次のコマンドを実行することでこれを行うことができます。 touch hello-app-deployment.yaml 次に、次のコマンドを実行してこのファイルを編集します。 vi hello-app-deployment.yaml このコンテンツを hello-app-deployment.yaml に追加します。 apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 これで hello-app-deployment.yaml が作成され、使用できるようになりました。 ステップ 12: Kubernetes Service yaml ファイルを作成する ポッドのセットのネットワーク抽象化を定義する YAML 形式で記述された構成スクリプトであり、Kubernetes クラスター内で一貫してポッドにアクセスできるようにします。このファイルは、他のサービスまたは外部クライアントによるサービスの検出、アクセス、および負荷分散の方法を概説します。これには、サービス タイプ (ClusterIP、NodePort、LoadBalancer)、ポート番号、ポッドを識別するセレクターなどの仕様が含まれます。 Kubernetes クラスターに適用すると、サービス YAML ファイルは、トラフィックを適切なポッドにルーティングする仮想 IP とポートを作成し、基礎となるポッドの変更を抽象化し、通信に安定したエンドポイントを提供して、シームレスな接続と動的なスケーリングを可能にします。 Kubernetes Service YAML ファイルは、 Kubernetes クラスター、eksctl、kubectl がインストールおよび構成されているので、Kubernetes Service yaml ファイルを作成できます。 これを行うには、次のコマンドを実行して Kubernetes Service yaml ファイルを作成する必要があります。 touch hello-app-service.yaml 次に、次のコマンドを実行してこのファイルを編集します。 vi hello-app-service.yaml このコンテンツを hello-app-deployment.yaml に追加します。 apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer これで hello-app-service.yaml が作成され、使用できるようになりました。 ステップ 13: kubectl を使用して Kubernetes クラスターをテストする Kubernetes EKS クラスターが正常にインストールおよび構成され、Kubernetes サービスとデプロイメント ファイルの準備ができたら、kubectl コマンドを使用してテストを行ってみましょう。 デプロイメントを適用します。 次のコマンドを使用して、デプロイメント構成を適用します。 kubectl apply -f hello-app-deployment.yaml これにより、指定された数のレプリカとローリング アップデート戦略を使用したデプロイメントが作成され、アプリケーションの可用性と管理性が確保されます。 2. サービスを適用します。 次に、サービス構成を適用します。 kubectl apply -f hello-app-service.yaml これにより、LoadBalancer タイプのサービスがセットアップされ、アプリケーションがインターネットに公開されます。 LoadBalancer がプロビジョニングされ、外部 IP アドレスが取得されるまでに少し時間がかかる場合があることに注意してください。 ロードバランサーのステータスを確認します。 を使用してサービスのステータスを監視します。 kubectl get service zufarexplainedit-hello-app-service 外部 IP が割り当てられると、アプリケーションにアクセスする準備がほぼ整います。 アプリケーションにアクセスします。 Web ブラウザを使用して、割り当てられた外部 IP アドレスの後に「:8080」を入力します。しばらくすると、ページが読み込まれ、「HelloWorld」メッセージが表示されます。初期読み込みには数秒かかる場合があることに注意してください。 kubectl コマンドを使用したクリーンアップ Kubernetes 環境内のリソースを整理する必要がある場合は、次の kubectl コマンドを使用して、デプロイメント、ポッド、サービスを効果的に削除できます。 。 1. すべてのデプロイメントを削除します すべてのデプロイメントを削除するには、次のコマンドを使用できます。 kubectl delete deployments --all このアクションにより、クラスター内にアクティブなデプロイメント インスタンスが残らないようになります。 。 2. すべてのポッドを削除します デプロイメントによって管理されているかどうかに関係なく、すべてのポッドを削除する必要がある場合は、次のコマンドを使用できます。 kubectl delete pods --all ポッドをクリアすると、クラスターの状態をリセットしたり、新しいデプロイメントの準備をしたりするのに役立ちます。 。 3. すべてのサービスを削除します アプリケーションをネットワークに公開するサービスをクリーンアップするには、次のコマンドを使用できます。 kubectl delete services --all サービスの削除にはダウンタイムが伴う可能性があるため、続行する前にその影響を考慮してください。 Amazon EKS クラスターの削除 で作成された指定された Amazon EKS クラスターに関連付けられたすべてのリソース (ワーカーノード、ネットワークコンポーネント、その他のリソースを含む) を削除するには、次のコマンドを使用できます。 eksctl eksctl delete cluster --name {your cluster name} --region {your region name} 私にとってはそうです。 eksctl delete cluster --name zufarexplainedit --region eu-north-1 クラスターを停止すると元に戻せなくなり、データが失われる可能性があるため、必ずクラスターを停止してください。 ステップ 14: 「KubernetesServer」AWS EC2 仮想サーバー インスタンスに新しいユーザーを追加して構成する 次に、新しい ユーザーを AWS EC2 仮想サーバー インスタンスに追加しましょう。 ansible-admin 「KubernetesServer」 これを行うには、このコマンドを使用します。 sudo useradd ansible-admin 次に、 ユーザーのパスワードを設定します。 ansible-admin sudo passwd ansible-admin また、 ファイルを編集してユーザー権限を構成する必要があります。 sudoers sudo visudo この ファイルに を追加します。 sudoers 「ansible-admin ALL=(ALL) ALL」 また、 ファイルを編集して PasswordAuthentication を有効にする必要があります。 /etc/ssh/sshd_config sudo vi /etc/ssh/sshd_config 次に、これらの変更を行うためにサービスをリロードする必要があります。 sudo service sshd reload このコマンドを実行すると、次のように表示されます。 これで、このコマンドを使用して、以降のすべてのコマンドに sudo を追加することを避けることができます。 sudo su - ansible-admin ステップ 15: AWS EC2 仮想サーバーインスタンスでキーを生成する この記事では、 EC2 仮想サーバー インスタンスなどのリモート サーバーをさらに管理することを計画しています。このため、SSH キーを設定する必要があります。 K8s ssh-keygen このコマンドを実行すると、次のように表示されます。 これで SSH キーが生成され、使用できるようになりました。 ステップ 16: Ansible のローカルホストへのパスワードレス SSH 認証を構成する Ansible は、リモート サーバー上のタスクを自動化するように設計されています。パスワードレス SSH 認証により、Ansible は手動でパスワードを入力しなくてもこれらのサーバーに接続できるようになります。 このコマンドを実行して、ansible-admin ユーザーの SSH キーを使用して、自分のコンピューターから別のコンピューター (IP アドレス 172.31.34.41 のコンピューターなど) への安全な接続を作成します。 sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address} 私の場合はこんな感じです。 sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub ansible-admin@172.31.34.41 が表示されます。パスワードなしの SSH 認証のインストールが正常に完了したことを意味します。 「追加されたキーの数: 1」 ステップ 17: AnsibleServer EC2 インスタンスで Ansible ホストを構成する Ansible Playbook を実行するときは、それを実行するホストを指定します。このステップでは、KubernetesServer EC2 インスタンスのホストを指定する必要があります。これを行うには、「 [モジュール 6]: Ansible」で実行したのと同じ手順を繰り返す必要があります。 次のコマンドを実行して、KubernetesServer EC2 インスタンスのホストを調べてみましょう。 sudo ifconfig KubernetesServer EC2 インスタンス ホストを見つけたら、次のコマンドを実行して、それを Ansible hosts ファイルに追加できます。 sudo vi /etc/ansible/hosts 「[kubernetes]」を参照として追加することもできます ステップ 18: Kubernetes タスク用の新しい Ansible プレイブックを作成する Kubernetes のセットアップがすべて完了し、準備が整ったので、パイプライン用の Kubernetes タスクを含む新しい Ansible プレイブックを作成できます。この Playbook により、Ansible は kubectl コマンドを使用して Kubernetes クラスター上でアプリを実行できるようになります。 その方法は次のとおりです。 まず、新しい Ansible Playbook ファイルを作成します。このコマンドを使用するだけです。 touch kubernetes-hello-app.yml 次に、新しく作成した ファイルを編集します。このコマンドを使用して編集用に開きます。 hello-app.yml vi kubernetes-hello-app.yml ファイル内に次のように入力します。 --- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app Kubernetes タスク用の Ansible プレイブックを使用する準備ができました。 ステップ 19: Kubernetes タスク用の新しい Ansible プレイブックを Jenkins と統合する Kubernetes、Ansible、および Kubernetes タスク用の Ansible プレイブックがすべてセットアップされ、準備が整ったので、これを Jenkins と統合できます。 「JenkinsServer」→「Jenkins ダッシュボード」→「新しい項目」に移動します。 「CD-Job」という名前で新しい Jenkins Freestyle プロジェクトを作成します。 「OK」ボタンをクリックします。 「ビルド後のアクション」セクションに進みます。 「ビルド後のアクションを追加」ボタンをクリックします。 「SSH 経由でビルド アーティファクトを送信する」オプションを選択します。 SSH サーバーとして「AnsibleServer」を選択します。 このコマンドを「exec command」入力に追加します。 sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml 「適用」ボタンと「保存」ボタンをクリックします。 Jenkins ダッシュボード → 「CI_CD_Pipeline」 → 「構成」 → 「ビルド後のアクション」セクションに移動します。 「ビルド後のアクションを追加」ボタンをクリックします。 「他のプロジェクトをビルドする」オプションを選択します。 「他のプロジェクトのビルド」セクションに進みます。 「ビルドが安定している場合にのみトリガーする」オプションを選択します。 「ビルドするプロジェクト」入力に「CD ジョブ」を追加します。 「適用」ボタンと「保存」ボタンをクリックします。 これで、パイプラインが完全に完成し、使用できる状態になったと考えることができます。 ステップ 20: 最終パイプライン バージョンのテスト ここで、パイプラインの最終バージョンをテストします。 Jenkins → Jenkins ダッシュボード → 「CI_CD_Pipeline」に移動します。 「今すぐビルド」ボタンをクリックします。 結果を確認するには、ビルド コンソールのログを確認してください。 ビルド コンソール ログで「CD ジョブ」がトリガーされ、最終ステータスが SUCCESS とマークされていることがわかります。 4 さらに、Dockerhub にアクセスして、新しい Docker イメージの追加を確認できます。 最後に、Web ブラウザを使用してアプリケーションにアクセスできます。割り当てられた外部 IP アドレスに「:8080」を続けて入力します。しばらくすると、ページが読み込まれ、「HelloWorld」メッセージが表示されます。 結論 この最新の CI/CD パイプラインのセットアップはうまくいきました。 あなたは素晴らしい仕事をしました、そしてあなたは本物のヒーローです! ご尽力ありがとうございました! 著者について 、最新のソフトウェア システムの設計に情熱を注ぐ経験豊富なシニア ソフトウェア エンジニアです。 Zufar Sunagatov は Citi (ロンドン)、MTS (モスクワ) などの企業向けに、Java、Kotlin、AWS、Docker、Kubernetes を使用した高性能分散システムを開発しました ( )。 詳細については、Zufar の LinkedIn プロフィールを参照してください オープンソースのオンライン マーケットプレイスである Ice Latte をゼロから設立しました (Zufar のチームに参加して、GitHub: で彼のプロジェクトに貢献できます)。 https://github.com/Sunagatov/Online-Store ZufarExplainedIT コミュニティを設立して、彼の知識と経験を他の人と共有しました (Zufar の IT Telegram コミュニティをフォローできます: )。 https://t.me/zufarexplained ADPlist で 3000 分以上の指導を受け、60 回のセッションを実施し、意欲的な人材を育成しました ( )。 ADPlist で Zufar による指導を受けることができます カンファレンスや IT YouTube チャンネルで講演者として聴衆を魅了し、貴重な洞察を共有しました (彼の YouTube ビデオの例には 、 あります)。 、「Тестовое собеседование Java разработчика #27 - Зуфар Сунагатов」 「Aspiring Speakers Lunchtime Lightning Talks May 28th」などが それぞれ 7,000 回以上の閲覧数を持つ非常に人気のある IT 記事を執筆しました (記事の例として 、 )。 は、「マイクロサービス アーキテクチャ パターン パート 1: 分解パターン」 「Что значит «вариативный»? Объясняем простыми словами」