kind ( Kubernetes in Docker ) を PXEブートしたFedora CoreOSで
インフラの設定もサーバ側に設定を重ねるのではなく、
例えばKubernetesのワーカーノードはゼロからセットアップ、アプリケーションもデプロイし直す事でimutableな構成にできないか、更にワーカーノードはCoreOS使えたらシンプルな構成にできないかな、と検証してます(途上)
あと再起動するだけでクリーンなDocker環境として使えるの地味に便利かも。
今回は手軽にKubernetesを検証する目的で、( 以前のこちらの内容で作ったPXEブート環境で )1台のCoreOSをPXEブートし、kindセットアップ、
マスターとワーカーノードを1台のサーバに混在する形でkubernetesの検証環境を作ってみました。
起動の流れ
Kubernetes in Docker ( kind )のセットアップ
CoreOSの起動に必要なignitionファイルを作ります。
HDDのマウント
最初、imutable、サーバ側に設定を持たない構成なら全てオンメモリで動作できるのでは?と思ったのですが、
自宅サーバのメモリが4GBしかなく、Dockerイメージのサイズが足りなくて、tmpfsの領域がいっぱいになってしまった...
このため仕方なくHDDをマウントしています。
マウントの方法としては2つあり
1. CoreOS の ignition の filesystems で行う方法
2. systemd の mount を使う方法
あたりがありそうで、
今回は systemd の mountを用いました。
HDDボリュームの初期化を行う場合はignitionのfilesystemsの wipe_filesystem などと組み合わせると便利そう
(今回、HDDは検証とは別にストレージのバックアップ用途としても使っていて消せなかったのでsystemdのmound、bindでマウントしています )
しかしsystemdでのマウント、 /var/mnt
にマウントする場合、ユニット名は var-mnt.mount
としなければならないんですね慣れていきたい...
マウントはdockerが起動する前に行われている必要があります。そこでsystemdのユニットの起動順序を下記のようにしました。
- HDDを/var/mntにマウント
- ( 私の環境では、HDD内に他のデータも混在していたので ) /var/mnt/docker を /var/lib/docker にマウント
- dockerサービスの起動
kind のセットアップ
2箇所で設定しています。
1. ファイルの設置はignitionファイル内の storage.files
で行う( ファイルを置くだけなら、こちらが便利 )
2. CLIで実行したい内容は、一旦、bashスクリプトで記述 storage.files
で設置した上で、 systemd.units
内で実行するようにしました。
2で、当初は systemd.units内に直接スクリプトを書いていました。
( ExecStart= での処理をどんどん続けて、バックスラッシュで改行していく形 )
ただこの場合、コマンド置換が難しそうだったので、別のファイルに切り出すことにしました。
できたingnitionファイル
やってみると、ignitionによる設定って contents: |
、
contents: |
[Unit]
いろんな処理
でignition内にいろいろ書けるので、見通しやすいかも。
variant: fcos
version: 1.0.0
passwd:
users:
- name: core
groups:
- adm
- sudo
ssh_authorized_keys:
- ssh-rsa AAhimituv [email protected]
systemd:
units:
- name: var-mnt.mount
enabled: true
contents: |
[Unit]
Description=disk mount
[Mount]
What=/dev/backup/export
Where=/var/mnt
Type=xfs
Options=defaults
[Install]
WantedBy = multi-user.target
- name: var-lib-docker.mount
enabled: true
contents: |
[Unit]
Description=symbolick link for docker strage
After=var-mnt.mount
RequiresMountsFor=/var/mnt
Before=docker.service
[Mount]
What=/var/mnt/docker
Where=/var/lib/docker
Type=none
Options=bind
[Install]
WantedBy=multi-user.target
- name: shell.service
enabled: true
contents: |
[Unit]
Description=Alpine CLI Shell
After=NetworkManager-wait-online.service
[Service]
Type=simple
ExecStart=/usr/bin/podman run --rm --privileged -v /:/host -ti alpine:latest /bin/ash
[Install]
WantedBy=multi-user.target
- name: kubernetes_setup.service
enabled: true
contents: |
[Unit]
Description=kubernetes setup
After=network.target var-mnt.mount
[Service]
Type=oneshot
WorkingDirectory=/var/home/core
ExecStart=/var/home/core/kind_setup.bash
[Install]
WantedBy=multi-user.target
storage:
files:
- path: /var/home/core/kind.conf
mode: 0644
contents:
inline: |
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- path: /usr/local/bin/kind
mode: 0755
contents:
source: https://kind.sigs.k8s.io/dl/v0.7.0/kind-Linux-amd64
- path: /etc/sysctl.d/k8s.conf
mode: 0644
contents:
mode: 0644
contents:
inline: |
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
- path: /var/home/core/kind_setup.bash
mode: 0744
contents:
inline: |
#!/bin/bash
sudo systemctl enable docker.service
# 一般ユーザでもdockerを操作できるように
sudo usermod -a -G docker core
# kubectl のダウンロード
version=`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`
curl -LO https://storage.googleapis.com/kubernetes-release/release/${version}/bin/linux/amd64/kubectl
mv ./kubectl /usr/local/bin/
chmod 755 /usr/local/bin/kubectl
# kind でクラスターを作成
kind create cluster --config /var/home/core/kind.conf
# 初回起動時は ~/.kube をrootの所有権で作成するので、coreユーザに変更
chown -R core:core /var/home/core/.kube
Author And Source
この問題について(kind ( Kubernetes in Docker ) を PXEブートしたFedora CoreOSで), 我々は、より多くの情報をここで見つけました https://qiita.com/tin-machine/items/42cd22190d173642c3f6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .