本ワークショップでは基本的にGCPを利用します。Google Cloud Shell上でコマンドを実行し、Google Kubernetes Engine(GKE)上にKubernetesクラスタを準備します。
ローカル環境のターミナルからローカル環境にKubernetesクラスタを構築することももちろん可能です。しかし、本ワークショップでは準備を容易にし、Knativeを学ぶことに一層集中していただくためにCloud ShellとGKEの利用を推奨します。
つぎの環境を準備していきます。
- Google Cloud Platform(GCP)アカウント
- GCPプロジェクト
- Google Cloud Shell
- GKEプロジェクト
- Google Container Registry(GCR)
- Kubernetesクラスタ
- Knative
- Tekton
これまで一度もGCPを有料で利用したことがない方や無料トライアルに登録したことがない方は無料トライアルを利用することができます。次のURLで利用条件をご確認の上Googleアカウントでログインし、登録してください。身元確認用のクレジットカード番号か銀行口座情報が必要です。
https://cloud.google.com/free/docs/frequently-asked-questions?hl=ja
すでに登録済みのアカウントがある場合はそのアカウントをご利用ください。
GKEでKubernetesクラスタを構築するプロジェクトを作成します。本ワークショップ用に利用できるプロジェクトがすでにある場合はスキップして大丈夫です。
ダッシュボードで作成をクリックしてください。
新しいプロジェクトの任意のプロジェクト名を入力し、作成をクリックしてください。
この例ではknative-toshi0607という名前で作成します。
作成したプロジェクトを選択してください。
以後Cloud Shellで作業を進めます。
Cloud Shellをアクティブにしてください。
Cloud ShellではすでにGoogle Cloud SDKやDockerが準備されています。
新しいウィンドウで開くをクリックし、十分な作業スペースを確保してください。
まず利用する環境変数をセットしてください。
# 先ほど作成したGCPプロジェクトのID
export PROJECT_ID=knative-toshi0607
# なんでもいいです
export CLUSTER_NAME=knative
#
export CLUSTER_ZONE=asia-northeast1-c
つぎのコマンドを実行してデフォルトのGCPプロジェクトIDをセットしてください。
$ gcloud config set project $PROJECT_ID
つぎのコマンドを実行してGKEとGCRを有効化してください。
$ gcloud services enable \
cloudapis.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com
つぎのコマンドを実行してKubernetesクラスタを作成してください。
$ gcloud beta container clusters create $CLUSTER_NAME \
--addons=HorizontalPodAutoscaling,HttpLoadBalancing,Istio \
--machine-type=n1-standard-2 \
--cluster-version=latest --zone=$CLUSTER_ZONE \
--enable-stackdriver-kubernetes --enable-ip-alias \
--enable-autoscaling --min-nodes=1 --max-nodes=5 \
--enable-autorepair \
--scopes cloud-platform
作成には少し時間がかかります。つぎのURLから作成状況が確認できます。
https://console.cloud.google.com/kubernetes/list
つぎのコマンドを実行して現在のユーザーにcluster-adminロールを付与してください。
$ kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole=cluster-admin \
--user=$(gcloud config get-value core/account)
つぎのコマンドを実行してノードの準備ができていることを確認してください。
$ kubectl get nodes
正常に作成が完了していれば3ノードのステータスがReadyになっているはずです。
つぎのコマンドを実行してKnativeをインストールしてください。似た別オプションのコマンドを2回実行するので注意してください。
$ kubectl apply --selector knative.dev/crd-install=true \
--filename https://github.com/knative/serving/releases/download/v0.10.0/serving.yaml \
--filename https://github.com/knative/eventing/releases/download/v0.10.0/release.yaml \
--filename https://github.com/knative/serving/releases/download/v0.10.0/monitoring.yaml
$ kubectl apply --filename https://github.com/knative/serving/releases/download/v0.10.0/serving.yaml \
--filename https://github.com/knative/eventing/releases/download/v0.10.0/release.yaml \
--filename https://github.com/knative/serving/releases/download/v0.10.0/monitoring.yaml
つぎのコマンドを実行して確認ステータスを確認してください。すべてのPodのStatusがRunningになれば設定完了です。
$ kubectl get pods --namespace knative-serving
$ kubectl get pods --namespace knative-eventing
$ kubectl get pods --namespace knative-monitoring
EventingでKnativeのServiceをsinkに指定する場合は現状追加でセットアップが必要です。本ワークショップをEventing含めて実施する場合はつぎのコマンドを実行してください。
$ kubectl apply -f https://raw.githubusercontent.com/knative/serving/release-0.10/third_party/istio-1.2.7/istio-knative-extras.yaml
# Istioのバージョン確認
# $ kubectl get pod -n istio-system
# istio-ingressgateway-f659695c4-sssrs
# $ kubectl get pod istio-ingressgateway-f659695c4-sssrs -n istio-system -oyaml | grep image
# image: gke.gcr.io/istio/proxyv2:1.1.16-gke.0
# => OK: 1.2.7, NG: 1.3.3
cf. issue#1973
つぎのコマンドを実行してTektonをインストールしてください。
$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/latest/release.yaml
つぎのコマンドを実行して確認ステータスを確認してください。すべてのPodのStatusがRunningになれば設定完了です。
$ kubectl get pods --namespace tekton-pipelines
以上で環境構築は終わりです。