シングルノードにkubernetesとRancher 2.0を導入して、コンテナ管理してみた
背景
小さい構成でも、kubernetesとRancher 2.0を使ってコンテナの管理をしたいと思い、導入してみました。
構成情報
- クラウド環境:Azure
- VMサイズ:Standard A2 v2 (2 vcpu 数、4 GB メモリ)
- OS:CentOS Linux release 7.5.1804 (Core)
- docker:17.03.1-ce
- Rancher:v2.1.1
以下、Rancher 2.0の公式ページにある要件一覧です。適宜参照してください。
https://rancher.com/docs/rke/v0.1.x/en/os/
手順
- 仮想マシンの準備、初期設定
- RKEによる、Kubernetesのインストール
- Rancher 2.0の導入
- Rancherへの既存kubernetesクラスタの認識
1. 仮想マシンの準備、初期設定
仮想マシンの作成
Standard A1 v2 (1 vcpu 数、4 GB メモリ)だと、CPUの性能不足でRancherが再起動を繰り返しました。Standard A2 v2 (2 vcpu 数、4 GB メモリ)だと問題ありませんでした。
セキュリティ設定
今回は手順を簡略化するため、SELinux、iptalbes、firewalldを停止しておきます。
$ getenforce
Disabled
$ systemctl status iptables
Unit iptables.service could not be found.
$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
Dockerのインストール
以下のRancherの公式ページを参照して、要件にあったバージョンのdockerを導入してください。インストール手順は省きます。
https://rancher.com/docs/rke/v0.1.x/en/os/
$ docker version
Client:
Version: 17.03.1-ce
API version: 1.27
Go version: go1.7.5
Git commit: c6d412e
Built: Mon Mar 27 17:05:44 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.1-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.7.5
Git commit: c6d412e
Built: Mon Mar 27 17:05:44 2017
OS/Arch: linux/amd64
Experimental: false
公開鍵認証の設定
RKEでkubernetesをインストールする際に、ノードへのアクセスを公開鍵認証で行うため、設定を行います。
手順は省略しますが、以下を参考にしてください。
- ssh公開鍵認証設定まとめ:https://qiita.com/ir-yk/items/af8550fea92b5c5f7fca
- 公開鍵認証を設定してsshで接続する:https://qiita.com/Yuta_Fujiwara/items/827ea0a9b37d20941c51
2. RKEによる、Kubernetesのインストール
RKEとは
Rancher Kubernetes Engine(RKE)は、軽量のKubernetesインストーラで、ベアメタルおよび仮想化サーバーへのインストールをサポートします。
導入要件の確認
以下の公式ページで、要件を満たしていることを確認します。
https://rancher.com/docs/rke/v0.1.x/en/os/
RKEのインストール
-
RKEのバイナリファイルをダウンロードします( https://github.com/rancher/rke/releases )。バイナリファイルを $PATH にあるフォルダにおいて、名前をrkeに変更します。
$ mv rke_linux-amd64 rke
-
RKEを実行できるように、権限を変更します。
$ chmod +x rke
-
RKEが実行可能なことを確認します。
$ rke --version rke version v0.1.11
-
cluster.ymlの準備
RKEはcluster.ymlと呼ばれるクラスタ構成ファイルを使用して、クラスタ内のノードとKubernetesの展開方法を決定します。cluster.ymlを作成するのに以下の2つの方法が用意されています。今回は、サンプルを使って最小限のcluster.ymlを作成します。
- 最小限のサンプルを元に、自分で作成する。( https://rancher.com/docs/rke/v0.1.x/en/example-yamls/#minimal-cluster-yml-example )
- rke config コマンドを利用する
cluster.ymlnodes: - address: <サーバIP> # ノードのIPアドレス user: <ユーザ名> # ログインユーザ role: - controlplane # 今回はオールインワンなので、すべての役割を追加 - etcd - worker ssh_key_path: ~/.ssh/id_rsa # 秘密鍵のフォルダパス ingress: provider: nginx # ingressサービスの設定(ロードバランサ)
-
kubernetes clusterのデプロイ
cluster.ymlを作成したら、以下の簡単なコマンドでclusterをデプロイ可能です。
$ rke up INFO[0000] Building Kubernetes cluster INFO[0000] [dialer] Setup tunnel for host [10.0.0.1] INFO[0000] [network] Deploying port listener containers INFO[0000] [network] Pulling image [alpine:latest] on host [10.0.0.1] ... INFO[0101] Finished building Kubernetes cluster successfully
最後の行に、Finished building Kubernetes cluster successfully が表示されたら準備完了です。
注意
- dockerコマンドを実行できるユーザでログインする必要あり。
- ログインユーザをdockerグループに追加しておく。
- dockerコマンドを実行できるユーザでログインする必要あり。
-
kubectlのインストール
kubenertesクラスタを操作するために、kubectlをインストールします( https://kubernetes.io/docs/tasks/tools/install-kubectl/ )
$ sudo cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF $ sudo yum install -y kubectl $
kubectlが正常にインストールできていることを確認します。また、
docker ps
コマンドを実行すると、kubernetes関連のコンテナが起動していることが確認できます。$ kubectl version Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.2", GitCommit:"17c77c7898218073f14c8d573582e8d2313dc740", GitTreeState:"clean", BuildDate:"2018-10-24T06:54:59Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"} The connection to the server localhost:8080 was refused - did you specify the right host or port? $ $ kubectl --kubeconfig kube_config_cluster.yml get nodes NAME STATUS ROLES AGE VERSION XXX.XXX.XXX.XXX Ready controlplane,etcd,worker 5m v1.11.3 $
3. Rancher 2.0の導入
Rancherとは
Rancherは、本番環境でコンテナを展開する組織向けに構築されたコンテナ管理プラットフォームです。Rancherは、Kubernetesクラスタの認証、アクセス制御、および監視をサポートします。以下のようなことが可能です。
- Active Directoryの資格情報を使用して、Kubenetesにアクセスすることができます。
- 全てのユーザ、グループ、プロジェクト、クラスタ、およびクラウドにわたるアクセス制御とセキュリティポリシーを設定し、適用できます。
- web上の単一画面から、Kubenetesクラスタのヘルスチェックや容量を確認できます。
インストール
-
Rancherのバージョンの選択
以下の3つのバージョンから、選択可能です。今回は、rancher/rancher:latestを利用します。
- rancher/rancher:latest: 最新の開発環境です。本番環境への利用は推奨されません。
- rancher/rancher:stable: 本番環境への利用が推奨されます。
- rancher/rancher:<v2.X.X>: DockerHubでバージョンを確認して選択してください。
DockerHubのURL: https://hub.docker.com/r/rancher/rancher/
-
SSLオプションの選択とRancherのインストール
セキュリティのため、Rancherを使うにはSSL通信が必要です。SSLによって、Rancherへのログインやクラスタ操作などの際に、ネットワークのセキュリティ対策を行います。よく使いそうなパターン2つを以下で紹介します。
-
パターン1: デフォルトの自己証明書
開発環境の場合は、Rancherが生成する自己署名書を利用してインストールする。下記インストールオプションは、自分で自己証明書を生成する手間を省きます。``` $ docker run -d --restart=unless-stopped \ -p 81:80 -p 444:443 \ rancher/rancher:latest ```
-
パターン2: Let's Encryptを利用する
本番環境の場合は、Let's Encrypを使用するオプションがあります。Let's Encryptはhttp-01を利用して、ドメインの確認を行います。下記コマンドを**事前確認事項** * DNSにドメインの名前解決の設定をしておく * 80番ポートを開けておく ``` $ docker run -d --restart=unless-stopped \ -p 81:80 -p 444:443 \ rancher/rancher:latest \ --acme-domain <YOUR.DNS.NAME> ```
注意
-
シングルノードにkubenetes clusterとRacher Serverを導入する際は、ingressのポートとRancherのポートがバッティングしてしまうため、適宜Rancherのポートを変更してください。今回は、適当に81/444ポートを利用します。
Proxyを使う場合: https://rancher.com/docs/rancher/v2.x/en/installation/single-node/proxy/
4. Rancherへの既存kubernetesクラスタの認識
Rancherサーバへのログイン
https://<サーバIP>:444/ にアクセスすると、以下の admin のパスワード設定画面が出現するので、設定してください。(初期ユーザID/パスワードは、admin/admin です)
RancherサーバのURLを設定します。
画面右下で、日本語に切り替え可能です。
クラスタの追加
- [クラスタ]タブをクリックし、画面中央の[クラスタを追加]をクリックします。
- クラスタを追加で、IMPORTをクリックします。
- クラスタ名を入力します。
- [作成]をクリックします。
5. 一番下のコマンドをコピーし、ノードであるサーバ上で実行します。
今後
コンテナの監視や、デプロイについて書こうと思っています。Go言語もやりたいな~
参考
以下の記事を参考にさせていただきました。ありがとうございます。
- Qiitaの記事
- ssh公開鍵認証設定まとめ:https://qiita.com/ir-yk/items/af8550fea92b5c5f7fca
- 公開鍵認証を設定してsshで接続する:https://qiita.com/Yuta_Fujiwara/items/827ea0a9b37d20941c51
- Rancher公式
- Requirement:https://rancher.com/docs/rke/v0.1.x/en/os/
- Rancher dockerイメージ:https://hub.docker.com/r/rancher/rancher/
- HTTP Proxy Configuration::https://rancher.com/docs/rancher/v2.x/en/installation/single-node/proxy/
- Install and Set Up kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl/
- Config Options:https://rancher.com/docs/rke/v0.1.x/en/config-options/https://rancher.com/docs/rke/v0.1.x/en/config-options/