kubernetes
rancher
rancheros

快適な kubernetes オンプレミス環境を構築する(1. 設計編)

シリーズ目次

  1. 設計編
  2. RancherOSインストール & セットアップ
  3. Rancher Server のセットアップ
  4. Kubernetes環境にホストを追加する
  5. nginx-ingress-controllerを使ったIngress環境のセットアップ
  6. SSL自動発行環境セットアップ(kube-lego)
  7. NFSサーバ&NFSクライアントセットアップ
  8. プライベートレジストリを構築する
  9. 総括

前置き

  • GKE(Google Container Engine) 相当の環境がオンプレで欲しいと思ったので作ってみました
  • いろいろと調べてみて、そこそこいい感じな環境が構築できたので公開しようと思った次第です
  • ここでは快適な Kubernetes 環境を構築するにあたって、何が快適か洗い出しをしていきます

対象読者

  • Kubernetes の知識がある方 (Pod, Service, Ingress etc ... などの単語が分かる人)
  • オンプレミスな Kubernetes 環境を立ててみたい人

設計編

要件とそれに対する調査結果

Kubernetes 環境は簡単に構築したい

  • Kubernetes Hard way がありますが、ぶっちゃけそんなにやりたくない
  • RancherOS & Rancher Server で Kubernetes 環境が割と簡単に立つらしいので採用

プライベートレジストリ欲しい

ReadWriteMany なストレージが欲しい

Service を公開したときに外部からブラウザで簡単にアクセスできるようにしたい

  • 基本的には Ingress のバーチャルホストの機能を使うことにします
  • DNS は Amazon Route53 で、ワイルドカードレコードをグローバル IP アドレスに紐づけるように作って、Kubernetes クラスタに飛ばすようにする
  • 実際に自分で使うときに公開する URL は指定したいので、Ingress を使う
  • ということで、nginx-ingress-controller を採用

SSL 証明書の発行は自由にしたい

  • バーチャルホストとちょっと関係しますが、 Ingress を使って公開したい URL が決まった時に自動的に SSL 対応がされることが理想
  • なので、kube-lego ( https://github.com/jetstack/kube-lego ) を採用

ホスト構成

  • KVM の上にまずは 4ホスト + 1 (NFS Server) を立てる想定にします
    • Rancher Master
    • k8s Master
    • k8s Compute Node
    • k8s Router Node
    • NFS Server
  • 数は多いですが、順番に構築していけば、割と簡単に構築ができます
  • Rancher のおかげで後でホストは増やせるので、一旦この程度のホスト数にしておきます

HostDiagram.png

K8s 環境接続イメージ

  • 各種 Node の役割を決めて接続します(図には出ていませんが、NFS サーバももちろん同一セグメントに接続します)
  • Router Node となる Host D さんにはグローバル IP アドレスとプライベート IP アドレス両方をつけています

NetworkDiagram.png

Kubernetes 上で動作するサービス

メモがてら書いておきます

  • Portus + Docker Registry
  • NFS Client
  • kube-lego
  • nginx-ingress-controller

作業手順

実際に構築していく順番を決めていきます

  1. RancherOS を各ホストにインストールする
  2. Rancher Server のセットアップ & k8s 環境のセットアップをする
  3. k8s 環境にノードを追加する
  4. nginx-ingress-controller を使って Ingress 環境を構築する
  5. kube-lego を使って証明書自動発行の仕組みを作る
  6. プライベートレジストリを構築する

まとまらないまとめ