RancherOS による Kubernetes クラスタの構築
[履歴] [最終更新] (2019/01/21 18:51:13)
1
作品
409
技術情報
最近の投稿
ここは
趣味の電子工作を楽しむ人のためのハードウェア情報共有サイト

技術情報や作品の投稿機能、リアルタイム遠隔操作 API をご利用いただけます。
新着作品

概要

こちらのページに記載した Kubernetes クラスタを RancherOS で構築する場合の設定例を記載します。

インストール

ISO ファイルをダウンロードして起動すると ros コマンドが利用できるコンソールに入ります。インストール可能なバージョン一覧はコンソール上で以下のコマンドによって確認できます。

sudo ros os list

cloud-config.yml を用意します。

hostname: myrancher

以下のようなコマンドでパスワードおよびディスク等を指定してインストールします。バージョンを指定 -i しない場合はダウンロードした ISO と同じバージョンがインストールされます。

sudo ros install -i rancher/os:v1.4.2 -c cloud-config.yml -d /dev/sda --append 'rancher.password=mypass123'

ディスクからブートすると rancher ユーザと指定したパスワードでログインできます。SSH も可能です。

ssh rancher@192.168.56.13

cloud-config.yml で設定した内容は以下の場所に保存されています。

[rancher@myrancher ~]$ sudo ls /var/lib/rancher/conf/
cloud-config.d    cloud-config.yml

これをコマンドで更新する場合は以下のようにできます。再起動すると反映されます。

sudo ros config set rancher.network.interfaces.eth1.address 192.168.56.13/24
sudo ros config set rancher.network.interfaces.eth1.dhcp false

RancherOS ではシステム用とユーザ用で docker が分かれており、それぞれ以下のコマンドで確認できます。

sudo system-docker ps
docker ps

RancherOS インストール後の設定変更

現在の設定を YAML 形式で確認

sudo ros config export

個別に変更する場合 (再起動すると反映されます)

sudo ros config set rancher.network.dns.nameservers "['8.8.8.8','8.8.4.4']"
sudo ros config get rancher.network.dns.nameservers

cloud-config.yml で変更する場合 (再起動すると反映されます)

rancher:
  network:
    dns:
      nameservers:
      - 8.8.8.8
      - 8.8.4.4

sudo ros config validate -i cloud-config.yml
sudo ros config merge -i cloud-config.yml

RancherOS 起動時に実行したいコマンドの設定

/opt/rancher/bin/start.sh または /etc/rc.local にコマンドを記載しておくことで、RancherOS 起動時に実行できます。

Runs /opt/rancher/bin/start.sh if it exists and is executable. Any errors are ignored.
Runs /etc/rc.local if it exists and is executable. Any errors are ignored.
https://rancher.com/docs/os/v1.x/en/installation/boot-process/built-in-system-services/#console

sudo mkdir -p /opt/rancher/bin
echo 'echo hello > /tmp/hello.txt' | sudo tee -a /opt/rancher/bin/start.sh
sudo chmod 755 /opt/rancher/bin/start.sh

cloud-config.yml で以下のように設定することもできます。

write_files:
- path: /etc/rc.local
  permissions: "0755"
  owner: root
  content: |
    #!/bin/bash
    echo hello > /tmp/hello.txt

ファイルを作成せずに直接 YAML でコマンドを設定することもできます。ただし runcmd 内で docker コマンドは利用できません/etc/rc.local 内で wait-for-docker を利用するか、あるいは rancher.services に設定を追加する必要があります。

runcmd:
- [ touch, /tmp/test1 ]
- echo 'test' > /tmp/test2

例えば /etc/hosts を編集したい場合は以下のようにできます。

runcmd:
- if ! grep xxx.example.com /etc/hosts; then echo '127.0.0.1 xxx.example.com' >> /etc/hosts; fi
- if ! grep yyy.example.com /etc/hosts; then echo '127.0.0.1 yyy.example.com' >> /etc/hosts; fi

cloud-config.yml 設定

ネットワーク関連

固定 IP

sudo ros config set rancher.network.interfaces.eth1.address 192.168.56.13/24
#sudo ros config set rancher.network.interfaces.eth1.gateway 192.168.56.1
sudo ros config set rancher.network.interfaces.eth1.dhcp false

DNS

sudo ros config set rancher.network.dns.search "['mydomain.com']"
sudo ros config set rancher.network.dns.nameservers "['8.8.8.8','8.8.4.4']"

環境変数

rancher.services で管理される docker コンテナを起動する際の環境変数は cloud-config.yml で設定できます。RancherOS ではコンソールもコンテナであるため、以下のようにタイムゾーンを UTC から JST に変更できます。

sudo ros config set rancher.services.console.environment.TZ 'JST-9'

コンソールからコンテナを起動する際は別途 TZ を指定する必要があります。

docker run -it --rm -e 'TZ=JST-9' nginx /bin/bash

Rancher サービス

こちらの記載の Docker Compose フォーマットで、RancherOS 起動時に run するコンテナを指定できます。データを永続化させるためには rancher.services.user-volumes.volumesコンテナで利用するディレクトリを指定する必要があることに注意します。Rancher のサーバ側とそれに接続するエージェントを同じホストで起動する設定は、こちらのページの docker run を YAML に変換して以下のようになります。実際にはクラスタを作成してからでないと token 等が得られないため、二回に分けて ros config merge して適用する必要があります。

rancher:
  services:
    user-volumes:
      volumes:
      - /home:/home
      - /opt:/opt
      - /var/lib/kubelet:/var/lib/kubelet
      - /host/rancher:/host/rancher
      - /etc/kubernetes:/etc/kubernetes
    rancher-stable:
      image: rancher/rancher:stable
      restart: unless-stopped
      volumes:
      - /host/rancher:/var/lib/rancher
      ports:
      - 8080:80
      - 8443:443
    rancher-agent-v2-1-3:
      image: rancher/rancher-agent:v2.1.3
      restart: unless-stopped
      volumes:
      - /etc/kubernetes:/etc/kubernetes
      - /var/run:/var/run
      privileged: true
      net: host
      command: --server https://192.168.56.13:8443 --token fsfhj6nbn2q9kclz2b74wgjblsh46fsn67f4s4gdbcznk8txtnlfzv --ca-checksum 2729d7f698866e3396f41e0848d45f6ff4705a803d0b9866977270e65b008571 --etcd --controlplane --worker

Uploaded Image

[rancher@myrancher ~]$ sudo system-docker inspect user-volumes | jq '.[0].HostConfig.Binds'
[
  "/etc/kubernetes:/etc/kubernetes",
  "/home:/home",
  "/host/rancher:/host/rancher",
  "/opt:/opt",
  "/var/lib/kubelet:/var/lib/kubelet"
]
関連ページ