LoginSignup
1
2

More than 5 years have passed since last update.

Kubernetes上にアプリを展開する

Last updated at Posted at 2018-12-05

この記事は、「オンプレミス、Kubernetesで、マイクロサービスを意識したWebアプリをデプロイするまでの軌跡」の一部です。

はじめに

Kubernetesの設定が終わったら、実際に作ったアプリをKubernetes上にデプロイしていきます。
前提として、アプリはDockerイメージ化されており、Kubernetesが動いているサーバーからアクセスできるDockerレジストリに登録されている必要があります。

ここでは、プライベートなDockerレジストリが192.168.0.xxx:5000で動いていると想定して進めていきます。

yamlを書いて、デプロイ

今までのシリーズ記事でも使ってきましたが、Kubernetesではyaml形式でデプロイするアプリについての情報を書くことが出来ます。

yamlファイルでは複数の設定を一つにまとめる事が出来るので、以下のようなファイルで1つのアプリを表現することが出来ます。

app.yaml
apiVersion: v1
kind: Service
metadata:
  name: sample-service
  namespace: sample-namespace
  labels:
    app: sample-service
spec:
  type: NodePort
  ports:
  - port: 80                <---- アプリが動作するポート
    targetPort: 80          <---- アプリが動作するポート
    protocol: TCP
  selector:
    app: sample-deployment
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: sample-deployment
  namespace: sample-namespace
spec:
  replicas: 1
  revisionHistoryLimit: 3
  template:
    metadata:
      namespace: sample-namespace
      labels:
        app: sample-deployment
        version: latest
    spec:
      containers:
      - name: sample-deployment
        image: 192.168.0.xxx:5000/sample/sampmle-image:latest
        ports:
        - containerPort: 80 <---- アプリが動作するポート

今回は80番で動作するアプリが動いているので80番を指定していますが、4000番で動いているなら4000を、8080が動いているなら8080を指定してください。

Kubernetesでは色々な機能があるのですが、僕の理解では、以下の2つがあればとりあえずアプリを公開することが出来ます。

  • Deployment

コンテナイメージを持ってきて、適切なノードの上に展開してくれます。アプリを更新する際も、サービスを止める事無く更新できるように配慮してくれます。
また、同じコンテナを複数立ち上げたり、逆に不要なものを削除したりして、スケーラビリティを確保します。しかし、コンテナが増えたり減ったりする状況で、我々ユーザーはどのコンテナにアクセスすれば良いのでしょうか?
これを解決するのがServiceです。

  • Service

自分が管理するコンテナに対する通信を一手に引き受け、状況に応じて適切なコンテナにアクセスを割り振ってくれます。

ひとまず、このセットがあれば最低限アプリは動くと思います。

$ kubectl apply -f app.yaml

今回のyamlではnamespaceを指定しているので、もし存在しない場合は先に作成してください。

$ kubectl create namespace sample-namespace

デプロイされたポートを確認

デプロイされると、今回の設定では、自動的に外部からアクセスするためのポートが割り振られます。Serviceの情報を見ると、振られたポートが確認できます。

$ kubectl get services -n sample-namespace
NAME             TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
sample-service   NodePort   10.107.212.223   <none>        80:30380/TCP   71m

今回の場合は、以下のアドレスでアクセスできます。

<Kubernetesが動いているip>:30380

アクセスした結果、想定通りの挙動が得られれば成功です。
お疲れさまでした!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2