Tectonic Installer で始める Kubernetes【デプロイ編】
はじめに
構築編にて、AWS 上に Tectonic 環境を構築しました。 Tectonic のチュートリアルに従い、アプリケーションを Tectonic にデプロイしてみたいと思います。
チュートリアルの詳細については、以下のリンクからご参照ください。
kubectl 構成情報の設定
kubectl コマンドから Tectonic クラスターに接続し操作するために、Tectonic Console から kubectl-config ファイルをダウンロードし設定を行います。 まずは、Tectonic Console へログインしてください。
左側のメニューから、ユーザー名をクリックします。
次に My Account をクリックします。
Profile ページ中ほどにある "Download Configuration" ボタンをクリックします。
ID を確認するために、認証を要求されます。 Verify Identity ボタンをクリックします。
別タブにて Tectonic Console のログイン画面が表示されました。ログイン時と同様に、Eメールアドレスとパスワードを入力してから Login ボタンをクリックします。
ログイン後、認証コードが表示されます。認証コードをコピーしてください。
Profile ページに戻ると、認証コードの入力が要求されているためさきほどコピーした認証コードをペーストします。最後に Generate Configuration ボタンをクリックします。
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 から確認してみます。
左側メニューのPodsをクリックします。既に起動されているPodsが他にもあるため、ページ右上に位置する検索フィルターでsimple-deploymentを入力し抽出します。先程起動した3つのPodを確認できました。どれか1つのコンテナのリンクをクリックし、詳細を確認してみます。
色々な情報が表示されていることを確認出来ました。
次に、サービスを定義し、ロードバランサー(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 を確認してみます。
作成されていますね。ELB 経由でサンプルのWebサイトにアクセス出来るか確認してみます。
チュートリアルの例示された Web サイトと同様のページが表示されました。
では最後に、Tectonic Console からサービスを確認してみます。
左側のメニューから Routing をクリックし、Services をクリックします。ページ右上に位置する検索フィルターで simple-service と入力することにより simple-service のみ抽出できます。simple-service のリンクをクリックし、詳細を確認してみます。
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 環境でのアプリケーションデプロイ方法をご紹介しました。チュートリアルでは、次にアプリケーションのスケーリングに関する記事が続きます。
アプリケーションのスケーリング方法については、続編をご期待ください。