Rancherでkubeletに○×△して、
FlexVolumeプラグイン入れてみる。
2019/4/10
@tzkb
自己紹介
• 名 前 :Takahiro Kobayashi
• 勤務先 :SIer
• 出没場所 :Oracle、PostgreSQL、k8s関連に色々と
• キャリア :DB、ストレージを中心にインフラ
• 好きなもの:速いDB 、太い帯域、小さいレイテンシ
DB on Kubernetes、色々やってます。
•PGConf.Asia 2018に、
A guide of PostgreSQL on Kubernetes
というタイトルで登壇。
• のコミュニティで を
拡めたい!
今日話すこと
• Rancherいいよね。でも、、、
• kubeletのパラメータを更新したい時、どうしてる?
• FlexVolumeプラグインをRancherで動かしてみる。
• Rancherでも出来るkubeletのパラメータ更新。
Rancher、いいよね!
• UIがイケテル!
• k8sクラスタも簡単に作成。
• マルチクラウドなk8sも管理できちゃう。
でも、、、
こんなときあるよね?
• 某githubで ↓な記述が。
• 「あれ、Rancherでkubeletパラメータいじれるの?」
• 「もしかして、Rancher使ってると無理ゲー?」
Installing
You must set the --enable-controller-attach-detach=false option
on all kubelets. For systemd managed kubelets this can be set in
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
今回やりたいことは
• PodからDRBDで冗長化した
ボリュームをマウントしたい。
• DRBD9はノードでマウントする
だけで、RW権限を得る。
• アンマウントすると解放する。
• 冗長化とIO制御はマウントだけ
で出来る。
⇒簡単にプラグイン書ける。
※ provisioningは難しい。
FlexVolumeで出来ること
• kubeletのpluginとして各ノード
にFlexVolume driverを配置。
• Podがschedulingされた際に、
driverを呼び出し、それぞれの
Volume固有の処理を行う。
• driverで実装すべきIFは、
pkg/volume/flexvolume/driver-call.go
を参照。
• attach/detach/mountなどの実
装が必要。
kubelet kubelet kubelet
FlexVolume driver
じゃあ、driver書いてみるか。
• https://github.com/tzkoba/postgres-on-k8s/blob/develop/postgres-install/pg-drbd/drbd.sh
#!/bin/bash
# (一部抜粋です)
domount() {
MNTPATH=$1
DMDEV=$2
FSTYPE=$(echo $3|jq -r '.["kubernetes.io/fsType"]')
if [ ! -b "${DMDEV}" ]; then
err "{¥"status¥": ¥"Failure¥", ¥"message¥": ¥"${DMDEV} does not exist¥"}"
exit 1
fi
if [ $(ismounted) -eq 1 ] ; then
log "{¥"status¥": ¥"Success¥"}"
exit 0
fi
VOLFSTYPE=`blkid -o udev ${DMDEV} 2>/dev/null|grep "ID_FS_TYPE"|cut -d"=" -f2`
if [ "${VOLFSTYPE}" == "" ]; then
mkfs -t ${FSTYPE} ${DMDEV}
if [ $? -ne 0 ]; then
err "{ ¥"status¥": ¥"Failure¥", ¥"message¥": ¥"Failed to create fs ${FSTYPE} on device ${DMDEV}¥"}"
exit 1
fi
fi
mkdir -p ${MNTPATH} &> /dev/null
mount ${DMDEV} ${MNTPATH} &> /dev/null
if [ $? -ne 0 ]; then
err "{ ¥"status¥": ¥"Failure¥", ¥"message¥": ¥"Failed to mount device ${DMDEV} at ${MNTPATH}¥"}"
exit 1
fi
log "{¥"status¥": ¥"Success¥"}"
exit 0
}
driverだけでは動かない。
• やっぱりこれが必要。
【補足】--enable-controller-attach-detach=false とは
attachDetachControllerがボリュームの接続/切断を出来ないようにして、
kubeletが接続/切断を出来るようにする。デフォルトはtrueである。
Installing
You must set the --enable-controller-attach-detach=false option
on all kubelets. For systemd managed kubelets this can be set in
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
kubeletパラメータの更新@Rancher
• Rancherではkubeletもコンテナ化されているが、
[Edit Cluster]-[Edit as YAML] からパラ更新が可能。
kubeletパラメータの更新@Rancher
• 直接テキストを編集して、画面下方にある[Save]で保存。
kubeletでVolumeを
attach/detach出来るように。
kubelet-pluginのディレクトリを
ホスト側に公開して、ドライバを
配置できるように。
まとめ
• FlexVolumeプラグインに限らず、kubeletや
kube-apiのパラメータを更新したい時はあるはず。
• そんな時でもRancherなら簡単。
• 詳しくはQiitaで。

20190410 cnjp rancher-flexvolume