Knativeを使ったオープンソース入門 パート2: 環境設定 ¶
公開日: 2023-09-18 , 更新日: 2024-01-17
Knativeを使ったオープンソース入門 パート2: 環境設定¶
著者: Calum Murray ソフトウェアエンジニアリングインターン @ Red Hat、および Leo Li ソフトウェアエンジニアリングインターン @ Red Hat
こんにちは、そしてこの入門ブログシリーズに再びようこそ! ブログシリーズ全体の概要については、最初の記事をご覧ください。この記事では、Knativeの**開発環境をセットアップする方法**について説明します。開発環境とは、現在リリースされているコードに影響を与えることなく、コードを変更および検査できる場所です。Knative開発環境のセットアップについては、開発環境のセットアップをローカルセットアップ(つまり、自分のコンピューターにセットアップするもの)と外部セットアップ(つまり、自分のコンピューターにセットアップしないもの)に分割します。
G. Cresnar Premium、ギアアイコン、https://www.flaticon.com/free-icon/settings_563541?term=gear&page=1&position=4&origin=search&related_id=563541
ローカルセットアップ¶
最初にコードを扱う場所は、ローカルコンピューター上なので、ローカルセットアップから始めましょう。**ローカルシステムのセットアップ方法をすでに知っている場合、またはすでに動作するローカルセットアップがある場合**は、最初に外部セットアップセクションにジャンプしてください。これらの2つのセクションを順番に読む必要はありません!
前提条件¶
ローカル環境に必要な残りのコンポーネントを追加する前に、コンピューターにインストールしておく必要がある前提条件がいくつかあります。ローカルセットアップを続行する前に、**これらの前提条件がすべてコンピューターにインストールされている**ことを確認してください。
Bash¶
他のローカルコンポーネントに必要なすべてのインストール/セットアップスクリプトを実行するには、コンピューターにBashがインストールされている必要があります。コンピューターにはBashがインストールされている可能性があります(LinuxとMacにはインストールされていますが、MacではBashのバージョンをアップグレードすることをお勧めします)。**Windows**を使用している場合は、Bashをインストールする必要があります。あるいは、WindowsユーザーはWSLを使用できます。
Git¶
リポジトリのクローンを作成したり、さまざまなツールをダウンロードしたりするには、コンピューターにGitが必要です。Gitがインストールされているかどうかを確認するには、ターミナルウィンドウで `git --version` を実行します。Gitをインストールするには、ここにある手順に従ってください。
SSHキーは、GitHubやGitLabなどのサードパーティのコードリポジトリサービスプロバイダーで身元を認証するために使用されます。プル、プッシュ、またはクローンコマンドを実行するたびに資格情報を入力する必要はありません。このキーベースの認証方法は、セキュリティと利便性の両方を向上させます。GitHubまたはGitLabにSSHキーをまだ設定していない場合は、**設定することを強くお勧めします**。GitHubにSSHキーを設定するには、この手順に従い、GitLabにSSHキーを設定するには、この手順に従ってください。
Golang (Go)¶
Knativeのほとんどの部分はGoプログラミング言語で開発されているため、Knativeを開発するには、この言語をインストールする必要があります。Knativeの他の言語で記述されている部分もありますが、それらについては、このブログシリーズの**投稿7**(近日公開!)で説明します。Goプログラミング言語をインストールするには、この記事の手順に従ってください。
エディター¶
コードを編集するには、エディターをインストールする必要があります。最近使用されている最も人気のある無料のエディターの1つはVSCodeですが、GoLandやIntelliJ IDEAなどの有料のJetBrainsエディターも非常に強力です。IntelliJ IDEAには無料のコミュニティエディションがあり、非常に強力です。一部の人は、昔ながらの方法でVim、Emacs、またはVimの新しいフォークであるNeovim(実際にVSCodeが持っているすべての言語サポートを備えています。自分で構成しても構わないと思っている場合)を使用することを好みます。エディターの選択は、作成するコードの品質に影響しませんが、1つを選択して快適に作業することが重要です。生産性の多くは、エディターを使用する能力から得られるからです。
Knativeをローカルで実行する¶
すべての前提条件が揃っていることを確認したので、Knativeを実行するようにローカルシステムのセットアップを始めましょう!
Docker/Podmanセットアップ¶
KnativeはKubernetesクラスターで実行されます。つまり、一連のコンテナーとして実行されます。コンテナーは、コードとコードを実行するために必要なすべての依存関係の両方を含むもの、およびパッケージ化された依存関係を使用してコードを実行するものと考えることができます。コンテナーの構築と実行に使用される最も一般的な2つのツールは**Docker**と**Podman**であるため、ここでは両方の設定について説明します。ただし、**Dockerを使用する**方が簡単だと考えているため、Dockerを使用することをお勧めします。
オプション1: Dockerのセットアップ¶
Dockerをセットアップする最初のステップは、Dockerをインストールすることです。これを行う最も簡単な方法は、Docker Desktopをインストールすることですが、KnativeにはDocker Engineのみが必要なので、Docker Engineのみをインストールすることもできます。注:Docker Engineのみをインストールする場合は、インストール後の手順を完了してください。
システムに Docker をインストールしたら、コンテナレジストリにログインする必要があります。使用できるレジストリは複数あります。まず、Docker アカウントを使用して Docker Hub にサインインできます。アカウントを作成するには、こちらからサインアップしてください。アカウントを取得したら、docker login
と入力し、指示に従うだけです。別の方法としては、Quay.io のレジストリを使用するか、ローカルレジストリを作成する方法があります。これらのいずれか、またはその他のレジストリを使用する場合は、docker login <registry_url>
でログインし、ターミナルのプロンプトに従うだけです。たとえば、ローカルレジストリにログインするには、docker login localhost:8080
を実行し、Quay にログインするには、docker login quay.io
を実行します。
オプション 2: Podman のセットアップ¶
Docker の代わりに Podman を使用したい場合は、幸運です。CLI が互換性があります!そのため、Podman をインストールし、docker を podman にエイリアスするだけです。このエイリアスを作成するには、以下を行う必要があります。
-
bash を使用している場合は、
alias docker=podman
を.bashrc
ファイルに追加します。 -
zsh を使用している場合は、
alias docker=podman
を.zshrc
ファイルに追加します。 -
fish を使用している場合は、
alias docker=podman
をconfig.fish
ファイルに追加します。
Docker のセットアップと同様に、Podman をシステムにインストールしてエイリアスを設定したら、Docker レジストリアカウントを取得し、docker login
を実行する必要があります。ただし、ログインするレジストリを指定する必要があります。そのため、docker login docker.io
を実行する必要があります。繰り返しますが、Podman の代わりに Docker を使用することをお勧めします。
Minikube/KinD のセットアップ¶
Docker または Podman のいずれかでコンピューターにコンテナエンジンが用意できたので、Knative を実行するためのローカル Kubernetes クラスターを作成する準備ができました!利用可能なローカル Kubernetes バージョンはたくさんありますが、minikube が最も効果的であることがわかりました。minikube をインストールするには、「アプリケーションのデプロイ」セクションに到達するまで、入門ガイドの手順に従ってください。
デバッグやバグの再現を行う場合は、多くの場合、新しい minikube クラスターを作成する必要があります。これを行うには、minikube delete
で現在のクラスターを削除し、minikube start
を実行して新しいクラスターを作成します。注: minikube start
は、既存のクラスターが存在する場合はそれを再開/更新するため、新しいクラスターを取得しようとする場合は、**最初にクラスターを削除してください**。 Minikube は、オペレーティングシステムとシステム構成に応じて、優先ドライバーを自動的に選択します。minikube が使用するドライバーを指定する場合は、クラスターの起動時に --driver
引数を使用できます。たとえば、Docker ドライバーを使用する場合は、minikube start --driver=docker
を実行できます。
Kubernetes をローカルで実行するためのもう1つの優れたオプションは、KinD です。 KinD をインストールする場合は、Web サイトのホームページにあるインストール手順に従ってください。KinD でクラスターを作成するには、kind create cluster
を実行するだけです。同様に、クラスターを削除するには、kind delete cluster
を実行できます。注: KinD は Docker/Podman 上で実行されるため、KinD を動作させるには、これらのいずれかをシステムにインストールして実行する必要があります。
ko、kubectl¶
minikube を実行して Kubernetes クラスターを起動したら、おそらくそれと対話したいと思うでしょう!クラスターと対話する方法は、コマンドラインインターフェイス(CLI)ツール kubectl を使用することです。 kubectl はこちらからインストールするか、シェルの適切な設定ファイルに alias kubectl="minikube kubectl --"
を追加することで、minkube に付属の kubectl のインストールにエイリアスを追加できます。
kubectl get <resource_type> -A
を実行することで、特定の種類のすべてのリソースを取得できます。たとえば、クラスター内のすべてのポッドを取得する場合は、kubectl get pods -A
を実行できます。名前空間でフィルタリングするには、-n
フラグを使用します。たとえば、knative-eventing
名前空間のすべてのポッドを取得するには、kubectl get pods -n knative-eventing
を実行します。クラスターにリソースを適用する場合(たとえば、Knative をインストールする場合、サービスを作成する場合、またはブローカーを作成する場合)、kubectl apply -f <filename_or_directory>
を実行できます。ディレクトリとそのサブディレクトリのすべてのコンテンツを再帰的に適用する場合は、-R
フラグを使用できます: kubectl apply -Rf <directory>
.
Knative を開発する場合、kubectl をよく使用しますが、ko
と呼ばれる同様のツールも使用します。 ko
は、適用されている設定ファイルに基づいてすべての Go コンテナイメージの構築を処理するパッケージであり、Knative の構築に使用されます。 ko をインストールするには、次の手順に従います。
Knative(または、適切な yaml 設定ファイルを使用して Go で記述された他のもの)をビルドする場合、ko apply -f <filename_or_directory>
を実行するだけで、ファイルまたはディレクトリで参照されているすべてがビルドされ、それらのオブジェクトがクラスターに適用されます。 ko に提供しているファイル名またはディレクトリ名は Go ファイル名ではなく yaml ファイルであることに注意してください。この意味で、ko は yaml ファイルを適用することで kubectl と同じように動作します。さらに、-R
フラグを使用して、kubectl と**まったく同じ方法**で再帰的に使用できます。
Knative のインストール¶
Knative は、クラスター内の一連のカスタムリソース、コントローラー、およびポッドとして実行されます。つまり、Kubernetes ネイティブです。そのため、Knative をローカルで実行するために必要なのは、ローカル Kubernetes クラスター(例: minikube または KinD)と、ソースコードをコンテナにビルドし、それらのイメージを使用して Kubernetes リソースを適用する方法(ko)です。 minikube start
を実行してクラスターが実行されていることを確認した後、ドキュメントに記載されている手順に従って、いずれかのリポジトリの config
ディレクトリに ko を適用するか、git リポジトリ kn-box の素晴らしいスクリプトセットを使用して、Knative をクラスターにインストールできます。どのアプローチを選択しても、yaml ファイルを適用するか、bash スクリプトを実行するだけで、Knative がローカルで実行されます!
次に、ローカルで編集した Knative コードを実行する場合は、ko を使用する必要があります。前述のように、多くの場合、ko apply -Rf config/
を実行してプロジェクト全体をビルドして適用することでこれを行うことができます。ただし、作業しているリポジトリの `CONTRIBUTING.md` および `DEVELOPMENT.md` ファイルには、より具体的な手順が記載されているため、常にそれらを参照してください。
この時点で、Knative が実行されているローカル Kubernetes クラスターが必要です。これは、Knative の使用方法について詳しく学ぶ絶好の機会です! Knative および KubeByExample Web サイトのチュートリアルに、独自のクラスターで簡単に従うことができます。
テストの実行¶
Knative には、ユニット/ビルドテストから統合テストまで、多くのテストがあります。一般的に、ユニット/ビルドテストは、コードがコンパイルされ、個々のコンポーネントが正しく機能していることを検証します。一方、統合テストは、さまざまなコンポーネントがすべて連携して動作することを検証します。一般に、統合テストは実行に多くの時間とリソースを消費するため、**ローカルで実行することはお勧めしません**。代わりに、ユニットテストに合格したら変更を GitHub に直接プッシュし、そこで統合テストを実行することをお勧めします。
各リポジトリには、ユニットテストを実行する方法の手順が記載されているため、`CONTRIBUTING.md` および `DEVELOPMENT.md` ファイルでそれらの動作を確認してください。Go テストの場合(多くの場合そうです)、`go test -v -race -count=1 <filename_or_directory>` を実行することで、サブディレクトリまたは特定のファイルでテストを実行することもできます。これは、変更を加える際のフィードバックループを短縮するため非常に便利です。
エディターのセットアップ¶
Knative に対する変更を実行およびテストできるローカル環境ができたので、変更を加えることができる環境を設定しましょう!まず、IDE 用の便利なプラグインをいくつかインストールしましょう。
便利な IDE プラグイン¶
ここで紹介するプラグインは、私たちが最も役に立つと判断したプラグインですが、他にも多くの便利なプラグインがあります。他のコミュニティメンバーの興味を引くと思われるものを見つけた場合は、Slack で共有してください。
Kubernetes¶
Kubernetes プラグインは、開発者向けの包括的なツールであり、Kubernetes 環境でアプリケーションを構築およびトラブルシューティングするための完全なソリューションを提供します。 Kubernetes リソースの直感的なエクスプローラツリーを使用して、ポッドのログなどの Kubernetes リソースを簡単に操作およびナビゲートできます。
VSCode を使用している場合は、Kubernetes プラグイン を設定する方法を以下に示します。
プラグインをインストールしたら、ここで確認できます。
Jetbrains IDE を使用している場合は、Kubernetes プラグイン をインストールする方法を以下に示します。
プラグインをインストールしたら、ここで確認できます。
言語サポート¶
VSCode は、Language Server Protocol を介して多くのプログラミング言語をサポートするように設計された汎用性の高いテキストエディターです。対照的に、JetBrains IDE は言語固有です。GoLand は Go 用、Pycharm は Python 用などです。VSCode が言語の IDE スタイルのサポートを提供するには、その言語に必要なプラグインをインストールする必要があります。同様に、JetBrains では、IDE がその言語をサポートしていない場合でも、特定の言語のプラグインをインストールできますが、適切なライセンスを購入する必要がある場合があります。VSCode は言語の IDE 機能を提供するためにプラグインが必要なため、次のプラグインをインストールすることをお勧めします。
コードフォーマット¶
Go コードには組み込みのスタイルガイドとフォーマッターがあるため、当然のことながら、VSCode と JetBrains IDE の両方でこれを構成できます。VSCode の場合は、次の手順に従います。
JetBrains の場合は、この記事で設定方法の詳細を確認できます。
外部セットアップ¶
これで動作するローカルセットアップができたので、外部で設定する必要があるものもいくつかあります。これらは、コミュニティへの参加方法、課題の申請方法、PR の作成方法でグループ化できます。
コミュニティ¶
コードの作業中に、変更内容について他の人と話し合ったり、質問したりする必要があるかもしれません。Knativeでは、コミュニケーションの主要な手段として**Slack**と**メーリングリスト**を使用しています。これらのコミュニケーションチャネルへのリンクはこちらにあります。また、Zoomで開催される週次および隔週のワーキンググループミーティングに参加して、議論を行うこともできます。コミュニティカレンダー(ワーキンググループのミーティング時間とリンクを含む)、Slackとメーリングリストへのリンクについては、こちらの記事をご覧ください。
Issueの担当を宣言する¶
ローカルのセットアップが完了したら、Issueに取り組んでみましょう。Issueの担当を宣言するには、貢献したいリポジトリの「Issues」タブに移動し、Issueを確認します。そのリポジトリへの初めての貢献であれば、「good-first-issue」ラベルが付いたIssueを探してください。特定のラベルでIssueをフィルタリングするには、こちらの手順に従ってください。「good-first-issue」ラベルが付いたIssueがない場合は、Slackで適切なIssueがあるかどうかをいつでも質問できます。また、「good-first-issue」ラベルが付いたIssueがすべて担当済みの場合は、コメントしてまだ作業中かどうかを確認してみてください。作業したいIssueが見つかったら、「/assign」とコメントすると、ProwボットがあなたにIssueを割り当てます(Prowについては後ほど詳しく説明します)。
プルリクエスト¶
最終的に、変更のコーディングが完了したら、プルリクエスト(PR)を開く段階になります。このプロセスに慣れていない場合は、このシリーズの前の記事をご覧ください。KnativeリポジトリでPRを開くと、ボットがコメントしていることに気付くでしょう。
Knativeへの初めてのPRの場合は、CLAに署名済みであることを確認するCLAボットがあります。他のボットは、PRとテストの管理を容易にするためのものです。CLAは一度だけ処理すればよいので、最初にCLAについて説明し、次にPRを管理するためにProwと対話する方法について説明します。
CLA¶
CLAとは何でしょうか?CLAはContributor License Agreement(コントリビューターライセンス契約)の略で、その名前が示すとおりです。これは、コントリビューターであるあなたが、Cloud Native Computing Foundation(CNCF)にさまざまな権利を付与する契約です。**署名する前にご自身で読んで**いただく必要があるため、ここでは契約の内容については詳しく説明しません。ただし、KnativeのようなコミュニティがCLAを必要とする理由の例を説明します。プロジェクトは、含まれるコードのライセンスを再取得したい場合があります。貢献したコードの著作権はあなたが保有しているため、プロジェクトは、貢献したすべての人にライセンスの再取得を希望するかどうかを尋ねる必要がありますが、これは困難な場合があります。CNCF CLAはこちらにあります。
Knativeでは、**貢献を受け入れる前にCLAへの署名が必要**です。そのため、PRがマージされる前に署名する必要があります。CLAには、企業版と個人版の2つのバージョンがあることに注意してください。会社の従業員として貢献している場合は、企業版に署名する必要があります。それ以外の場合は、個人版が適切なバージョンです。CLAに署名するには、CLAボットによってPRに投稿されたコメントの手順に従うだけです。
Prowとの対話¶
Prowは、多くのCNCFプロジェクトでIssueとPRの管理に使用されているKubernetesベースのボットです。Knativeでは、一般的にPRをマージするのはProwであり、他のコントリビューターやメンテナーではありません。マージするPRを決定するために、Prowには一連の基準が与えられます。これらは一般的に、一連のラベルと、必要なテストがすべて合格していることです。Knativeでは、PRのマージに必要な2つのラベルは「lgtm」と「approved」です。誰でもPRに「/lgtm」とコメントすることで「lgtm」を追加できますが、「approved」ラベルを追加できるのは承認者だけです。さらに、「do-not-merge/hold」(「/hold」とコメントすることで追加)または「do-not-merge/work-in-progess」ラベル(ドラフトPRを作成することで取得)がある場合、ボットは変更をマージしません。
PRでテストに合格するには、テストを実行する必要があります。ただし、デフォルトでは実行されません。テストを実行するには、knativeまたはknative-sandbox組織のメンバーが「/ok-to-test」とコメントする必要があります(メンバーでなければならない組織は、リポジトリが属する組織によって異なります)。「/ok-to-test」コマンドは、PRに「ok-to-test」ラベルを追加します。一般的に、PRをレビューする人がこれを行います。しかし、そうでない場合は、なぜそうしないのかをいつでも尋ねることができます。knativeまたはknative-sandbox組織に参加すると、PRにok-to-testラベルを適用する必要がなくなります。prowはテストを自動的に実行します。そのため、何度か貢献したら、組織に参加してください。
前述のように、Issueを自分に割り当てるには、「/assign」とコメントすると、ProwがIssueをあなたに割り当てます。「/assign @username」を実行することもでき、ProwはIssueをユーザー名を持つユーザーに割り当てます。PRでこのコマンドを使用して、特定のユーザーに割り当てることもできます。
PRで必要になる可能性のあることの1つは、テストの1つが失敗し、それが一時的なものだと考えられる場合に、テストを再実行することです。これを行うには、「/retest」とコメントしてすべてのテストを再実行するか、「/retest-required」とコメントして、失敗した必須テストのみを再テストします。
最後に役立つコマンドは「/cc @username」です。これは、ユーザー名を持つユーザーにレビューをリクエストします。このコマンドに複数のユーザーを含めて、一度に複数のレビューをリクエストできます(例:「/cc @user1 @user2」)。
KnativeのProwインスタンスがサポートするすべてのコマンドとその使用方法については、Prowコマンドページをご覧ください。