DEV Community

nasa9084
nasa9084

Posted on • Originally published at blog.web-apps.tech on

kubesprayを使用してkubernetes clusterを構築する(2)

this post originally appears on blog.web-apps.tech

kubesprayを使用してkubernetes clusterを構築する(2)

3ヶ月ほど前に、kubesprayを使用してkubernetes clusterを構築するという、kubesprayとkubespray-cliを使用してKubernetesクラスタを構築する記事を書きました。

しかし、kubespray-cliはすでにdeprecatedだということなので、kubespray-cliを使用せずにkubesprayでクラスタを構築する手順をまとめておきます。

要件

kubesprayを使用してkubernetesクラスタを構築するための要件は以下のようになっています。

  • ansible 2.4以降とpython-netaddr (python-netaddrを忘れがちなので注意)
    • pip install ansible netaddr
  • Jinja 2.9以降(ansibleの依存でインストールされると思います)
  • 構築先サーバがインターネットに接続できること
  • 構築先サーバでIPv4 forwardingが有効になっていること
    • sysctl -w net.ipv4.ip_forward=1する(再起動するまで)
    • /etc/sysctl.confnet.ipv4.ip_forward = 1と記入する(再起動後)
  • Ansibleを実行するマシンから構築先サーバにSSH鍵が渡されていること
  • ファイアウォールが無効化されていること
    • ファイアウォールの設定をしっかりできる人は有効でも

また、kubesprayには(kubespray-cliのような)inventory生成ツールが付属されており、これを利用する場合はpython3系である必要が有ります。

構成

前回の記事同様、以下のIPを持った三台のサーバを対象として構築してみます。

  • 192.168.1.11
  • 192.168.1.12
  • 192.168.1.13

それぞれ、IPv4 forwardingが有効化され、firewalldを無効化し、Python 3をインストール済みのCentOS 7のサーバとします。また、kubesprayを実行するローカルマシンから、各サーバのrootユーザにSSH鍵を配置[1]済みとします。

手順

準備

まず、kubesprayをダウンロードします。

$ git clone https://github.com/kubernetes-incubator/kubespray
$ cd kubespray
Enter fullscreen mode Exit fullscreen mode

リポジトリのクローンが完了したら、ansibleなどの依存モジュールを導入します[2]

kubespray$ pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode

次に、ansible用のインベントリを作成します。

kubespray$ cp -rfp inventory/sample inventory/mycluster
kubespray$ declare -a IPS=(192.168.1.11 192.168.1.12 192.168.1.13)
CONFIG_FILE=inventory/mycluster/hosts.ini python3 contrib/inventory\builder/inventory.py ${IPS[@]}
Enter fullscreen mode Exit fullscreen mode

IPSは対象サーバのIPに合わせて定義をします。

また、環境によっては、python3コマンドではなく、pythonコマンドでPython 3が実行される場合も有ります。適宜読み替えてください。

最後に、構成するkubernetesクラスタの設定をします。inventory/mycluster/group_varsディレクトリにある、all.ymlk8s-cluster.ymlを適宜変更します。

特に、k8s-cluster.ymlに含まれる、以下の項目は確認しておく必要があるでしょう。

  • kube_version
    • kubernetesのバージョンを指定します。
  • kube_network_plugin
    • kubernetesのnetwork pluginを指定します。初期値はcalicoですが、flannelが一般的です。[3]
  • kube_service_addresses, kube_pods_subnet
    • kubernetes内部で使用するIPの範囲をCIDR形式で指定します。LAN内のネットワークとかぶらないよう注意しましょう。
  • dashboard_enabled
    • kubernetes dashboardを用意するかどうかの真偽値です。初期値はtrueです。trueの場合、RBACが有効になっている必要があります。
  • helm_enabled, istio_enabled, registry_enabled
    • それぞれ、kubernetes Helm、Istio、Docker registryをデプロイするかどうかの真偽値です。インストールする予定ならここでtrueにしておくと楽です。

設定が完了したら、準備は終了です。

デプロイする

準備ができたら、デプロイしましょう!

とはいっても、ココまで来たら後は普通にansible playbookを流し込むだけです。

次のコマンドを実行します。

kubespray$ ansible-playbook -i inventory/mycluster/hosts.ini cluster.yml
Enter fullscreen mode Exit fullscreen mode

エラーを出さずに終了したら、kubernetesのデプロイは完了です!

kubernetesを操作する

デプロイできたら、kubernetesを操作してみましょう。

一番前に指定したサーバにSSHで接続し、kubectlを使って操作します。

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 Ready master,node 10d v1.9.2+coreos.0
node2 Ready master,node 10d v1.9.2+coreos.0
node3 Ready node 10d v1.9.2+coreos.0
Enter fullscreen mode Exit fullscreen mode

また、LAN内の他のマシンから操作できるように、管理者アカウントを追加してみましょう。

$ kubectl create serviceaccount nasa
serviceaccount "nasa" created
$ kubectl create clusterrolebinding nasa --clusterrole cluster-admin --serviceaccount=default:nasa
clusterrolebinding "nasa" created
Enter fullscreen mode Exit fullscreen mode

追加できたら、トークンを確認します。

$ kubectl describe serviceaccount nasa
Name: nasa
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: nasa-token-pcn8j
Tokens: nasa-token-pcn8j
Events: <none>
$ kubectl describe secret nasa-token-pcn8j
Name: nasa-token-pcn8j
Namespace: default
Labels: <none>
Annotations: kubernetes.io/service-account.name=nasa
              kubernetes.io/service-account.uid=8916621a-1010-11e8-8bf3-0200c0a80130

Type: kubernetes.io/service-account-token

Data
====
ca.crt: 1090 bytes
namespace: 7 bytes
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwaa3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Im5yc2EtdG9rZW4tcGNuOGoiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoibmFzYSIsImt1YmVybmV0ZXMuaW8dc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6Ijg5MTY2MjFhLTEwMTAtMTFlOC04YmYzLTAyMDBjMGE4MDEfMCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDgkZWZhdWx0Om5hc2FifQ.D1o3Jvko91dX6pk2qG505dd2zaXW468GGc9RT6eSzJlrjEG7UEtjF9vlhy7c3BegjPddpPpHsc_ouMx5BAmFdWh74v-PvxnX0IKsCVt_9dlSAcxbbk2PSOloqiwMxTs5q-j6y0Tx64zKzq5e520cNBQrkjJV96-f_riRHHXCrLXQKh2vroh_kpVDViQPqM-e4UKLU4zINGHnraouc7T95ib5wIMcVHEejgsZvF-hLgItxiMAhu4NQXzJ2gM4tMhXupgQZLL1-N_oqoTCNFssPQcoE9Ziyj9_RBkUoodhizpxGOKMFogUgG07DRae4OkEjywoR5xDAuQSJMPihTPqzw
Enter fullscreen mode Exit fullscreen mode

kubectlコマンドをインストールした、別のマシンにトークンを設定します。

$ kubectl config set-cluster mycluster --server=https://192.168.1.11:6443 --insecure-skip-tls-verify=true
$ kubectl config set-credentials mycluster --token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwaa3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Im5yc2EtdG9rZW4tcGNuOGoiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoibmFzYSIsImt1YmVybmV0ZXMuaW8dc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6Ijg5MTY2MjFhLTEwMTAtMTFlOC04YmYzLTAyMDBjMGE4MDEfMCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDgkZWZhdWx0Om5hc2FifQ.D1o3Jvko91dX6pk2qG505dd2zaXW468GGc9RT6eSzJlrjEG7UEtjF9vlhy7c3BegjPddpPpHsc_ouMx5BAmFdWh74v-PvxnX0IKsCVt_9dlSAcxbbk2PSOloqiwMxTs5q-j6y0Tx64zKzq5e520cNBQrkjJV96-f_riRHHXCrLXQKh2vroh_kpVDViQPqM-e4UKLU4zINGHnraouc7T95ib5wIMcVHEejgsZvF-hLgItxiMAhu4NQXzJ2gM4tMhXupgQZLL1-N_oqoTCNFssPQcoE9Ziyj9_RBkUoodhizpxGOKMFogUgG07DRae4OkEjywoR5xDAuQSJMPihTPqzw
$ kubectl config set-context mycluster --cluster=mycluster --user=mycluster
$ kubectl config use-context mycluster
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 Ready master,node 10d v1.9.2+coreos.0
node2 Ready master,node 10d v1.9.2+coreos.0
node3 Ready node 10d v1.9.2+coreos.0
Enter fullscreen mode Exit fullscreen mode

無事、アクセスすることができました!

今回はclusterの設定で--insecure-skip-tls-verify=trueとし、TLSの確認を省略しましたが、マスターノードの/etc/kubernetes/ssl/apiserver.pemをコピーしてきて、kubectl config set-cluster--certificate-authority=に指定することで、TLSを確認した上で使用することができます。

楽しいkubernetesライフを送りましょう!


  1. ssh-copy-idコマンドを利用すると便利です。 ↩︎

  2. 環境によってはsudoが必要かもしれません。 ↩︎

  3. 個人的にはcontivで構成しています。深い意味はありませんが、Web UIがついているのが気に入っています。 ↩︎

AWS Q Developer image

Your AI Code Assistant

Automate your code reviews. Catch bugs before your coworkers. Fix security issues in your code. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay