serverless

ローカルでサーバレス環境を構築する(Knative)

はじめに

この記事は ローカルでkubernetes環境を構築する(kubeadm)でkubernetes環境(以下、k8s) を作成した人向けです。

開発環境

Ubuntu 18.04

手順

まず、コントロールプレーンノードでポッドをスケジュールするため以下を実行します。

kubectl taint nodes --all node-role.kubernetes.io/master-

この作業がないとhelmのtiller pod がpendingのまま動きません。
次にhelmをインストールし、初期化します。

sudo snap install helm --classic
helm init --history-max 200

tiller pod が作成されたはずなので見てみます。

追記:
helmが更新されたため、この方法だと以下の作業ができなくなりました。最新バージョンではなく以下の方法でインストールしてください。
snap install --channel=2.16 helm --classic

kubectl get po -n kube-system

tiller-deploy-〜のpodがあれば正常です。pod の状態はPending -> ContainerCreating -> RunningとなるのでRunningするまで待ちます。

次にistioをインストールします。istioとはマイクロサービスを管理するOSSです。

export ISTIO_VERSION=1.1.7
curl -L https://git.io/getLatestIstio | sh -
cd istio-${ISTIO_VERSION}
for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done

cat <<EOF | kubectl apply -f -
   apiVersion: v1
   kind: Namespace
   metadata:
     name: istio-system
     labels:
       istio-injection: disabled
EOF

# A lighter template, with just pilot/gateway.
# Based on install/kubernetes/helm/istio/values-istio-minimal.yaml
helm template --namespace=istio-system \
  --set prometheus.enabled=false \
  --set mixer.enabled=false \
  --set mixer.policy.enabled=false \
  --set mixer.telemetry.enabled=false \
  `# Pilot does not need a sidecar.`\
  --set pilot.sidecar=false \
  --set pilot.resources.requests.memory=128Mi \
  `# Disable galley (and things requiring galley).` \
  --set galley.enabled=false \
  --set global.useMCP=false \
  `# Disable security / policy.` \
  --set security.enabled=false \
  --set global.disablePolicyChecks=true \
  `# Disable sidecar injection.` \
  --set sidecarInjectorWebhook.enabled=false \
  --set global.proxy.autoInject=disabled \
  --set global.omitSidecarInjectorConfigMap=true \
  `# Set gateway pods to 1 to sidestep eventual consistency / readiness problems.` \
  --set gateways.istio-ingressgateway.autoscaleMin=1 \
  --set gateways.istio-ingressgateway.autoscaleMax=1 \
  `# Set pilot trace sampling to 100%` \
  --set pilot.traceSampling=100 \
  install/kubernetes/helm/istio \
  > ./istio-lean.yaml

kubectl apply -f istio-lean.yaml

# from https://github.com/helm/helm/issues/4181
kubectl taint nodes --all node-role.kubernetes.io/master-

# Add the extra gateway.
helm template --namespace=istio-system \
  --set gateways.custom-gateway.autoscaleMin=1 \
  --set gateways.custom-gateway.autoscaleMax=1 \
  --set gateways.custom-gateway.cpu.targetAverageUtilization=60 \
  --set gateways.custom-gateway.labels.app='cluster-local-gateway' \
  --set gateways.custom-gateway.labels.istio='cluster-local-gateway' \
  --set gateways.custom-gateway.type='ClusterIP' \
  --set gateways.istio-ingressgateway.enabled=false \
  --set gateways.istio-egressgateway.enabled=false \
  --set gateways.istio-ilbgateway.enabled=false \
  install/kubernetes/helm/istio \
  -f install/kubernetes/helm/istio/example-values/values-istio-gateways.yaml \
  | sed -e "s/custom-gateway/cluster-local-gateway/g" -e "s/customgateway/clusterlocalgateway/g" \
  > ./istio-local-gateway.yaml

kubectl apply -f istio-local-gateway.yaml

Knativeをインストールします。

kubectl apply --selector knative.dev/crd-install=true \
   --filename https://github.com/knative/serving/releases/download/v0.9.0/serving.yaml \
   --filename https://github.com/knative/eventing/releases/download/v0.9.0/release.yaml \
   --filename https://github.com/knative/serving/releases/download/v0.9.0/monitoring.yaml

kubectl apply --filename https://github.com/knative/serving/releases/download/v0.9.0/serving.yaml \
   --filename https://github.com/knative/eventing/releases/download/v0.9.0/release.yaml \
   --filename https://github.com/knative/serving/releases/download/v0.9.0/monitoring.yaml

すべてのpodがRunningしたら完了です。
以下のコマンドで確認してください。

kubectl get po -A

お疲れ様でした。

参考文献

kube-system tiller-deploy-f9b8476d-zkln4 always pending by failed scheduling · Issue #4181 · helm/helm
how to fix this? Output of helm version: Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710",...
https://knative.dev/docs/install/knative-with-any-k8s/
そーたの技術ブログ

コメント

タイトルとURLをコピーしました