2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Kubernetes2Advent Calendar 2018

Day 10

kubesprayを使ってローカルwindows上にkubernetes clusterをつくる方法

Last updated at Posted at 2018-12-09

この記事について

この記事はKubernertes Advent calender 2018 その2の10日目の記事です。

紹介すること: 自身のローカルPC上にkubernetesのclusterを立てる方法
環境: windows 10(※たぶんwindows 7も可能)

モチベーション

コンテナのオーケストレーションツールとしてKubernetesはデファクトスタンダードになりました。
Kubernetesを実際に試してみようと思う場合、もっとも簡単な方法は各クラウドベンダーのマネージドサービス(GKE, AKS, EKS)を使うことです。
しかし、マネージドサービスの使用には基本的にお金がかかります。
無料でやる方法(※)もありますが、使用できるリソースは非常に少なくいろいろ試すにはちょっと足りません。
ただ、皆さんが今使ってるPCにはそこそこのリソースがあるはずです。
そこで今回は、自身のローカルPC上にkubernetes clusterを立てる方法を紹介します。
kubernetes cluster構築にはkubesprayを使用します

※参考資料: https://qiita.com/apstndb/items/788f705e71e7660967a6

kubesprayとは

公式リポジトリはhttps://github.com/kubernetes-incubator/kubespray にあります
サイトにもあるようにProduction Ready Kubernetes Clusterをデプロイするためのツールです。
気軽に試すにはちょっと大げさですが、様々な環境にProductionでも使えるクラスタを構築できます。
そのため、Kubernetesの勉強としてはこれ以上ない環境なのではと思っています。
※ただしkubesprayはansibleを使用するため、windows上で使用するのは至難の業です。Linux環境だとここに書いてある手順の半分くらいの手間でできるので、もし可能ならそちらをおすすめします。

構築方針

kubesprayはvagrantでの構築をサポートしていますが、vagrantを使用するホストのOSとしてwindowsはサポートしていません。
実際に私はwindows上のvagrantを使って多大な労力をかけましたが成功しなかったのであまりお勧めはしません。(ansibleがインストールできなかったり、かといってansible_localを使うといろいろなところでエラーが出たりします)
※そもそも私のスキルが低いことが問題なだけなのかもしれませんが・・・orz
そこで今回の方針はwindows上のvagrantでbootstrap VMとkubernetes clusterのVM部分を作成します。そしてbootstrap VM上でkubesprayをダウンロードし、そこでansibleを使ってkubernetes clusterのセットアップをしていくという方針で進めました。
※なお、今回は以下のような構成のKubernetes Clusterを作成することを前提で話を進めます。その他の構成で作成したい場合は適宜読み替えてください。

  • Kubernetes Master
    • 名前: kube-master
    • IPアドレス: 192.168.33.101
    • VM台数: 1
    • その他: etcdもこのVM上に立てる
  • Kubernetes Node
    • 名前: kube-node
    • IPアドレス: 192.168.33.102
    • VM台数: 1

Kubernetes Cluster構築手順

vagrantのインストール

vagrantでVMを立てるので、windows上にインストールします。
インストールに関しては他の記事で大変丁寧に解説されているので、そちらをご参照ください。
参考サイト: https://qiita.com/TakashiOshikawa/items/d2fb48d59e9e316af9a2

Kubernetes clusterのベースVMを作成

vagrantでVMを作成し、bootstrap上のansibleで構築できるようにsshでアクセスできるようにします。
今回、このあたりの設定と後で説明するBootstrap VMの設定を簡単にするためのVagrantfileをGitHub上に置いています(https://github.com/sh-miyoshi/windows-kube-cluster)
注意: sshでrootにパスワードでアクセスできるようにするため、セキュリティ的にかなり弱くなります。そのため自身のローカル環境でのみ使用してください

  • windows-kube-clusterをダウンロード
$ git clone https://github.com/sh-miyoshi/windows-kube-cluster.git
or
公式ページのClone or Download → Download ZIPをクリック後、解凍する
  • 設定ファイルを編集
    以下の項目はデフォルト値以外を使用したい人向けです。デフォルト値を使用する場合は無視してください。

    • kube-cluster/ansible/group_vars/all.yamlの変数の値(sshのパスワード)を変えてください
    • kube-cluster/Vagrantfileをテキストエディタで開き、$vm_memory$vm_infoを適当に編集してください。
  • VMを起動

$ cd /path/to/window-kube-cluster/kube-cluster
$ vagrant up

Bootstrap VMの作成

  • VMを起動
$ cd /path/to/window-kube-cluster/bootstrap
$ vagrant up

kubesprayによるkubernetes clusterの立ち上げ

Bootstrap VMにsshで乗り込み、必要な設定を書いた後、ansible-playbookコマンドでClusterを作り上げていきます。

  • VMに乗り込む
$ cd /path/to/window-kube-cluster/bootstrap
$ vagrant ssh
  • Kubernetes Cluster VMへアクセスできるように修正
    /etc/hostsファイルを編集し、Bootstrap VMからKubernetes Clusterの各VMに名前でアクセスできるようにします。
    viで/etc/hostsファイルを開き、以下のように変更してください。(下2行を追加)
hosts.
127.0.0.1       miyoshi-vm      miyoshi-vm
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.33.101 kube-master
192.168.33.102 kube-node
  • kubesprayのインストール
    GitHubの公式リポジトリからダウンロードします
    その後pip installコマンドで必要なパッケージをインストールします(たぶんなくても動くけど一応・・・)
$ git clone https://github.com/kubernetes-incubator/kubespray.git
$ cd kubespray
$ sudo yum install python-pip
$ sudo pip install -r requirements.txt
  • 設定ファイルを書く
    kubespray/inventory/sampleディレクトリ下にあるhosts.iniにKubernetes Clusterの情報を記入します。
    デフォルト値でやっている方は以下の情報をコピペしてください。
hosts.ini
[all]
kube-master ip=192.168.33.101
kube-node ip=192.168.33.102

[kube-master]
kube-master ip=192.168.33.101

[etcd]
kube-master ip=192.168.33.101

[kube-node]
kube-node ip=192.168.33.102

[k8s-cluster:children]
kube-master
kube-node
  • ansibleの実行
    先ほど作成したhosts.iniを使ってKubernetes Clusterを作っていきます。
    -kオプションを付けることでSSHのパスワードを聞いてもらうようにしています。
    しばらく待てばansibleによるセットアップが終わってKubernetes Clusterが作成されます。
    ※まぁまぁ時間かかります
$ sudo ansible-playbook -i inventory/sample/hosts.ini -k cluster.yml

状態を確認

最後に作成したKubernetes Clusterが正常動作しているか確認します。

  1. sshでkube-masterに乗り込みます。
  2. 以下のようなnginx.yamlを作成し、リソースを作ります。
  3. ブラウザからアクセスできることを確認します。
$ cd /path/to/windows-kube-cluster/kube-cluster
$ vagrant ssh kube-master
$ vi nginx.yaml
  ※以下を参照
$ kubectl apply -f nginx.yaml
※ windows上のブラウザからhttp://192.168.33.101:30000にアクセス
nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      ports:
      - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
      nodePort: 30000

最後に

これでwindowsユーザーもハッピーコンテナライフ💛

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?