概要
macOS 上で動作する minikube へ istio 1.0.5 をインストールした後、Automatic sidecar injection
を試してみました。istio のインストール作業において色々とハマりポイントがあったので、健忘録を兼ねて書きます。
検証環境
-
macOS - High Sierra 10.13.6
-
minikube - v0.32.0
-
kubectl - 1.13.1
-
helm - 2.11.0
minikube の起動
minimal istio install を行うだけであれば、メモリーを 8 MB、CPU を4つを割り当てて minikube を起動するだけで問題ありません。しかしながら、Automatic sidecar injection
を試したい場合、これだけでは不十分です。
まず、公式ドキュメントの起動コマンドは次の通りです。
$ minikube start --memory=8192 --cpus=4 --kubernetes-version=v1.10.0 \
--extra-config=controller-manager.cluster-signing-cert-file="/var/lib/localkube/certs/ca.crt" \
--extra-config=controller-manager.cluster-signing-key-file="/var/lib/localkube/certs/ca.key" \
--vm-driver=`your_vm_driver_choice`
このコマンドでは仮想マシンに存在する証明書と鍵のパスが誤っているため、istio の Pod が起動しません。issue でもこのことは報告されているようです。
自身の仮想マシンへ minikube ssh
でログインして証明書と鍵のパスを確認する必要があります。私の場合は /var/lib/minikube/certs
配下にありました。したがって、起動コマンド配下のようになります。
$ minikube start --memory=8192 --cpus=4 --kubernetes-version=v1.10.0 \
--extra-config=controller-manager.cluster-signing-cert-file="/var/lib/minikube/certs/ca.crt" \
--extra-config=controller-manager.cluster-signing-key-file="/var/lib/minikube/certs/ca.key" \
--vm-driver=`your_vm_driver_choice`
istio のインストール
Downloading the Releaseに従い、次のコマンドにて istio をダウンロードします。
$ curl -L https://git.io/getLatestIstio | sh -
次に minimal istio install を参考にコマンドを実行していきます。
$ kubectl apply -f istio-1.0.5/install/kubernetes/helm/istio/templates/crds.yaml
今回は Automatic sidecar injection
を試したいので helm によるマニフェストのレンダリングは以下のように設定しました。
$ helm template istio-1.0.5/install/kubernetes/helm/istio --name istio --namespace istio-system \
--set security.enabled=false \
--set ingress.enabled=false \
--set gateways.istio-ingressgateway.enabled=false \
--set gateways.istio-egressgateway.enabled=false \
--set galley.enabled=false \
--set mixer.enabled=false \
--set prometheus.enabled=false \
--set global.proxy.envoyStatsd.enabled=false \
--set pilot.sidecar=false | kubectl apply -f -
しかし、このコマンドではいつまでたっても istio-sidecar-injector
の Pod が動きません・・・
issue のコメントに原因らしき事が記載されていました。コメントの通り、 --set security.enabled=false
のオプションを外してみます。
$ helm template istio-1.0.5/install/kubernetes/helm/istio --name istio --namespace istio-system \
--set ingress.enabled=false \
--set gateways.istio-ingressgateway.enabled=false \
--set gateways.istio-egressgateway.enabled=false \
--set galley.enabled=false \
--set mixer.enabled=false \
--set prometheus.enabled=false \
--set global.proxy.envoyStatsd.enabled=false \
--set pilot.sidecar=false | kubectl apply -f -
自分の環境では Pod の作成に時間がかかりました。おおよそ 5分後に確認すると・・・
$ kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
istio-citadel-cb5b884db-2pvhl 1/1 Running 0 6m
istio-cleanup-secrets-dgrlx 0/1 Completed 0 6m
istio-pilot-8668c69c84-lx2p7 1/1 Running 0 32m
istio-security-post-install-mkg4c 0/1 Completed 0 6m
istio-sidecar-injector-7f4c7db98c-bqfgp 1/1 Running 0 32m
istio の動作に必要な Pod が作成されました。
Automatic sidecar injection を試してみる。
ドキュメントに従い、サンプルのマニフェストを用いて istio-proxy をインジェクションしてみます。
$ kubectl label namespace sandbox istio-injection=enabled
namespace/sandbox labeled
$ kubectl get namespace -L istio-injection
NAME STATUS AGE ISTIO-INJECTION
default Active 39m
istio-system Active 37m
kube-public Active 39m
kube-system Active 39m
sandbox Active 37m enabled
$ kubectl apply -f ./istio-1.0.5/samples/sleep/sleep.yaml
service/sleep created
deployment.extensions/sleep created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleep-79cc87b6b9-t7rlp 2/2 Running 0 2m
コンテナの数が2つになっています。無事、istio-proxy がインジェクションされました。