Kubernetes 1.13とFlannelでubuntu 18.04上にpod間overlayネットワークを構成~Master Node構築編~

Kubernetesは3ヶ月ごとに新バージョンがリリースされ、機能がどんどん変化して行きます。本記事では、2018年6月に私が登壇して話したFlannelを使ったpod間ネットワークの自動構成を最新のバージョンで実現しようとした記録です。

スポンサーリンク

1. 構築する環境構成

1-1. 構成要素とバージョン

本記事で利用するソフトウェアのバージョンは以下の通りです。

ソフトウェア名 バージョン
Master NodeのOS ubuntu server 18.04.1
Linux Worker NodeのOS ubuntu server 18.04.1
Windows Worker NodeのOS Windows Server 2019 Datacenter(デスクトップ有効)
Kubernetes 1.13.2
flannel v0.10.0

過去の記事ではWinCNI、flannel、calicoなどいくつかのツールを使ってWindows Worker Node上のPod間ネットワークを構成してきましたが、いずれも各NodeでNATを行うホストGatewayモード、L2Bridgeモードを用いてきており、Overlayネットワークを使うのは今回が初めてとなります。

1-2. 参考資料とハマりポイントのまとめ

今回の記事作成に当たり、参考としたサイトは以下の通りです。

基本的には一つ目にあるMicrosoft/SDNリポジトリ内のREADMEを参考にしていますが、以下のようないくつかハマりポイントと古い設定情報がありました。

  1. Kubernetes 1.13がubuntu 18.04のMaster Nodeでうまく起動できなかった。これはdockerをaptではなくsnapからインストールしていたためでした。厳密にはOSインストール時にdockerを有効にするようにしていたためでした。
  2. FlannelがMasterおよびLinux Workerで正常に起動しなかった。Kubernetes 1.12以降ではMicrosoft/SDNリポジトリ内にあるkube-flannel-vxlan.yamlを一部修正する必要があり、3つ目の参考リンクをみて対応しました。
  3. Flannel起動後、coreDNSが正しく名前解決できず、プライベートIPの逆引きも8.8.8.8へ問い合わせし続けていた。Kubernetesでは名前解決の情報をMaster Nodeの/etc/resolv.confから取得するのですが、ubuntu 18.04では中身が127.0.0.53というsystemdでコントロールするloopbackアドレスのみが書かれているため、正しいリゾルバIPが取得できません。そこで4つ目の参考リンクをみてリゾルバIPを指定して対処しました。
  4. Windows Worker Nodeでkubeletを起動しようとしましたが、flanneld.exeによるVXLAN overlayネットワークの作成で例外エラーが出てしまいます。flanneld.exeはMicrosoft/SDNリポジトリ内にあるものを使っているので、コードの修正をして自分でビルドする必要があるかなと思っています。(対応未完了)

これだけ色々ハマったので、今回はubuntu 18.04.1上にKubernetes 1.13のMaster Nodeを構築する手順までを紹介します。

2. Master Nodeの構成

2-1. 前提条件ソフトウェアのインストール

最初にubuntu Server 18.04.1をインストールします。OSインストールの途中で追加するパッケージを選ぶことが可能ですが、ここでは何も追加せずデフォルト状態のままインストールを完了させます。

OS起動後、OS自体のパッチを適用します。

次にdockerをインストールします。

パッケージのインストールを実施後、Kubernetes導入の前提条件であるスワップ無効化を行います。

以上の設定を実施後、いったんOS再起動を行います。

2-2. Kubernetes 1.13のセットアップ

まずは公式ドキュメントの”Installing kubeadm”に従ってkubeadm, kubelet, kubectlをインストールします。

次に、Kubernetesドキュメントの”Creating a single master cluster with kubeadm”に従って、kubeadmによるKubernetes Master Nodeのセットアップを行います。kubeadmコマンドの引数には、FlannelでPod間通信用に使われるPod Network CIDRとして”10.244.0.0/16″を利用するよう引数に指定します。

次に、kubectlコマンドを実行できるよう、一般ユーザーにて以下のコマンドを実行します。

kubectlが使えることとKubernetes Master NodeとしてのPodが動いていることを確認します。

2-3. coreDNSの設定

ここまでのセットアップ結果を見るとまだcorednsのPodが起動しておらずPending状態となっています。これはpod間ネットワークの構成が完了するまでcorednsは起動しないという既定の動作です。ただ、corednsは/etc/resolv.conにある127.x.x.xではないDNSリゾルバのIPを取得して名前解決リクエストの転送先として使います。さらに、/etc/resolv.confに該当するIPが一つも存在しない場合は、「8.8.8.8」と「8.8.4.4」の2つが利用されます。
これではプライベートな名前空間の名前解決ができないため、実際の環境に合わせたリゾルバを設定します。

まず、以下の内容でcoredns.yamlファイルを作成します。

次に上記ファイルを使ってKubernetesの設定変更を行います。

これでcorednsからの参照先DNSが正しく設定できました。

2-4. Flannelの導入

最初にCNIの最新リリースバージョンをダウンロードして展開します

VXLAN Overlayネットワークを構成するためのFlannel導入設定ファイルをMicrosoft/SDNリポジトリからダウンロードします。

次に、Kubernetes 1.13で正常にFlannelのDaemonSetが起動するよう、一部修正を行います。

また、Linux OSのみにDaemonSetを起動するよう設定を編集します。

次に編集したYAMLファイルを適用してFlannelを導入します。

適用が完了するとMaster Node上のPodはすべてRunning状態となり、「flannel.4096」と「cni0」というNICが追加されます。

以上でMaster Nodeの構築までが完了しました。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

フォローする