LoginSignup
15
22

More than 5 years have passed since last update.

シングルノードにkubernetesとRancher 2.0を導入して、コンテナ管理してみた

Last updated at Posted at 2018-10-30

シングルノードに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/

手順

  1. 仮想マシンの準備、初期設定
  2. RKEによる、Kubernetesのインストール
  3. Rancher 2.0の導入
  4. 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をインストールする際に、ノードへのアクセスを公開鍵認証で行うため、設定を行います。
手順は省略しますが、以下を参考にしてください。

2. RKEによる、Kubernetesのインストール

RKEとは

Rancher Kubernetes Engine(RKE)は、軽量のKubernetesインストーラで、ベアメタルおよび仮想化サーバーへのインストールをサポートします。

導入要件の確認

以下の公式ページで、要件を満たしていることを確認します。

https://rancher.com/docs/rke/v0.1.x/en/os/

RKEのインストール

  1. RKEのバイナリファイルをダウンロードします( https://github.com/rancher/rke/releases )。バイナリファイルを $PATH にあるフォルダにおいて、名前をrkeに変更します。

    $ mv rke_linux-amd64 rke
    
  2. RKEを実行できるように、権限を変更します。

    $ chmod +x rke
    
  3. RKEが実行可能なことを確認します。

    $ rke --version
    rke version v0.1.11
    
  4. cluster.ymlの準備

    RKEはcluster.ymlと呼ばれるクラスタ構成ファイルを使用して、クラスタ内のノードとKubernetesの展開方法を決定します。cluster.ymlを作成するのに以下の2つの方法が用意されています。今回は、サンプルを使って最小限のcluster.ymlを作成します。

    cluster.yml
    nodes:
        - address: <サーバIP>  # ノードのIPアドレス
          user: <ユーザ名>  # ログインユーザ
          role:
            - controlplane  # 今回はオールインワンなので、すべての役割を追加
            - etcd
            - worker
          ssh_key_path: ~/.ssh/id_rsa  # 秘密鍵のフォルダパス
    
    ingress:
        provider: nginx  # ingressサービスの設定(ロードバランサ)
    
  5. 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グループに追加しておく
  6. 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クラスタの認証、アクセス制御、および監視をサポートします。以下のようなことが可能です。

  1. Active Directoryの資格情報を使用して、Kubenetesにアクセスすることができます。
  2. 全てのユーザ、グループ、プロジェクト、クラスタ、およびクラウドにわたるアクセス制御とセキュリティポリシーを設定し、適用できます。
  3. web上の単一画面から、Kubenetesクラスタのヘルスチェックや容量を確認できます。

インストール

  1. 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/
  2. 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 です)

rancher1.PNG

RancherサーバのURLを設定します。

さーばIP.PNG

画面右下で、日本語に切り替え可能です。

言語設定.PNG

クラスタの追加

  1. [クラスタ]タブをクリックし、画面中央の[クラスタを追加]をクリックします。
  2. クラスタを追加で、IMPORTをクリックします。
  3. クラスタ名を入力します。
  4. [作成]をクリックします。

クラスタついか1.PNG
5. 一番下のコマンドをコピーし、ノードであるサーバ上で実行します。

クラスタ2.PNG
6. 少し待つと、Rancherにクラスタが認識されます。

認識.PNG

今後

コンテナの監視や、デプロイについて書こうと思っています。Go言語もやりたいな~

参考

以下の記事を参考にさせていただきました。ありがとうございます。

15
22
2

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
15
22