k8s構築ツールの選択肢「Kubespray/kops」

【連載】

Kubernetes入門

【第13回】k8s構築ツールの選択肢「Kubespray/kops」

[2020/04/03 08:00]正野 勇嗣 ブックマーク ブックマーク

前回、k8s構築ツールの1つとしてHelmを紹介しました。

今回はKubespray/kopsを取り上げます。

表:Kubernetesの3つのユースケース(第3回の再掲) 

Kubespray

KubesprayはAnsibleベースのKubernetes構築ツールです。AWSやGCPなどのクラウド環境や、ベアメタル(RHELなどのOS)に対応しており、マルチノードクラスタを構築できます。

早速インストールしていきましょう。まずは、Kubesprayの公式リポジトリからgit cloneし、pipを使ってKubesprayを利用する際に必要なモジュールをインストールします。

$git clone https://github.com/kubernetes-incubator/kubespray.git
Cloning into 'kubespray'...
remote: Counting objects: 27935, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 27935 (delta 10), reused 10 (delta 1), pack-reused 27908
Receiving objects: 100% (27935/27935), 8.38 MiB | 226.00 KiB/s, done.
Resolving deltas: 100% (15357/15357), done.

$cd kubespray/
$python -V && pip -V
Python 3.6.5
pip 18.0 from /Users/yujishono/.pyenv/versions/3.6.5/lib/python3.6/site-packages/pip (python 3.6)

$sudo pip install -r requirements.txt

~中略~

  Running setup.py install for ansible-modules-hashivault ... done
Successfully installed ansible-2.6.4 ansible-modules-hashivault-3.9.7 asn1crypto-0.24.0 bcrypt-3.1.4 cffi-1.11.5 cryptography-2.3.1 hvac-0.6.4 netaddr-0.7.19 paramiko-2.4.1 pbr-4.2.0 pyasn1-0.4.4 pycparser-2.18 pynacl-1.2.1

Kubesprayを利用するための事前準備が終わったら、Ansible Playbookを使ってKubesprayをデプロイし、クラスタ環境を構築します。なお、Vagrantによる構築も可能です。

$cp -R inventory/sample inventory/mycluster

$declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
$CONFIG_FILE=inventory/mycluster/hosts.ini python3 contrib/inventory_builder/inventory.py ${IPS[@]}
DEBUG: Adding group all
DEBUG: Adding group kube-master

~中略~

DEBUG: adding host node5 to group kube-node
DEBUG: adding host node6 to group kube-node

$ansible-playbook -i inventory/mycluster/inventory.ini --become --become-user=root cluster.yml

デプロイが完了したら、クラスタ構築は完了です。masterノードにsshログインすることで、「kubectl get nodes」などkubectlによるクラスタ管理が可能になります。

kops

kopsはコマンドラインベースのKubernetesクラスタ構築ツールです。 AWSのみ公式サポートされており、GCEやOpenStackはベータ版として提供されています。 インフラ構成管理ツールであるTerraformの構成ファイルを生成することもできます。

早速、brewを使ってkopsをインストールします。

$brew install kops

~中略~

==> Installing kops
==> Downloading https://homebrew.bintray.com/bottles/kops-1.15.0.mojave.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/04/04fa19e30a1dee4d2c76b59d5c6b3742d80a91aefbd7bf5e3a3500ed4aef93bc?__gda__=exp=1578840225~hmac=8bf7258c667a19844cab1f85ff2bfd153eb37
################################################ 100.0%
==> Pouring kops-1.15.0.mojave.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
  /usr/local/Cellar/kops/1.15.0: 5 files, 134.7MB

~後略~

$

クラスタ作成時に必要な公開鍵を作成します。

$ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/yujishono/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/yujishono/.ssh/id_rsa.
Your public key has been saved in /Users/yujishono/.ssh/id_rsa.pub.
The key fingerprint is:
~後略~

AWSのCLIクライアントをインストールします。

$brew install awscli

~中略~

==> Installing awscli
==> Downloading https://homebrew.bintray.com/bottles/awscli-1.17.0.mojave.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/3a/3afb7070bd5b9f000d69a2e5864c3a8d71a3a3a956f1c3b60d24a8ff7454be32?__gda__=exp=1578842481~hmac=f326dfd476becb1769ec66fcca22911ea49ac
################################################ 100.0%
==> Pouring awscli-1.17.0.mojave.bottle.tar.gz
==> Caveats
The "examples" directory has been installed to:
  /usr/local/share/awscli/examples

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions and functions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
  /usr/local/Cellar/awscli/1.17.0: 8,955 files, 60.2MB

~中略~

==> awscli
The "examples" directory has been installed to:
  /usr/local/share/awscli/examples

~後略~

MFAを利用している場合にはAWS_SESSION_TOKENなどのセキュリティの設定を実施します。

※環境変数に設定する値の取得
$aws sts get-session-token --serial-number arn:aws:iam::[アカウント名]:mfa/[ユーザ名] --token-code [MFA値]
CREDENTIALS [AWS_ACCESS_KEY_IDに設定する値]   2020-01-25T12:27:52Z     [AWS_SECRET_ACCESS_KEYに設定する値]  [AWS_SESSION_TOKENに設定する値]

※環境変数の設定
$export AWS_ACCESS_KEY_ID=[上記で入手した値]
$export AWS_SECRET_ACCESS_KEY=[上記で入手した値]
$export AWS_SESSION_TOKEN=[上記で入手した値]

kopsクラスタで利用するS3を作成します。

$export S3_BUCKET=example-state-store-$(cat /dev/random | LC_ALL=C tr -dc "[:alpha:]" | tr '[:upper:]' '[:lower:]' | head -c 32)
$export KOPS_STATE_STORE=s3://${S3_BUCKET}
$aws s3 mb $KOPS_STATE_STORE
make_bucket: example-state-store-qupvccmguarvgzfydpzbczpnefizcynq
$aws s3api put-bucket-versioning \
>   --bucket $S3_BUCKET \
>   --versioning-configuration \
>   Status=Enabled

各種事前構築が完了し、いよいよkops create clusterコマンドでクラスタを作成します。

$kops create cluster \
>   --name example.cluster.k8s.local \
>   --zones ap-northeast-1a,ap-northeast-1c \
>   --yes
I0125 09:40:32.285453   47888 create_cluster.go:517] Inferred --cloud=aws from zone "ap-northeast-1a"
~中略~
I0125 09:40:59.668065   47888 update_cluster.go:294] Exporting kubecfg for cluster
kops has set your kubectl context to example.cluster.k8s.local
Cluster is starting.  It should be ready in a few minutes.
~後略~

作成したクラスタを検証し、ノードを確認します。

$kops validate cluster
Using cluster from kubectl context: example.cluster.k8s.local


State Store: Required value: Please set the --state flag or export KOPS_STATE_STORE.
For example, a valid value follows the format s3://<bucket>.
You can find the supported stores in https://github.com/kubernetes/kops/blob/master/docs/state.md.

$kubectl get nodes
NAME                                               STATUS   ROLES    AGE     VERSION
ip-172-20-45-180.ap-northeast-1.compute.internal   Ready    node     7d18h   v1.15.7
ip-172-20-49-131.ap-northeast-1.compute.internal   Ready    master   7d18h   v1.15.7
ip-172-20-79-6.ap-northeast-1.compute.internal     Ready    node     7d18h   v1.15.7

以上でクラスタ構築は完了です。

まとめ

今回は、k8sを簡単に使いこなす手段としてKubesprayとkopsを紹介しました。前回までに紹介したRancherやHelmと合わせて選択肢の1つとして押さえておくとよいでしょう。

次回は、軽量k8sツールであるMicroK8sとk3sを紹介します。併せて学習サイトとしてKatacodaを紹介します。

著者紹介


正野 勇嗣 (SHONO Yuji ) - NTTデータ 課長

2011年まで開発自動化技術のR&Dに従事。その後、開発プロジェクト支援やトラブルシューティング等に主戦場を移す。「ソースコード自動生成」に加えて、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、多様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盤自動化」の魅力に惹かれている。開発自動化技術に関する雑誌・記事執筆も行う。3児のパパ。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

働き方が多様化する今、「個人」と「企業」が変えるべき意識

働き方が多様化する今、「個人」と「企業」が変えるべき意識

コーナーストーンオンデマンドジャパンは2月26日、これからの人材育成の在り方をテーマに「コーナーストーン・タレントマネジメントフォーラム」を開催した。その基調講演には、経済産業省 産業人材政策室長 能村幸輝氏が登壇。日本における人材マネジメントの現状と課題を明らかにすると共に、今後の人材マネジメントや育成について語った。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします
注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
ミッションステートメント
教えてカナコさん! これならわかるAI入門
知りたい! カナコさん 皆で話そうAIのコト
対話システムをつくろう! Python超入門
Kubernetes入門
AWSで作るクラウドネイティブアプリケーションの基本
PowerShell Core入門
徹底研究! ハイブリッドクラウド
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

会員登録(無料)

ページの先頭に戻る