2018年5月26日土曜日

Ubuntu16.04 に kubernetes をインストールしてみた

概要

Ubuntu に kubernetes をインストールしてみました
今回はクラウドは使わず localhost の lxd 上に必要なコンポーネントをデプロイしています

環境

  • Ubuntu 16.04
  • conjure-up 2.5.6
  • kubernetes 1.10
  • lxd 3.0.0 (required)

snapd のインストール

  • apt -y install snapd

conjure-up のインストール

  • snap install conjure-up --classic

一旦ログアウトして再度ログインしましょう
conjure-up の設定を反映させます

lxd のインストール

今回は localhost に対して kubernetes 環境を構築するので lxd が必要になります
lxd 上に必要なコンポーネントをデプロイします

  • snap install lxd

lxd の初期化

  • lxd init

いろいろ聞かれます
3 箇所で設定を変更しています

  • Name of the storage backend to use -> dir
  • What IPv6 address should be used? -> none
  • Would you like LXD to be available over the network? -> yes

あとはすべてデフォルトを設定しています

Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:                                                             
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, ceph, dir, lvm, zfs) [default=zfs]: dir                                               
Would you like to connect to a MAAS server? (yes/no) [default=no]:                                                               
Would you like to create a new local network bridge? (yes/no) [default=yes]:                                                     
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:                                       
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none                                  
Would you like LXD to be available over the network? (yes/no) [default=no]: yes                                                  
Address to bind LXD to (not including port) [default=all]:
Port to bind LXD to [default=8443]:
Trust password for new clients:
Again:
No password set, client certificates will have to be manually trusted.Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

Error: Failed to create network 'lxdbr0': Failed to run: dnsmasq ... みたいなエラーが出る場合はすでに 53 ポートをバインドしているプロセスがあります (参考)
例えば bind などを動かしている場合はエラーになるので停止してあげます

  • systemctl stop bind9

ユーザの作成

conjure-up コマンドは root ユーザでは実行できないのでコマンドを実行する専用のユーザを作成します

  • adduser conjure
Adding user `conjure' ...
Adding new group `conjure' (1000) ...
Adding new user `conjure' (1000) with group `conjure' ...
The home directory `/home/conjure' already exists.  Not copying from `/etc/skel'.
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for conjure
Enter the new value, or press ENTER for the default
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] Y

こんな感じで作成すれば OK です
パスワードなど対話形式で聞かれますので適当に設定してください

あと lxd のグループに追加し sudo ができるようにします

  • usermod -a -G lxd conjure
  • gpasswd -a conjure sudo

移行の作業は作成した conjure ユーザで行います

kubernetes のインストール

  • su - conjure
  • conjure-up kubernetes

対話形式でインストールします
矢印の上下で「Kubernetes Core」を選択して Enter でインストールしましょう
ubuntu_kube1.png

どの環境を使用するか選択する画面になるので、今回は「localhost」を選択します
lxd が起動していれば localhost が選択できるようになっています
選択できない場合は lxd が起動しているか conjure ユーザが lxd グループに所属しているなど調べてください
ubuntu_kube2.png

ネットワークブリッジとストレージプールを選択します
とりあえずそのままで OK です
TAB でカーソルを Save に合わせて Enter で次に行きます
ubuntu_kube3.png

ネットワークプラグインは flannel を選択します
ubuntu_kube4.png

sudo のパスワードを入力します
ubuntu_kube5.png

各コンポーネントをデプロイする設定をします
ここもデフォルトで OK です
ubuntu_kube6.png

デプロイされるので待ちましょう
ubuntu_kube7.png

以下の画面にならないでエラーになってしまう場合は ufw をオフにしてみてください

  • ufw disable

lxd 上に各コンポーネントのデプロイが完了するまで待ちましょう
各コンポーネント間で連携チェックをしながらデプロイされるので、ここは割りと時間がかかります
maintenance や blocked のステータスを繰り返しますが active になるまで辛抱強く待ちます
ubuntu_kube8.png

すべて active になれば次に進みます
Quit でインストールを完了します
ubuntu_kube9.png

動作確認

kubectl コマンドが使えるので確認してみます

  • kubectl --kubeconfig=.kube/config cluster-info

これでダッシュボードの IP の情報や各コンポーネントのエンドポイントが表示されると思います

また lxc list コマンドで lxd 上に各コンポーネントがデプロイされていることも確認できると思います

+---------------+---------+-----------------------+------+------------+-----------+
|     NAME      |  STATE  |         IPV4          | IPV6 |    TYPE    | SNAPSHOTS |
+---------------+---------+-----------------------+------+------------+-----------+
| juju-6e5d3b-0 | RUNNING | 10.156.235.117 (eth0) |      | PERSISTENT | 0         |
+---------------+---------+-----------------------+------+------------+-----------+
| juju-de4886-0 | RUNNING | 10.156.235.71 (eth0)  |      | PERSISTENT | 0         |
|               |         | 10.1.82.0 (flannel.1) |      |            |           |
|               |         | 10.0.113.1 (lxdbr0)   |      |            |           |
+---------------+---------+-----------------------+------+------------+-----------+
| juju-de4886-1 | RUNNING | 172.17.0.1 (docker0)  |      | PERSISTENT | 0         |
|               |         | 10.156.235.35 (eth0)  |      |            |           |
|               |         | 10.1.5.1 (cni0)       |      |            |           |
|               |         | 10.1.5.0 (flannel.1)  |      |            |           |
+---------------+---------+-----------------------+------+------------+-----------+

おまけ kubernetes-master のエンドポイントにアクセスする

今回だと lxdbr0 の IP が振られてしまっているため Ubuntu からしかアクセスできません
が SSH のポートフォーワードを使えばクライアントマシンにアクセスすることでエンドポイントにアクセスすることができます

  • ssh -N -L localhost:6443:10.156.235.71:6443 root@kube -i /path/to/secret.pem

これで https://localhost:6443 で master の API 一覧を確認することができます
ちなみにパスワードは

  • kubectl --kubeconfig=.kube/config config view

で確認できます
ちなみにダッシュボード URL が長いのですが

  • https://10.156.235.71:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

ubuntu_kube10.png
でアクセスできます (IP の部分は各自の lxdbr0 の IP に変更してください)
ログインするには

  • kubectl -n kube-system get secret
  • kubectl -n kube-system describe secret default-token-bwmbd

で表示されるトークンを入力してください

最後に

Ubuntu16.04 上に kubernetes をインストールしてみました
嵌りポイントは少しありましたが割りとスムーズにインストールできました
過去に minikube を使った構築方法を紹介しましたが mac がない場合には今回の方法を使うと良いと思います

次回はこの環境にコンテナを立てたりしたいと思います

参考サイト

0 件のコメント:

コメントを投稿