このトピックでは、サービスのデプロイ方法を解説します。

始める前に

このタスクについて

カナリアデプロイメントまたはブルー/グリーンデプロイメントを使用すると、古いバージョンのサービスが動作する環境と同一の環境で、新しいバージョンのサービスを実行できます。 具体的には、古いバージョンに影響を与えることなく、古いバージョンが宛先となっているトラフィックの一部を、新しいバージョンのサービスに転送するルールを設定できます。 サービスの新しいバージョンが一定期間正常に動作した後、残りのトラフィックをサービスの新しいバージョンに転送できます。 次の手順では、サンプルサービスの古いバージョンとして lod-nginx という名前のサービスが作成されます。

手順

  1. Container Service コンソールにログインします。
  2. Container Service-Kubernetes の左側のナビゲーションウィンドウで、[アプリケーション] > [デプロイメント] を選択します。
  3. 右上隅の、[テンプレートによる作成] をクリックします。
  4. 対象となるクラスターおよび名前空間を選択し、サンプルテンプレートを選択するか、またはテンプレートをカスタマイズします。その後、[作成] をクリックします。

    この例では、テンプレートは、必要となるデプロイ、対象となるサービスおよび Ingress を含む Nginx アプリケーションをデプロイするように自動化されています。 デプロイは NodePort を使用してポートを公開します。 Ingress により、外部アクセスサービスが提供されます。 オーケストレーションテンプレートは以下のようになります。

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: old-nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          run: old-nginx
      template:
        metadata:
          labels:
            run: old-nginx
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/xianlu/old-nginx
            imagePullPolicy: Always
            name: old-nginx
            ports:
            - containerPort: 80
              protocol: TCP
          restartPolicy: Always
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: old-nginx
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: old-nginx
      sessionAffity: None
      type: NodePort
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
        name: gray-release
    spec:
      rules:
      - host: www.example.com
        http:
          paths:
          # The service of an earlier version.
          - path: /
            backend:
              serviceName: old-nginx
              servicePort: 80
  5. Container Service-Kubernetes の左側のナビゲーションウィンドウで、[ディスカバリとロードバランシング] > [Ingress] を選択します。
    "old-nginx" を指している仮想ホスト名が確認できます。
  6. マスターノードにログインします。"curl" コマンドを実行し、Ingress を表示します。
    curl -H "Host: www.example.com" http://<EXTERNAL_IP> 
    以下の 2 つのコマンドのどちらかを使用して <EXTERNAL_IP> の値を取得できます。
    • 以下のコマンドを実行します。
      kubectl get ingress
    • Container Service-Kubernetes の左側のナビゲーションウィンドウで、[ディスカバリとロードバランシング] > [Ingresses] を選択し、対象となる Ingress のエンドポイント情報を表示します。