sagantaf

IT関連の技術記事を書くブログ。

Rancher構築(オンプレ/Ubuntu)

はじめに

前回構築したKubernetesクラスタをRancherにて管理するため、環境を構築していきます。

前回の記事は下記です。

sagantaf.hatenablog.com

環境は、オンプレ、Ubuntuの前提です。



1. Rancherコンテナの構築

まずはRancherを稼働させたいマシンにてRancherコンテナを起動します。

sudo docker run -d --name=rancher --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:v2.2.7

このコマンドだけでコンテナイメージのpullおよびコンテナのrunが実行されます。docker psは下記のようになります。

$ sudo docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                      NAMES
b970f4fed7ca        rancher/rancher:v2.2.7   "entrypoint.sh"          4 seconds ago       Up 1 second         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   rancher

問題なく起動していたら、

http://xxx.xxx.xxx.xxx:80

にアクセスしてみてください。(IPアドレスは自分の環境に合わせて、適宜変更してください)

初回アクセス時には下記のような表示がでる場合があります。

f:id:sagantaf:20191012173226p:plain
HTTPアクセス注意画面


httpsではなくhttpでのアクセスのため「この先のwebページが安全かどうか分かりませんよ」と警告してくれている画面になります。

今回の場合は、自分で立ち上げたRancherのページなので、詳細設定を押して「〜にアクセスをする」を押して先に進んでください。(ブラウザによって少しだけ文言や操作方法が異なります)

なお、KubernetesやRancherを本格的に利用していく場合はhttps化し、セキュアな状態を保つ方が安全に利用できます。


さて続いて、初回アクセス時には、下記のようにadminユーザのパスワードを設定する画面が表示されます。

f:id:sagantaf:20191013101502p:plain
初期パスワード設定画面


任意のパスワードを設定して「Continue」を押すと、次はRancherUIのURLを設定する画面になります。

f:id:sagantaf:20191013101338p:plain
URL設定画面


こちらはデフォルトでマシンのIPアドレスが表示されています。DNSで名前解決できるホスト名などがある場合はその名前を、特に用意していないのであれば、そのままIPアドレスを保存します。

これでようやくRancherのメニュー画面が表示されます。

f:id:sagantaf:20191013102412p:plain
ログイン後の画面


ひとまずRancher自身の設定は完了です。

次にすでに構築済みのKubernetesクラスタをRancher管理下に置く設定をしていきます。


2.既存Kubernetesクラスタの追加

先ほどのメニュー画面から

 Add Cluster > import existing cluster > Create

を選択します。

すると、追加するクラスタの種類を選択する画面になるので、「Import existing cluster」を選びます。

また、cluster name を 「test-cluster」に設定しています。

f:id:sagantaf:20191013101755p:plain
クラスタの種類選択


なおここでは、オンプレ環境のKubernetesクラスタを追加するために、「Import existing cluster」を選びましたが、EKSやGKEを利用している場合は、それに沿ったものを選ぶことで、オンプレにあるRancherからでもクラウドKubernetesリソースを管理することができるようになります。


クラスタの種類を選択し、名前を入力したら、「Create」を押してください。Masterで実行してほしいコマンドが記載されている画面が表示されます。

f:id:sagantaf:20191013102025p:plain
クラスタ追加に必要なコマンド一覧


簡単に要約すると、


1:GCPGoogle Kubernetes Engine(GKE)もしくはcluster_role_bindingを作成していないkubernetes環境をimportする場合は下記のコマンドを実行してClusterRoleを作成してください。

kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user [USER_ACCOUNT]

2:以下のコマンドを既存のクラスタで実行してください。

kubectl apply -f https://xxx.xxx.xxx.xxx/v3/import/jbn7rpx8j72m47fnt95tvxxxxxxxxxxxxxxxxxxxxxxxglnww88.yaml

3:もし上記のコマンドでcertificate signed by unknown authorityというエラーが出たら、代わりに下記のコマンドを実行してください。

curl --insecure -sfL https://xxx.xxx.xxx.xxx/v3/import/jbn7rpx8j72m47fnt95tvxxxxxxxxxxxxxxxxxxxxxxxglnww88.yaml | kubectl apply -f -

と記載されています。(xxxにはご自身の環境に合わせたIPアドレスなどの情報が入ります。以下同様です。)

今回の環境は、Cluster Role Bindingをまだ作成していないため、1番のコマンドから実施していきます。

なお、Cluster Role Bindingがあるかどうかは下記のコマンドで確認できます。

kubectl get clusterrolebinding |grep cluster-admin

1番のコマンドを実行後は下記のように作成されたことを確認できます。

cluster-admin                                          15m
cluster-admin-binding                                  15m

次に、2番のコマンドを実行すると、下記のようなエラーが発生します。

Unable to connect to the server: x509: certificate signed by unknown authority

これは3番に記載がある通りのエラーメッセージですので、そのまま3番のコマンドを実行します。

curl --insecure -sfL https://xxx.xxx.xxx.xxx/v3/import/jbn7rpx8j72m47fnt95tvxxxxxxxxxxxxxxxxxxxxxxxglnww88.yaml | kubectl apply -f -


もし、さらに下記のエラーが出た場合は、KubernetesとRancherのバージョンのミスマッチによるものです。

clusterrole.rbac.authorization.k8s.io/proxy-clusterrole-kubeapiserver created
clusterrolebinding.rbac.authorization.k8s.io/proxy-role-binding-kubernetes-master created
namespace/cattle-system created
serviceaccount/cattle created
clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding created
secret/cattle-credentials-5b6980e created
clusterrole.rbac.authorization.k8s.io/cattle-admin created
unable to recognize "STDIN": no matches for kind "Deployment" in version "extensions/v1beta1"
unable to recognize "STDIN": no matches for kind "DaemonSet" in version "extensions/v1beta1"

下記のページから対応しているKubernetesのバージョンを確認して、入れ直す必要があります。

rancher.com


3番のコマンドがエラーにならずに完了したら、Rancherの画面にてクラスタが”Active”になります。

f:id:sagantaf:20191013102203p:plain
クラスタ追加成功画面


これでKubernetes環境をRancherにて管理できるようになりました。

最後に、RancherからKubernetesのリソースを使ってアプリを起動できるか検証します。


3. アプリケーションの起動検証

ここでは、Rancherのカタログ機能(Kubernetesのmanifestファイルを書くことなくGUIだけでアプリを起動できる機能)を使ってwordpressを立ち上げます。

左上のGlobalから、test-clusterのDefaultに移動します。

f:id:sagantaf:20191013102252p:plain
test-clusterのDefaultプロジェクトに移動


その後、Appsに移動します。ここからRancherで起動させたアプリを確認できます。 今はまだ何も起動していないため、「Launch」のボタンがあるだけになっています。

f:id:sagantaf:20191013101657p:plain
Appsの初期画面


この「Launch」ボタンを押すと提供されているカタログ一覧が表示されます。

右上の検索ボックスに「word」と打てばwordpressだけ表示されるので「View Defaults」を押して、詳細設定に入っていきます。

f:id:sagantaf:20191013102524p:plain
WordPressのカタログを表示


詳細ページでは、冒頭にアプリの説明があり、その後にパラメタ設定ができるようになっています。

f:id:sagantaf:20191013102605p:plain
WordPressの設定ページ1

f:id:sagantaf:20191013102627p:plain
WordPressの設定ページ2


ここでは各パスワードのみ入力し、他はデフォルトの値のまま、Launchします。

Launchすると下のように作成したアプリのステータスが表示されます。バーが緑になれば、問題なく起動が完了したということです。

f:id:sagantaf:20191013233952p:plain
起動後のステータス画面


このステータス画面の「wordpress」部分からアプリの詳細状況(各設定やPod、コンテナのステータスなど)を確認できます。

また、「32171/tcp」 もしくは 「32399/tcp」 のどちらかのリンクから、WordPressの初期画面を確認できると思います。

f:id:sagantaf:20191013234039p:plain
WordPressの表示画面

上記のような画面が表示されたら、OKです。


これで、RancherからKubernetesのリソースを使ってアプリを構築することができました。

Rancherを使うことで、すごく簡単にKubernetes上にアプリケーションを立ち上げることができることが分かったかと思います!


なお、今回はIngressを設定していないため、詳細ページのIngress部分は ”Active” になりません。あくまでIPアドレスとポート番号を指定しないとWordPressのページにアクセスできないので、ご注意ください。

f:id:sagantaf:20191013234121p:plain
IngressがInitializingのまま


アプリが稼働しているネットワークの外部(インターネット)からアクセスしたい場合は、別途Ingressを設定する必要があります。ここでは割愛します。


まとめ

以上がオンプレ環境のUbuntuマシンに構築されているKubernetesクラスタをRancher管理下に置く方法です。

今回はアプリ構築にカタログを使いましたが、そのほかの方法として「Workloads」から「Deploy」を選び、コンテナイメージを指定することでアプリを起動させることも可能です。

コンテナイメージはDockerRegistryやGitLabのRegistryを指定できます。

次は、このGitLabRegistryを指定してアプリを起動する方法を書き残そうと思います。