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 設定
ネットワーク関連
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
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
[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"
]
関連記事
- RancherOS で構築した k8s クラスタ用に GlusterFS で簡単な分散ファイルシステムを構築k8s クラスタの各 Node マシンに GlusterFSサーバのコンテナを一つだけ起動して、簡単な分散ファイルシステムを構築します。各 Node へのコンテナ設置のためには DaemonSet が利用できそうですが、ここでは RancherOS の rancher.services を利用します。 1台構成 後に `rancher.ser
- Rancher で構築した kubernetes クラスタのアップグレード手順RancherOS 等、docker が使える何らかの OS で Rancher によって構築した kubernetes クラスタのアップグレードを行うためには、以下のようにします。 v2.1.5 の Rancher で構築した k8s クラスタに存在する脆弱性 CVE-2019-11253 への対応がなされた [v2.3.2](https://github.com
- Docker CLI チートシートDocker に関するコマンド逆引き集です。公式ページの「Reference documentation」情報をもとにしています。 Docker 用語について コンテナ 後述のイメージという型をもとに作られる実体です。例えるならば、オブジェクト指向プログラミングにおけるクラスが Docker イメージで、インスタンスが Docker コンテナです。ある
- 複数の物理ホストの Debian9 上に Kubernetes (k8s) クラスタを Rancher で立ち上げるDocker オーケストレーションツールの一つに Kubernetes (k8s) があります。k8s 実行環境の構築方法は複数ありますが、ここでは AWS や GCP 等のクラウドサービスを利用せず、Debian9 がインストールされた複数台の物理マシンがネットワーク内に存在する状況を考えます。これら複数の Debian9 上に k8s クラスタを立ち上げるためには [Ranche
- Dockerfile ベストプラクティス (仮)Dockerfile を書く際に気になるポイント集です。「Best practices for writing Dockerfiles」および「Dockerfile Reference」をもとにしています。 Dockerfil