SREチームのNagaoです。
こちらの投稿はOisix ra daichi Inc. Advent Calendar 2018の21日目の記事です。
先日Rancher JP Meetup in Seattleに参加してきて、急激にRancher熱が高まっているのですが、まったくのド素人なので、この場を借りて入門していきたいとおもいます。
なぜRancher熱が高まっているのか?
オイシックスがkubernetesを使い始めてからずっとクラウド間のレイテンシと向き合っているのですが、どうしてもレイテンシ問題が解決できないケースも今後は出てくるのではないかと考えています。そういったときに既存システムと近い場所にkubernetesを構築する手段としてRancherに期待しています。
また、現在本番環境として「Azure Kubernetes Service」を使っているのですが、クラスタ自体を複数管理する必要がでています。
今後はマルチクラウド/オンプレミス環境でのkubernetes運用も見据えているため、マルチクラスタ管理する方法としてRancherを検討しています。
というわけで以下試した手順です。
1. Rancher環境の準備
本番運用するにはRancher自体をHA構成にしない厳しそうだなと思っていて、少し調べてみたらkubernetes上にRancherを配置する構成をとれるようです。
https://rancher.com/docs/rancher/v2.x/en/installation/ha/
ただ、今回はさっくり入門してみたいので、以下を参考に簡単に作成してみました。
https://rancher.com/docs/rancher/v2.x/en/quick-start-guide/deployment/quickstart-manual-setup/
VMを立ち上げる
VMの作成部分は省略 $ cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
Dockerのインストール
$ sudo yum -y install docker $ sudo systemctl enable docker $ sudo systemctl start docker
Rancherの起動
$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
確認
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bef08c1e52af rancher/rancher "entrypoint.sh" 56 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp kind_heisenberg
2. ServicePrincepalの作成
RancherからAzureを操作するためのServicePrincepalをつくっておく
azure-cliのインストール
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e "[azure-cli]\nname=Azure CLI\nbaseurl=https://packages.microsoft.com/yumrepos/azure-cli\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/azure-cli.repo' sudo yum install azure-cli
Azureにログイン
$ az login
サービスプリンシパルを作る
$ az ad app create --display-name "Rancher" --password "client-secret_XXXXXX" --identifier-uris "https://www.oisixradaichi.co.jp" { ..... "acceptMappedClaims": null, "addIns": [], "appId": "client-id_XXXXXX", ..... } $ az ad sp create --id client-id_XXXXXX { ..... "objectId": "sp_XXXXXX", "objectType": "ServicePrincipal", ..... }
ロールをあてる
$ az role assignment create --assignee sp_XXXXXX --role Contributor
アカウント情報確認
$ az account list [ { "cloudName": "AzureCloud", "id": "subscription-id_XXXXXX", "isDefault": true, "name": "xxxxxxxxx", "state": "Enabled", "tenantId": "tenant-id_XXXXXX", "user": { "name": "xxxxxx@outlook.com", "type": "user" } } ]
3. kubectlのインストール
以下を参考にインストールしておく
https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl
4. SSH鍵をつくる
$ ssh-keygen -t rsa
5. Rancherログイン
ブラウザで接続。和む。
https://ServerIP
6. AKSクラスタ作成
クラスタ作成画面からAzureを選択する。
先ほど作成したAzureの情報を入力する。
ノードの設定を決める。
SSH Public Keyはさっき作ったのを貼り付ける。
$cat ~/.ssh/id_rsa.pub
createをクリックするとAKSの構築が始まる。
Azureポータルをのぞいて見ると作成が進んでいるのがみえてたのしい。
ちょっとまってると出来上がる
7. 接続確認
「Kubeconfig File」を~/.kube/configに保存して接続確認してみる
$ kubectl get nodes NAME STATUS ROLES AGE VERSION aks-rancher-44262757-0 Ready agent 25m v1.11.5 aks-rancher-44262757-1 Ready agent 25m v1.11.5 aks-rancher-44262757-2 Ready agent 25m v1.11.5
問題なし。
まとめ
- Rancherを動かすのはとても簡単
- 既存のkubernetesクラスタを管理下に置く場合や、AKSのオプションを色々追加したい場合は、IMPORT使うとよさそう(次回検証)
- セキュリティ周りをRancherで制御する方法を引き続き調査する