3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OCI(Always Free)上に、サービスメッシュ(Istio)の動作環境をまるっと一式構築する

Posted at

はじめに

年末のアドベントカレンダーは、途中で爆死しましたのぶこふです。
最近、サービスメッシュ関連に携わることが増えてきたので、環境を整えるところを整理していこうと思います。

「まるっと一式」とタイトルに書きましたが、コマンド一発で~とかの話ではないので、ご容赦願います。

サービスメッシュとは?

とか、Istioとは?とか、OCIとは?とかは、Web上にたくさん情報があるので割愛します。

何をやるのさ?

  • 対象読者
    • サービスメッシュ(Istio)を触りたいけど、環境構築とかどうすんねん?と言う人
  • やること
    • 環境構築まで
    • ※ただし、OCIの申し込みなどは割愛します。動作環境はAWSのEC2とかでも良いと思います。そこらへんはお好みで、適宜読み替えてください。
  • 構成
    • OCI上に、Minikube(K8s)を動かして、Isitoの動作を確認する

※お財布の都合上、Minikube を使用しています。
 本番環境とかでは、EKSとかGKEとか使うのが良いと思います。きっと。

バージョンとか

name versionとか
Client Windows11、Terminal(Ubuntu)からSSH
Server OCI(Oracle Cloud Infrastructure) Always Free、Region:Osaka
OCI(Image) Oracle-Linux-8.5-aarch64-2021.12.14-0※
OCI(Shape) VM.Standard.A1.Flex
OCI(OCPU、Mem) 4core、24GB
minikube 1.25.1
Docker 20.10.12
Kubernetes 1.22.0
Istio 1.12.2

※Armプロセッサのaarch64を使ってますが、Istioさんはどうやら非対応らしい。ので、少しハマりました。

やるよ

対象サーバ(インスタンス)を起動する

OCIなら、「コンピュート>インスタンス>インスタンスの詳細」で「起動」を押せばOK。

TerminalからSSH

ssh -i <secret-key-path> opc@<public-IP-address>

※そう言えば、OCIはPublicIPって固定されてるのかな?AWSだとElasticIPが必要だったりするけど・・・

Docker

インストール

Oracle Linuxなので、こちらを参照。
※Oracle Linux 6/7 をサポートって書いてあるんだが・・・8は対象外なのか
https://docs.docker.jp/engine/installation/linux/oracle.html

ということで、こちらを参照。(日本語に訳すと、URL等に全角文字が混ざるので、英語のママを推奨)
https://oracle-base.com/articles/linux/docker-install-docker-on-oracle-linux-ol8

sudo dnf install -y dnf-utils zip unzip
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

sudo dnf remove -y runc
sudo dnf install -y docker-ce --nobest

Docker 有効化

systemctl enable docker.service
sudo systemctl start docker.service

Docker 確認

$ sudo docker version
Client: Docker Engine - Community
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.16.12
 Git commit:        e91ed57
 Built:             Mon Dec 13 11:44:33 2021
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.12
  Git commit:       459d0df
  Built:            Mon Dec 13 11:43:14 2021
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

一般ユーザだけど、sudo無しでDockerコマンドを使う(オプション)

「毎回sudoつけても気にならないですよ」とか「そもそもRoot権限でやってるし」という方は、対応不要。

こちらを参照。
https://insilico-notebook.com/docker-run-without-sudo/

すでにDockerグループは出来ているので、作成は不要。
現在の実行ユーザをグループに追加するなら、下記コマンドでOK。

sudo usermod -aG docker $USER
newgrp docker

# 確認
docker info

Minikube

インストール

aarm64なので、ARM64です。
https://minikube.sigs.k8s.io/docs/start/

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64
sudo install minikube-linux-arm64 /usr/local/bin/minikube

Minikubeの起動

ドライバーは「Docker」を設定しておきます
Istio v1.12 が対応している Kubernetesのバージョンは、1.19~1.22なので、指定しておきます。
https://istio.io/latest/docs/releases/supported-releases/#support-status-of-istio-releases

minikube start --driver=docker --kubernetes-version=v1.22.0

起動確認

$ minikube status
  minikube
  type: Control Plane
  host: Running
  kubelet: Running
  apiserver: Running
  kubeconfig: Configured

Minikube のデフォルト値を設定

参考
https://qiita.com/loftkun/items/7400d5ae0e7b1fb7d26e

おっと、忘れちゃいけないことが一つありました。

Minikubeさんは、デフォルトのメモリ・CPUの割当てが貧弱(2core,2BG)なので、設定してあげます。
下記のコマンドでは、4core、20GBに設定しています。
なお、変更後はminikube deleteが必要になります。
※起動時に、オプションで渡しても問題なしです(後述)

# 4core、20GBに設定
minikube config set cpus 4
minikube config set memory 20480

# 設定の確認
minikube config view
- driver: docker
- memory: 20480
- cpus: 4

# 削除します
minikube delete
# 起動します(ConfigでDriverの設定をしてあるので、オプションは不要)
minikube start --kubernetes-version=v1.22.0

オプションで渡す場合

minikube start --memory=20480 --cpus=4 --kubernetes-version=v1.20.2

エイリアスの設定(オプション)

これまでの流れを見ているならご存知だと思いますが、現在「kubectl」を入れてません。
じゃあ、どうやって触るのか?という話ですが、結論から書けば、下記のようにすればコマンドは打てます。

minikube kubectl -- #コマンド
# 例
minikube kubectl -- get po -A

ただでさえ、kubectlとぼちぼち長いコマンドを打っているのに、「minikube」とか「--」とか付けてらんないですよね。
ということで、エイリアスの設定。
「kubectl」に合わせて「kubectl」でも良いですし、OpenShiftに対抗して「k」とかでも良いと思います。
お好みで設定してください。とりあえず、本記事では無難に「kubectl」としておきます。

# alias一覧
alias

# aliasを設定する
alias kubectl="minikube kubectl --"

# aliasを解除する
unalias kubectl

動作確認(オプション)

動かしてみたい方は、Kubernetesのクイックスタートを参照
https://kubernetes.io/ja/docs/setup/learning-environment/minikube/#クイックスタート

Istio

公式を参照・・・
https://istio.io/latest/docs/setup/getting-started/#download

と、思いましたが、Istioはarm64(=aarch64)環境では非対応なのですね・・・
下記サイトを参考にさせていただきました(本当に助かりました)。
https://zenn.dev/tkoyama/articles/c49b35c32e4923

Istioはarm64(=aarch64)環境では非対応のため、非公式のイメージを使用しています。

istioctlインストール

curl -L https://istio.io/downloadIstio | sh -

istioインストール

# 通常版(arm64では失敗するので実施しません)
istioctl install --set profile=demo

インストール途中でScaleが必要になるので、別ターミナルを開いておく。

# arm64版
# Terminal-A
$ istioctl install --set hub=docker.io/querycapistio --set profile=demo -y
✔ Istio core installed                                                                 
✔ Istiod installed    
- Processing resources for Egress gateways, Ingress gateways. Waiting for Deployment...

# Terminal-B
$ kubectl scale deployment --replicas=0 istio-ingressgateway -n istio-system
$ kubectl scale deployment --replicas=0 istio-egressgateway -n istio-system

# Terminal-A
$ istioctl install --set hub=docker.io/querycapistio --set profile=demo -y
✔ Istio core installed
✔ Istiod installed # 下記が通った!!
✔ Ingress gateways installed
✔ Egress gateways installed
✔ Installation complete
Making this installation the default for injection and validation.

Thank you for installing Istio 1.12.  Please take a few minutes to tell us about your install/upgrade experience! 

ingressgatewayとegressgatewayのDeployment修正

# ingressgatewayのDeployment修正
kubectl edit deployment istio-ingressgateway -n istio-system

# egressgatewayのDeployment修正
kubectl edit deployment istio-egressgateway -n istio-system

ingressgatewayとegressgatewayを再デプロイ

kubectl scale deployment --replicas=1 istio-ingressgateway -n istio-system
kubectl scale deployment --replicas=1 istio-egressgateway -n istio-system

確認

kubectl get pods -n istio-system

おまけ

Kialiインストール

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.12/samples/addons/kiali.yaml

おわりに

ということで、Istioのインストールまで完了しました。
これで動かせる環境(しかも「無料!」)を手に入れたので、色々と触っていこうと思います。

Blockchainの時もそうでしたが、Oracleさんは太っ腹に提供してくれるので、とてもありがたいです。
Blockchainの時の記事

完全な余談ですが、:::で囲むと、InfoとかWarnとかの記載が出来るのですねー。
今回はWarnをつかってみました。
Markdown記法 チートシートーNote 補足説明

今回はここまでです。ありがとうございました。

3
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?