Tectonic Installer で始める Kubernetes【デプロイ編】

kubernetes

はじめに

構築編にて、AWS 上に Tectonic 環境を構築しました。 Tectonic のチュートリアルに従い、アプリケーションを Tectonic にデプロイしてみたいと思います。

チュートリアルの詳細については、以下のリンクからご参照ください。

kubectl 構成情報の設定

kubectl コマンドから Tectonic クラスターに接続し操作するために、Tectonic Console から kubectl-config ファイルをダウンロードし設定を行います。 まずは、Tectonic Console へログインしてください。

Cluster Status · Tectonic

左側のメニューから、ユーザー名をクリックします。

Cluster Status · Tectonic1

次に My Account をクリックします。

Cluster Status · Tectonic2

Profile ページ中ほどにある "Download Configuration" ボタンをクリックします。

Cluster Status · Tectonic3

ID を確認するために、認証を要求されます。 Verify Identity ボタンをクリックします。

Cluster Status · Tectonic4

別タブにて Tectonic Console のログイン画面が表示されました。ログイン時と同様に、Eメールアドレスとパスワードを入力してから Login ボタンをクリックします。

Cluster Status · Tectonic5

ログイン後、認証コードが表示されます。認証コードをコピーしてください。

Cluster Status · Tectonic6

Profile ページに戻ると、認証コードの入力が要求されているためさきほどコピーした認証コードをペーストします。最後に Generate Configuration ボタンをクリックします。

Cluster Status · Tectonic7

Download Configuration リンクをクリックし、kubectl-config ファイルをダウンロードします。ステップに記載された内容に従って環境設定を行います。作業完了後に "I'm Done" ボタンをクリックします。以下は、macOS の場合の手順です。

$ brew install kubectl
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.4", GitCommit:"793658f2d7ca7f064d2bdf606519f9fe1229c381", GitTreeState:"clean", BuildDate:"2017-08-17T17:03:51Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.1+coreos.0", GitCommit:"fdd5383472eb43e60d2222503f03c76445e49899", GitTreeState:"clean", BuildDate:"2017-07-18T19:44:47Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
$ mkdir -p ~/.kube/
$ cp ~/Downloads/kubectl-config ~/.kube/config
$ kubectl get namespaces
NAME              STATUS    AGE
default           Active    41m
kube-public       Active    41m
kube-system       Active    41m
tectonic-system   Active    37m

kubectl のインストール方法と設定については、以下のドキュメントをご参照ください。

サンプルアプリケーションをデプロイする

シンプルでステートレスなWebサイトをクラスタに展開します。以下のファイルを作成してください。

  • simple-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: simple-deployment
  namespace: default
  labels:
    k8s-app: simple
spec:
  replicas: 3
  template:
    metadata:
      labels:
        k8s-app: simple
    spec:
      containers:
        - name: nginx
          image: quay.io/coreos/example-app:v1.0
          ports:
            - name: http
              containerPort: 80

simple-deployment.yaml の定義に従い、quay.io/coreos/example-app:v1.0 イメージをベースに、replicas: で指定された3つのコンテナ(Pod)を起動します。

 ~/local/tectonic $ kubectl get deployments
No resources found.
 ~/local/tectonic $ kubectl create -f simple-deployment.yaml
deployment "simple-deployment" created
 ~/local/tectonic $ kubectl get deployments
NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
simple-deployment   3         3         3            0           4s

SSH agent forwarding を有効化し、Master ノード経由で Worker ノードへ SSH 接続してみます。

$ ssh-add -K ~/.ssh/your_key
$ ssh -A core@<master-node>
$ ssh core@ip-10-0-98-78.ap-northeast-1.compute.internal
core@ip-10-0-98-78 ~ $ docker ps | egrep 'COMMAND|example-app'
CONTAINER ID        IMAGE                                                                                                                       COMMAND                  CREATED             STATUS              PORTS               NAMES
7dca8803f386        quay.io/coreos/example-app@sha256:0dbf64d8a8a7889dd350d49d3ba8fa34a4b2d2b4f609f548b164cbaedeb28473                          "nginx -g 'daemon off"   9 minutes ago       Up 9 minutes                            k8s_nginx_simple-deployment-4098151155-1qj4k_default_51337eec-8976-11e7-92db-0a1cd89222a6_0
012b92ea58db        quay.io/coreos/example-app@sha256:0dbf64d8a8a7889dd350d49d3ba8fa34a4b2d2b4f609f548b164cbaedeb28473                          "nginx -g 'daemon off"   9 minutes ago       Up 9 minutes                            k8s_nginx_simple-deployment-4098151155-dnvrl_default_5133786c-8976-11e7-92db-0a1cd89222a6_0
81ee99ab8fd8        quay.io/coreos/example-app@sha256:0dbf64d8a8a7889dd350d49d3ba8fa34a4b2d2b4f609f548b164cbaedeb28473                          "nginx -g 'daemon off"   9 minutes ago       Up 9 minutes                            k8s_nginx_simple-deployment-4098151155-s2mjk_default_513370b0-8976-11e7-92db-0a1cd89222a6_0

本来であれば複数のWorkerノードをクラスターに構成し、コンテナを分散配置するものと思われます。しかしながら、本記事ではWorkerノードが1台構成のため、全てのコンテナ(quay.io/coreos/example-appイメージのPodが3つ)が、1台のWorkerノード上に起動されていることが確認出来す。

では、Tectonic Console から確認してみます。

Cluster Status · Tectonic8

左側メニューのPodsをクリックします。既に起動されているPodsが他にもあるため、ページ右上に位置する検索フィルターでsimple-deploymentを入力し抽出します。先程起動した3つのPodを確認できました。どれか1つのコンテナのリンクをクリックし、詳細を確認してみます。

Cluster Status · Tectonic9

色々な情報が表示されていることを確認出来ました。

次に、サービスを定義し、ロードバランサー(ELB)配下に配置します。なお、ELB の設定が完了するまで数分掛かる場合があります。

以下のファイルを作成してください。

  • simple-service.yaml
kind: Service
apiVersion: v1
metadata:
  name: simple-service
  namespace: default
spec:
  selector:
    k8s-app: simple
  ports:
  - protocol: TCP
    port: 80
  type: LoadBalancer

サービスを作成します。

 ~/local/tectonic $ kubectl get services -o wide
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE       SELECTOR
kubernetes   10.3.0.1     <none>        443/TCP   2h        <none>
 ~/local/tectonic $ kubectl create -f simple-service.yaml
service "simple-service" created
 ~/local/tectonic $ kubectl get services -o wide
NAME             CLUSTER-IP     EXTERNAL-IP                                                                   PORT(S)        AGE       SELECTOR
kubernetes       10.3.0.1       <none>                                                                        443/TCP        2h        <none>
simple-service   10.3.110.238   a8d3**************************************.ap-northeast-1.elb.amazonaws.com   80:32646/TCP   3s        k8s-app=simple

作成できました。EXTERNAL-IP列にELBのDNS名が表示されています。マネジメントコンソールから、ELB を確認してみます。

Cluster Status · Tectonic12

作成されていますね。ELB 経由でサンプルのWebサイトにアクセス出来るか確認してみます。

Cluster Status · Tectonic13

チュートリアルの例示された Web サイトと同様のページが表示されました。

では最後に、Tectonic Console からサービスを確認してみます。

Cluster Status · Tectonic10

左側のメニューから Routing をクリックし、Services をクリックします。ページ右上に位置する検索フィルターで simple-service と入力することにより simple-service のみ抽出できます。simple-service のリンクをクリックし、詳細を確認してみます。

Cluster Status · Tectonic11

ELB の情報など含め、色々な情報が確認できました。

後始末

デプロイしたアプリケーションおよびサービスを削除します。

 ~/local/tectonic $ kubectl delete deploy/simple-deployment svc/simple-service
deployment "simple-deployment" deleted
service "simple-service" deleted
 ~/local/tectonic $ kubectl get deployments
No resources found.
 ~/local/tectonic $ kubectl get services -o wide
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE       SELECTOR
kubernetes   10.3.0.1     <none>        443/TCP   2h        <none>

上記のコマンド実行後、ELB も削除されていました。

さいごに

本記事では、Tectonic 環境でのアプリケーションデプロイ方法をご紹介しました。チュートリアルでは、次にアプリケーションのスケーリングに関する記事が続きます。

アプリケーションのスケーリング方法については、続編をご期待ください。