Amazon Web Services ブログ
kopsを使ってKubernetesクラスタをAWS上で構成
この記事では、KubernetesクラスタをAWS上で構成し運用するツールの1つであるkopsを利用すると、簡単にKubernetesを始められることをご紹介します。なお最新情報は、GitHubで公開しているAWS Workshop for Kubernetesをご覧頂き、さらに構築したクラスタを使って様々なワークショップをご自身の手で試して頂くことをお勧めします。
kopsについて
Kubernetesのトップレベルプロジェクトで、Kubernetesのクラスタを構成し運用するためのツールです。また、クラスタのローリングアップデートや、アドオンもサポートしています。必要に応じて、AWS CloudFormationやTerraformのテンプレートを出力することもできるので、それを基準にカスタムして行くということも可能です。
kopsをインストール
kopsは2017年12月26日時点では、macOS、Linux、Windows 10 Linux Subsystemで利用可能です。この記事ではmacOSを利用していきます。Homebrewが対応しているので以下のコマンドでインストールするのが最も簡単です:
SSH鍵の生成
kopsはクラスタ作成の際にSSHの公開鍵を利用します。デフォルトの配置場所は~/.ssh/id_rsa.pub
となります。ssh-keygen
コマンドを利用して作成しておきます。
AWS CLIとIAM権限の設定
もしAWS CLIがインストールされていなければインストールしておきます:
ローカル環境にIAMの権限が設定されていて、以下のポリシーを持っていることを確認します:
kops用のS3バケットの作成
kopsはクラスタの設定情報を保管するためのステートストアを必要とします。例えば、いくつのノードがクラスタにあって、インスタンスタイプは何で、Kubernetesのバージョンは何か等の情報を保存します。これらの状態はクラスタ作成時に保存されます。その後のクラスタの操作でも情報が更新されていきます。Amazon S3がAWSクラウド上でクラスタを実行する際にはお勧めです。以下の様にしてS3バケットを作成し、それをkops CLIに渡していきます。1つのステートストアで複数のkopsクラスタを持つことができます。
クラスタを作成する
kops CLIでクラスタを作成すると、その裏では以下のようなタスクが実行されます:
- EC2インスタンスのプロビジョン
- VPC、Auto Scaling Group、IAMロール、Security Group等のAWSリソースの作成と設定
- Kubrernetesのインストール
- (もし必要であれば) Route 53のDNSの設定
クラスタを作成する時に、クラスタ内のノード間通信をどのように実現するかで2つの選択肢があります:
- ゴシッププロトコルを利用 – kopsではゴシップベースのクラスタをサポートしています。Route 53への登録は必要なく、裏側ではWeave Meshを利用しています。ゴシップベースクラスタは簡単に素早くセットアップできるので、このワークショップではお勧めです。
- DNSを利用 – DNSのノードのディスカバリに利用する場合、自身で所有するドメイン(又はサブドメイン)が必要で、Route 53を設定する必要があります。これにより、複数のKubernetesのコンポーネントがDNS解決でお互いに通信したり、
kubectl
が直接マスターと通信することができます。
この記事では、ゴシップベースクラスタを作成してみますが、DNSベースクラスタでも同様にワークショップを実行することができます。
kopsを使ってゴシップベースクラスタを作成する
ゴシッププロトコルでクラスタを作成するには、クラスタ名のサフィックスに.k8s.local
を使います。この記事ではexample.cluster.k8s.local
をゴシップクラスタの名前として利用しますが、.k8s.local
で終わる異なる名前を利用することもできます。
デフォルトのゴシップベースクラスタ
デフォルトでは、create clusterコマンドは、シングルマスターと2つのワーカーノードを指定したAbailability Zoneに作成します。例として東京リージョンの2つのAZを指定しています:
もし、--yes
フラグを付けない場合には、S3バケットにクラスタの設定のみを保存します。その後、kops edit cluster example.cluster.k8s.local
コマンドで状態を確認し編集することもできます。それから実際にクラスタを作成する際には、以下のコマンドを実行します:
kops create cluster
が実行されると、EC2インスタンスのプロビジョン、Auto Scaling GroupやIAMロールやSecurity Groupの作成、各ノードへのKubernetesのインストール、マスターとワーカーノードの設定が行われます。ノードの数によっていくらかの時間がかかります。
5-8分程度待つと、以下の様にクラスタの確認ができます:
kubectl get node
でも状態が確認できるようになります:
ここから先は、kubectl
で自由に操作可能です。Kubernetes自身も初めてという方は、Kubernetes – First Steps with the Kubernetes CLIのワークショップから初めて見ると良いと思います。
ネットワーク構成について
Kubenretesではコンテナのネットワーク構成に幾つかの制約があり、それを満たすために各種実装が存在します。2017年12月26日時点でkopsをデフォルトで起動した場合にはkubenetという方式で構成します。こちらの構成の場合、VPCのルートテーブルの上限によって1クラスタ内のノードの数が最大50に制限されます。
kopsではオプションとして他にも様々なネットワークをサポートしており、先日mergeされたものとしてamazon-vpc-routed-eni
があります。こちらは、AWSが開発してGitHubにて公開しているCNI pluginを利用するオプションで、VPCの機能であるSecondary IPアドレスを利用してネットワーク構成を行うものになります。(注: 本記事公開時点でkopsから利用する場合は自身でkopsの最新版をビルドする必要があります) CNI pluginに興味のある方は、AWS re:Invent 2017のCON409 Amazon Elastic Container Service for Kubernetes Deep Diveをご覧頂くと良いと思います。
クラスタを削除する
最後に、クラスタの削除方法を紹介します。以下のコマンドで削除できます:
--yes
フラグを省略すると、削除対象のリソースが一覧で表示されるので、確認した後に--yes
を付けて実行することもできます。
ステートストア用のS3バケットを削除したければ、以下のコマンドを実行します:
まとめ
この記事では、kopsを使って簡単にAWS上にKubernetesクラスタを構築できることをご紹介しました。今回は紹介していませんが、kopsではマルチマスター構成はもちろん、多種多様な設定やオペレーションにも対応しています。また、kopsを使ったワークショップであるAWS Workshop for Kubernetesにはコンテンツが沢山ありますので、次のステップとしてぜひ試してみて下さい。
最後に、AWS re:Invent 2017においてAmazon Elastic Container Service for Kubernetes (Amazon EKS)のプレビューを発表しております。EKSを始め、Kubernetesやコンテナ周辺へのオープンソースとAWSの関わりについては、KubeCon + CloudNativeCon North America 2017のKeynoteでのAdrian Cockcroftの発表をご覧下さい。
SA岩永