紹介

Rancherはrancher-server とrancher-agent、そして一つ以上のkubernetes clusterによって構成されている。この中、rancher-agentは管理されたkubernetesに実行され、rancher-serverと通信し、クラスタの情報を送信する。

rancher-serverkubernetesを管理するためのWebUIとAPIを提供している。rancher-serverはHTTPSのみアクセスできる。

インストール

シングルノード

シングルノードの構築は以下二つの方法があります。

  • dockerで直接rancher-serverを実行
  • rkeで一つのノードに全てのroleを有効

rkeの方法は後でも出てくるので割愛、ここではdockerの方法を示す。

rancher-serverを実行したいノードで、下記のコマンドを入力する。

1
2
3
docker run -d --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  rancher/rancher:latest

これでシングルノードのrancher-serverを起動した。http://<IP Address>でアクセスできる。

マルチノード

rkeを使ってHA環境のrancher-serverを構築する。

rke(rancher k8s engine)kubernetesを構築するためのコマンドで、環境を用意すればコマンド一つでクラスターを構築できる。

マシンの用意

今回はmultipass でマシンを準備する。以下のコマンドで6台の仮想マシンを作成する。

1
2
3
4
5
6
multipass launch -c 2 -m 4096M -d 20G --cloud-init=./cloud-init.yaml -n kmaster1
multipass launch -c 2 -m 4096M -d 20G --cloud-init=./cloud-init.yaml -n kmaster2
multipass launch -c 2 -m 4096M -d 20G --cloud-init=./cloud-init.yaml -n kmaster3
multipass launch -c 2 -m 4096M -d 20G --cloud-init=./cloud-init.yaml -n kworker1
multipass launch -c 2 -m 4096M -d 20G --cloud-init=./cloud-init.yaml -n kworker2
multipass launch -c 2 -m 4096M -d 20G --cloud-init=./cloud-init.yaml -n kworker3

コマンドにあったcloud-init.yamlファイルは、マシン立ち上がった後の後処理を実行する。今回の場合は以下の後処理を実行した。

  • dockerのインストール

  • ホストマシンsshキーの登録

  • Ubuntuユーザをdockerグループに登録

  • 必要カーネルモジュールのロード

  • swap領域の停止

詳細の内容は以下に示す。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#cloud-config

packages:
    - docker.io

ssh_authorized_keys:
    - <rsa public key>

runcmd:
    - usermod -aG docker ubuntu
    - modprobe br_netfilter
    - modprobe ip6_udp_tunnel
    - modprobe ip_set
    - modprobe ip_set_hash_ip
    - modprobe ip_set_hash_net
    - modprobe iptable_filter
    - modprobe iptable_nat
    - modprobe iptable_mangle
    - modprobe iptable_raw
    - modprobe nf_conntrack_netlink
    - modprobe nf_conntrack
    - modprobe nf_conntrack_ipv4
    - modprobe nf_defrag_ipv4
    - modprobe nf_nat
    - modprobe nf_nat_ipv4
    - modprobe nf_nat_masquerade_ipv4
    - modprobe nfnetlink
    - modprobe udp_tunnel
    - modprobe veth
    - modprobe vxlan
    - modprobe x_tables
    - modprobe xt_addrtype
    - modprobe xt_conntrack
    - modprobe xt_comment
    - modprobe xt_mark
    - modprobe xt_multiport
    - modprobe xt_nat
    - modprobe xt_recent
    - modprobe xt_set
    - modprobe xt_statistic
    - modprobe xt_tcpudp
    - swapoff -a

最終的に以下ようにな6台のマシンができた

1
2
3
4
5
6
7
8
$ multipass list
Name                    State             IPv4             Image
kmaster1                Running           10.131.158.97    Not Available
kmaster2                Running           10.131.158.194   Not Available
kmaster3                Running           10.131.158.121   Not Available
kworker1                Running           10.131.158.133   Not Available
kworker2                Running           10.131.158.247   Not Available
kworker3                Running           10.131.158.166   Not Available

rkeでKubernetes環境作成

rkeで説明した通り、バイナリをダウンロードし実行権限を追加する。

上記の6ノードの情報とそれぞれの役割を設定する。他にもいろいろ設定できるが、今回は割愛

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
nodes:
  - address: 10.131.158.97
    user: ubuntu
    role: [controlplane, worker, etcd]
  - address: 10.131.158.194
    user: ubuntu
    role: [controlplane, worker, etcd]
  - address: 10.131.158.121
    user: ubuntu
    role: [controlplane, worker, etcd]
  - address: 10.131.158.133
    user: ubuntu
    role: [worker]
  - address: 10.131.158.247
    user: ubuntu
    role: [worker]
  - address: 10.131.158.166
    user: ubuntu
    role: [worker]

system-images:
    kubernetes: rancher/hyperkube:v1.18.2

services:
  etcd:
    snapshot: true
    creation: 6h
    retention: 24

ingress:
  provider: nginx
  options:
    use-forwarded-headers: 'true'

rkeコマンドにこの`Yamlファイルをパラメータにして実行すると、Kubernetes環境が作成できる。

1
rke_linux-amd64 up --config ./rancher_cluster.yaml

無事クラスタが作成された後、元のYamlファイル以外に、新しいファイルが二つ生成されます。

1
2
3
4
5
$ ll
total 132K
-rw-r----- 1 wshi wshi 5.3K Jun  8 17:04 kube_config_rancher_cluster.yaml
-rw-r----- 1 wshi wshi 119K Jun  8 17:07 rancher_cluster.rkestate
-rw-rw-r-- 1 wshi wshi  748 Jun  8 16:53 rancher_cluster.yaml

この中のkube_config_rancher_cluster.yamlはクラスタにアクセスするための設定ファイルのため、kubectlに読み込まれるように、~/kube/configにコピーする。これによってクラスタにアクセスができるようになった。

1
2
3
4
5
6
7
8
$ kubectl get node
NAME             STATUS   ROLES                      AGE   VERSION
10.131.158.121   Ready    controlplane,etcd,worker   21h   v1.17.4
10.131.158.133   Ready    worker                     21h   v1.17.4
10.131.158.166   Ready    worker                     21h   v1.17.4
10.131.158.194   Ready    controlplane,etcd,worker   21h   v1.17.4
10.131.158.247   Ready    worker                     21h   v1.17.4
10.131.158.97    Ready    controlplane,etcd,worker   21h   v1.17.4

kubenetes環境でRancherをインストール

rancherのドキュメント に従ってインストールします。ここではインストールの手順だけ抽出し、詳しい設定はドキュメントを参照してください。

  1. helmのインストール

    helmのホームページを参考にしてhelmをインストールする

    1
    
    sudo snap install helm --classic
    
  2. helmrancherのリポジトリを追加

    今回はstableを選択する

    1
    
    helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
    
  3. rancherインストールのためnamespaceを追加

    namespaceの名前は必ずcattle-systemにする

    1
    
    kubectl create namespace cattle-system
    
  4. cert-managerをインストール

    他にも証明書作成の方法はありますが、今回はrancherに生成してもらう

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    # Install the CustomResourceDefinition resources separately
    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml
    
    # Create the namespace for cert-manager
    kubectl create namespace cert-manager
    
    # Add the Jetstack Helm repository
    helm repo add jetstack https://charts.jetstack.io
    
    # Update your local Helm chart repository cache
    helm repo update
    
    # Install the cert-manager Helm chart
    helm install \
      cert-manager jetstack/cert-manager \
      --namespace cert-manager \
      --version v0.15.0
    

    cert-managerの状態を確認

    1
    2
    3
    4
    5
    
    $ kubectl get pods --namespace cert-manager
    NAME                                       READY   STATUS    RESTARTS   AGE
    cert-manager-766d5c494b-9cmcq              1/1     Running   0          15s
    cert-manager-cainjector-6649bbb695-cfmxq   1/1     Running   0          15s
    cert-manager-webhook-68d464c8b-5bmjt       1/1     Running   0          15s
    
  5. rancher-serverをインストール

    Rancher-generated certificatesを利用して、rancher-serverをインストール

    1
    2
    3
    
    helm install rancher rancher-stable/rancher \
      --namespace cattle-system \
      --set hostname=rancher.my.org
    

    rancher-serverの状態を確認

    1
    2
    3
    4
    5
    
    $ kubectl get pod -n cattle-system -o wide
    NAME                       READY   STATUS    RESTARTS   AGE   IP          NODE             NOMINATED NODE   READINESS GATES
    rancher-756b996499-fjnt9   1/1     Running   0          35m   10.42.0.4   10.131.158.247   <none>           <none>
    rancher-756b996499-rkn8h   1/1     Running   0          35m   10.42.2.4   10.131.158.121   <none>           <none>
    rancher-756b996499-wmczg   1/1     Running   0          35m   10.42.5.4   10.131.158.97    <none>           <none>
    

    それぞれのノード上にPodがRunning状態であり、インストールは成功した。