🛠️

istioをarm64なkubernetesにインストール

2022/01/24に公開

本記事では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

公式ドキュメント

https://istio.io/latest/docs/setup/getting-started/

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しているターミナルとは別のターミナルで下記コマンドを実行します。

istioctlとは別ターミナルにて実行
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
ingressgatewayとegressgatewayのDeployment修正
~~ 省略 ~~
    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