Oracle RAC on Kubernetes

JPOUG Advent Calendar 2017の9日目のエントリーです。

今回は Oracle RAC on Kubernetesについて書きます。

 

情報はKubernetes 1.7ベースです

 

Oracle RAC on XXを作る際に共通して考慮する必要があるのが

 

です。

 

  • 共有ディスク

検証用途ではiscsinfsが使われていると思います。

Kubernetes(docker含む)では「コンテナ内」からiscsiを扱うことは難しいため、nfsを使います。

 

クラウド環境やコンテナ環境ではネットワークが一本しかない、固定IPを指定できない、マルチキャスト対応してない など様々な制約があります 。

これらの制約に対応する為、仮想ネットワーク(vxlan)を使います。vxlanはユニキャストモード使用します。

 

  • ホスト名

一般的なホスト名変更方法(/etc/hostname 変更)でうまくいかないことが多い(再起動すると環境側でホスト名がリセットされたり、/etc/hostnameが編集不可だったり)ので、ホスト名を変更するサービスを作成して対応しています。

 

  • 名前解決

 クラウド環境やコンテナ環境側のDNSに仮想ネットワーク(vxlan)に対応したDNSレコードを追加出来ないことが多いので

各ノードにローカルDNS(dnsmasq)を作成し、本来のDNSにforwardしています

 

Oracle RAC on Kubernetesでは上記に加え、

 

  • コンテナの配置
  • コンテナ間の名前解決
  • systemd
  • 特権モード
  • /dev/shm

 

で対応が必要です。

 

  • コンテナの配置

1ホストにつき、1DBコンテナ起動してほしいのですべてのコンテナでcontainerPortとhostPortを同一にして1ホストにつき、1コンテナ起動するようにしています。

 

  • コンテナ間の名前解決

 コンテナ(pod)間で名前解決するにはsubdomainを使用する必要があるようです。(自信ないのでくわしい人教えて下さい)

 

  • systemd

 公式Oracle Linuxのイメージはsystemdが含まれていませんので、systemdが含まれたイメージを自作する必要があります。

 

  • 特権モード

 systemdやvxlanを動作させるために特権モード

(securityContext:
privileged: true)

 でコンテナを起動します

 

  • /dev/shm

 デフォルトは64MBで、ASMインスタンスが起動出来ません。

そのため/dev/shmを1200mでマウントし直すsystemdサービスを作成して対応しています

 


f:id:KNOPP:20171208212018j:image


f:id:KNOPP:20171208212030j:image

手順は、今後以下URLで公開予定です

 https://github.com/s4ragent/rac_on_xx/tree/master/k8s

 

その他

 JPOUG in 15 minutes #6で使用した資料(Oracle RAC on Docker)はこちら

https://www.slideshare.net/ohshimamasaki/oracle-rac-on-docker

 

手順はこちら

https://github.com/s4ragent/rac_on_xx/tree/master/docker