コンテナイメージデプロイメントパッケージを使用して、コンテナイメージバージョンを管理し、ゼロからの再デプロイなしでサービスインスタンスに更新をロールアウトします。このチュートリアルでは、デプロイメントパッケージの作成、その上にサービスを構築する方法、そして新しいイメージバージョンを出荷するためにパッケージとサービスの両方をアップグレードする方法について説明します。
この例では、NGINX イメージを使用して、NGINX 1.7 から開始し、NGINX 1.8 へアップグレードするというフル更新サイクルをシミュレートします。
仕組み
コンテナイメージデプロイメントパッケージは、コンテナイメージのバージョン管理されたアーティファクトストアとして機能します。コンポーネントは次のように相互に関連します。
デプロイメントパッケージは、Alibaba Cloud Container Registry (ACR) にコンテナイメージの1つ以上のバージョンを保存します。
サービスは、特定のデプロイパッケージバージョンを参照します。ROS テンプレートは、
{{ computenest::acrimage::nginx }}プレースホルダーを使用して、デプロイ時にイメージを注入します。サービスインスタンスは、サービスから作成されます。サービスをアップグレードして新しいデプロイパッケージバージョンを参照すると、顧客は既存のサービスインスタンスをアップグレードして新しいイメージをプルできます。
ワークフローの概要
このチュートリアルでは、次の7つのステップについて説明します。
デプロイメントパッケージの作成と公開 (NGINX 1.7)
そのパッケージにリンクされたサービスの作成
サービスインスタンスの作成と初期イメージバージョンの確認
新しいデプロイパッケージバージョンの追加 (NGINX 1.8)
更新されたパッケージを指す新しいサービスバージョンの作成
サービスインスタンスを新しいバージョンへアップグレード
アップグレードが成功したことの検証
前提条件
開始する前に、以下があることを確認してください。
ACK クラスター。このチュートリアルでのコンテナリソースは、Container Service for Kubernetes (ACK) クラスターで作成されます。作成するには、「ACK マネージドクラスターの作成」をご参照ください。
NGINX 1.7 および 1.8 イメージがご利用のローカルマシンにプルされていること。
docker pull nginx:1.7 docker pull nginx:1.8
ステップ 1: デプロイメントパッケージの作成と公開
Compute Nest コンソールにログインします。
左側のナビゲーションウィンドウで、[サービスデプロイメントパッケージ] をクリックします。[パッケージ] タブで、[デプロイメントパッケージの作成] をクリックします。
デプロイメントパッケージの作成ページで、[基本情報] セクションに情報を入力し、アクセス認証情報を取得して、プロンプトに従って NGINX 1.7 イメージを選択します。完全な構成のリファレンスについては、「デプロイメントパッケージの管理」をご参照ください。
[デプロイメントパッケージの公開] をクリックしてください。
[パッケージ]タブで、新しいデプロイメントパッケージの名前をクリックします。デプロイメントパッケージの詳細ページで、ステータス が 利用可能 と表示されていることを確認します。
ステップ 2: サービスの作成
Compute Nest コンソールにログインします。
左側のナビゲーションウィンドウで、[マイサービス] をクリックします。「[作成済みサービス]」タブで、[サービスの作成] をクリックします。
サービスの作成ページで、以下を構成します。その他のすべてのサービスパラメーターについては、「プライベートサービスの作成」をご参照ください。
[テンプレートコンテンツ] フィールドに、サンプルテンプレート セクションのサンプル ROS テンプレートを貼り付けます。このテンプレートは、カスタムイメージから Elastic Compute Service (ECS) インスタンスを作成し、コンテナ化アプリケーションを ACK にデプロイします。
[サービスデプロイメント] セクションで、[デプロイメントパッケージの関連付け] を探します。[コンテナイメージの関連付けの設定] の下にある [デプロイメントパッケージの選択] をクリックして、サービスをデプロイメントパッケージに関連付けます。バージョンとして [Version1] を選択します。
[サービスを作成] をクリックします。
サービスをテストし、期待どおりに動作することを確認します。詳細については、「サービスのテスト」をご参照ください。
サービスをレビューのために提出し、レビューが通過したら公開します。詳細については、「サービスの公開」をご参照ください。
ステップ 3: サービスインスタンスの作成とイメージバージョンの検証
顧客としてサービスインスタンスを作成します。詳細については、「プライベートサービスインスタンスの作成」をご参照ください。
Compute Nest コンソールで、[サービスインスタンス] に移動します。[マイサービスインスタンス] タブで、サービスインスタンスの ID をクリックしてサービスインスタンス詳細ページを開きます。[サービス情報] セクションで、現在の サービスバージョン を確認します。
ACK コンソールに移動し、NGINX 1.7 イメージが実行中であることを確認します。
ステップ 4: デプロイメントパッケージの更新
NGINX 1.8 イメージでデプロイメントパッケージに新しいバージョンを追加します。
Compute Nest コンソールにログインします。
左側のナビゲーションウィンドウで、[サービスデプロイパッケージ]をクリックします。
「[パッケージ]」タブで、デプロイメントパッケージを見つけ、「[バージョンの作成]」をクリックします。バージョンの作成ページで、アクセス認証情報を取得し、NGINX 1.8 イメージを選択します。
[デプロイメントパッケージの公開] をクリックします。
ステップ 5: サービスの更新
更新されたデプロイメントパッケージを参照する新しいサービスバージョンを作成します。
Compute Nest コンソールにログインします。
[マイサービス] に移動します。[作成済みサービス] タブで対象のサービスを探し、[バージョンを作成] をクリックします。[バージョンを作成] ダイアログボックスで [コンソールで作成] を選択し、[OK] をクリックします。
バージョンの作成ページで、以下を更新します。
[サービスデプロイメント] セクションで、[デプロイメントパッケージの関連付け] の下にある [コンテナイメージの関連付けを設定] を見つけ、イメージを更新されたデプロイメントパッケージ(NGINX 1.8 バージョン)のものに置き換えます。
「[サービス運用管理(オプション)]」セクションで、「[スペックアップ]」を展開し、スペックアップ設定を構成します。
パラメーター 説明 nst.vendor.create.upgrade.type.desc お客様によるサービスインスタンスのスペックアップを許可するかどうかをコントロールします。この設定を有効にしてください。 お客様によるロールバック お客様がスペックアップをロールバックできるかどうかをコントロールします。この設定を有効にしてください。 nst.vendor.create.upgrade.description.label スペックアップ実行時にお客様に表示される備考欄です。NGINX 1.8 を入力してください。 nst.vendor.create.upgrade.version.label 本スペックアップが適用可能なサービスインスタンスのバージョンです。「すべてのバージョン」がデフォルト値です。 nst.vendor.create.upgrade.components.label スペックアップに含まれるコンポーネントです。「サービス構成」がデフォルト値です。 [サービスの保存] をクリックします。
ステップ 6: サービスインスタンスのアップグレード
Compute Nest コンソールにログインします。
左側のナビゲーションウィンドウで、[サービスインスタンス] をクリックします。
[マイサービスインスタンス] タブで、サービスインスタンスの ID をクリックして、サービスインスタンスの詳細ページに移動します。右上隅で、[サービスインスタンスのアップグレード] をクリックします。
「[サービスインスタンスのアップグレード]」ダイアログボックスで、対象バージョンを選択し、「[アップグレードの開始]」をクリックします。
ステップ 7: アップグレードの検証
Compute Nest コンソールにログインします。
左側のナビゲーションウィンドウで、[サービスインスタンス]をクリックします。
[マイサービスインスタンス]タブで、スペックアップされたサービスインスタンスの ID をクリックして、サービスインスタンスの詳細ページを開きます。[サービス情報]セクションで、[サービスバージョン] が新しいバージョンを反映していることを確認します。
ACK コンソールに移動し、実行中の NGINX イメージが 1.8 に更新されていることを確認します。
サンプルテンプレート
次の ROS テンプレートは、Kubernetes Secret (ACR 認証用) と NGINX Deployment をご利用の ACK クラスターにデプロイします。{{ computenest::acr::dockerconfigjson }} および {{ computenest::acrimage::nginx }} プレースホルダーは、関連付けられたデプロイパッケージバージョンに基づいて、デプロイ時に Compute Nest によって解決されます。
ROSTemplateFormatVersion: '2015-09-01'
Description:
en: A simple demo that deploys a MySQL and a container-base app into ack.
ja: MySQL とコンテナベースのアプリケーションを ACK にデプロイするシンプルなデモ。
Parameters:
ClusterId:
Type: String
Description:
en: >-
The ID of Kubernetes ClusterId in which application deployed.
ja: >-
アプリケーションがデプロイされている Kubernetes ClusterId の ID。
AllowedPattern: '[0-9a-z]+$'
Label:
en: Kubernetes ClusterId
ja: Kubernetes ClusterId
ConstraintDescription:
en: >-
must be lowercase letters or numbers
ja: >-
小文字または数字である必要があります
Resources:
ClusterApplication:
Type: ALIYUN::CS::ClusterApplication
Properties:
ClusterId:
Ref: ClusterId
DefaultNamespace:
Ref: ALIYUN::StackName
YamlContent: |
apiVersion: v1
data:
.dockerconfigjson: {{ computenest::acr::dockerconfigjson }}
kind: Secret
metadata:
name: computenest
type: kubernetes.io/dockerconfigjson
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: {{ computenest::acrimage::nginx }}
ports:
- containerPort: 80
imagePullSecrets:
- name: computenest
---
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx-svc
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ClusterId
Label:
en: ACK Configuration
ja: ACK 構成次のステップ
サービスの更新 — 利用可能なすべての更新パラメーターについて学習します
デプロイメントパッケージの管理 — バージョンを管理し、古いバージョンを制限し、パッケージステータスを監視します