Knativeとは
サーバーレス機能を提供
k8s上に構築されるが、クラスターに依存せず、サーバーレスなワークロードの実行をする。
k8sの機能を利用しながら簡単にサーバーレスな環境構築ができるいいとこ取り環境
Knative Build
Kubernetesでビルドをする場合の手順
- プログラムはGitHubにpushしておく。
- Dockerfileをbuildしてimageを作成
- それをコンテナ内にCOPYしておく必要があるので、毎回違うイメージが出来る。
- Cloud Registryにdocker push
- kubernetesからデプロイしたいimageを選択できるようにymlを作る
これらを実際に行うには、まずはGoogleCloudBuild、GoogleCloudPipelineなどを用いてCIを設定する必要がある。また、TravisやJenkinsのようなツールでコンテナを構築する必要がある。
Knative Buildでは、
これらの作業を全てKnativeによって行うことができる。
つまり、クラスター内部でBuildを完結させられる。
Knative Serve
ServiceのConfigとRoutingを一括して巻き取ってくれる。
また、マイクロサービスのサービスメッシュで標準的なistioのコンポーネントが組み込まれている。
これによって、マイクロサービスでの、トラフィック管理、ルーティング、オートスケールもしくはゼロスケールをしてくれる。
また、pushを行うと毎回プロビジョンが保管されるため、大規模アップデートにおける段階的なロールアウトやグロースハックにおけるA/Bテストも、Knative Serveを用いて行うことができる。
当然、ロールアップの際にサービスを停止する必要もない。
では、本題のCloudRunとは
上で説明した、Knativeのマネージドサービスである。
Knative から作成されているため、Cloud Run を使用してフルマネージド型でコンテナを実行するか、Cloud Run with GKE を使用して Google Kubernetes Engine クラスタ内でコンテナを実行するかを選択できる。
ここでは、フルマネージド型CloudRunでHTTP リクエスト経由で呼び出し可能なステートレス コンテナを実行する。
何がすごいって、フルマネージドで、サーバーレスなので、インフラ管理なしで、Kubernetesの基本的な機能がつかえるということ。
一瞬でKnative環境を構築する。
[準備]DockerImageを作っておく。
まず、Dockerfileを作成して
https://qiita.com/riita10069/items/7c6d2958294910d346d1
https://qiita.com/riita10069/items/396f1d86cd7ebe21f75b
必要であれば、docker-composeも作成して
https://qiita.com/riita10069/items/5c7eac45486c8fff91fb
GCRにpushする。
ビルド
docker build -t practice:1 .
docker-compose build
Resistory用にタグをつける必要があるので忘れないように
docker tag images:tag gcr.io/$PROJECT_ID/imageの名前:tag
GCRにpushする
gcloud docker --push gcr.io/$PROJECT_ID/imageの名前:tag
CloudRunを設定する。
まず、CloudRunのAPIを有効化して
コンソールで、CloudRunを開く
これのサービスを作成を選択
ここに指定したタグ名を
gcr.io/$PROJECT_ID/imageの名前:tag
って書いてあげて
「作成」をクリックしたらコンテナが完成する