istioをarm64なkubernetesにインストール
本記事ではarm64アーキテクチャのKubernetesクラスタに
istioをインストールする方法を書いていきます。
執筆時点(2022/01/24)では公式のarm64対応はされていないため
非公式のイメージを使用する事に注意してください。
検証環境はOracleCloudのA1.Flexインスタンス(arm64)ですが
RaspberryPi3以降でも動作するかもしれません(未確認)。
バージョン
検証時のソフトウェアバージョンは下記です。
- OS: Ubuntu 20.04
- kubernetes: k3s version v1.22.5+k3s1
- istio: 1.12.2
- istioctl: 1.12.2
公式ドキュメント
istioctlインストール
istioをインストールする方法は複数ありますが今回はistioctlを使用してみます。
istioctlのインストールはこコマンド1行なので楽ちんです。
curl -L https://istio.io/downloadIstio | sh -
istioをkubernetesにインストール(通常手順)
※このコマンドはarm64環境ではpodの起動が失敗します。
一応参考程度に記載しておきます。
istioctl install --set profile=demo
istioをarm64なkubernetesにインストール
istioiのイメージをプルするリポジトリを--set
で変更してインストールします。
インストール中に別ターミナルでの操作が必要なので、事前に立ち上げておくのが吉です。
istioctl install --set hub=docker.io/querycapistio --set profile=demo -y
※インストール途中でingressgatewayとegressgatewayのデプロイが失敗するため、下記コマンドでスケールを変更します。
✔ Istio core installed
✔ Istiod installed
- Processing resources for Egress gateways, Ingress gateways. Waiting for Deployment...
istioctl install
しているターミナルとは別のターミナルで下記コマンドを実行します。
kubectl scale deployment --replicas=0 istio-ingressgateway -n istio-system
kubectl scale deployment --replicas=0 istio-egressgateway -n istio-system
ingressgatewayとegressgatewayのDeployment修正
ingressgatewayとegressgatewayのdeploymentに
arm64のaffinityが記載されていないので追記します。
kubectl edit deployment
コマンドを実行するとエディタ(vim)が表示されます。
# ingressgatewayのDeployment修正
kubectl edit deployment istio-ingressgateway -n istio-system
# egressgatewayのDeployment修正
kubectl edit deployment istio-egressgateway -n istio-system
~~ 省略 ~~
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
+ - arm64
- amd64
~~ 省略 ~~
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
+ - arm64
- amd64
- ppc64le
- s390x
~~ 省略 ~~
追記後に:wq
で保存するとdeploymentが更新されます。
ingressgatewayとegressgatewayを再デプロイ
修正したdeploymentを早速デプロイしてみましょう。
kubectl scale deployment --replicas=1
でスケールを変更すれば
すぐにデプロイされます。
kubectl scale deployment --replicas=1 istio-ingressgateway -n istio-system
kubectl scale deployment --replicas=1 istio-egressgateway -n istio-system
下記状態になればOKです。
$ kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
istio-egressgateway-56d94d6959-5lnkg 1/1 Running 0 10s
istio-ingressgateway-79d6fbd6df-245z2 1/1 Running 0 2m4s
istiod-87f4dbcb7-mcgj8 1/1 Running 1 (17m ago) 17m
svclb-istio-ingressgateway-7475r 5/5 Running 0 17m
svclb-istio-ingressgateway-lkzcw 5/5 Running 0 17m
svclb-istio-ingressgateway-n8ds5 5/5 Running 0 17m
svclb-istio-ingressgateway-nzt4c 5/5 Running 0 17m
svclb-istio-ingressgateway-zg66r 5/5 Running 0 17m
svclb-istio-ingressgateway-zr6bh 5/5 Running 0 17m
プラグインインストール
以下は必須ではないですが、保守性向上のため導入しておくことをお勧めします。
kialiインストール
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.12/samples/addons/kiali.yaml
prometheusプラグインインストール
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.12/samples/addons/prometheus.yaml
istioアンインストール
istioが必要なくなったら下記コマンドでアンインストールしましょう。
きれいサッパリ消え去ります。
istioctl x uninstall --purge
kubectl delete namespace istio-system
#kialiをインストールした場合
kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.12/samples/addons/kiali.yaml
# prometheusプラグインをインストールした場合
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.12/samples/addons/prometheus.yaml
おわりに
ここではistioのインストールまでを行いました。
kubernetesはデプロイが楽でイイですね。
kubernetesアーキテクチャの全体的な理解が大変ですが…
まだまだkubernetesを学習中なので、どんどん活用しつつ記事を書いていこうと思います。
Discussion