はじめに
年末のアドベントカレンダーは、途中で爆死しましたのぶこふです。
最近、サービスメッシュ関連に携わることが増えてきたので、環境を整えるところを整理していこうと思います。
「まるっと一式」とタイトルに書きましたが、コマンド一発で~とかの話ではないので、ご容赦願います。
サービスメッシュとは?
とか、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 補足説明
今回はここまでです。ありがとうございました。