このトピックでは、Alibaba Cloud Container Service for Kubernetes (ACK) で、Kubernetes サービスを作成する方法について説明します。
背景情報
Kubernetes サービス (Alibaba Cloud Container Service for Kubernetes のこのトピックおよび関連トピックでは、サービスという)は、ポッドの論理セットとポッドにアクセスするためのポリシーを定義する、抽象オブジェクトです。 通常、ラベルセレクターは、サービスの対象となるポッドのセットを決定します。
Kubernetes クラスターでは、各ポッドには独自の IP アドレスがあり、デプロイメントのポッドはいつでも削除できます。 ただし、この操作で、ポッドの IP アドレスが変更されます。 そのため、ポッドの IP アドレスを直接使用すると、シナリオが高可用性を提供しないため、効果的ではありません。 Kubernetes サービスは、フロントエンドとバックエンドの関係を切り離すことができます。 具体的に言うと、Kubernetes サービスは、バックエンドの動作がフロントエンドに影響を与えない疎結合サービスソリューションです。
詳しくは、「Kubernetes service」をご参照ください。
制限事項
- 既存の SLB インスタンスが再利用される場合、SLB インスタンスの新しいリスナーが作成され、SLB インスタンスの元のリスナーが上書きされます。
- コンソール、または API を使用して手動で作成した SLB インスタンスのみ再利用できます。 SLB インスタンスがサービス用にシステムによって自動的に作成された場合、他のサービスで再利用することはできません。 再利用された SLB インスタンスが誤って削除される可能性があるからです。
- 同じ SLB インスタンスを再利用する複数のサービスは、同じフロントエンドリスニングポートを持つことはできません。 ポートの競合が発生してしまうからです。
- 再利用された SLB インスタンスのリスナーと仮想サーバーグループの名前は変更できません。
- SLB インスタンスは、Kubernetes クラスター全体のサービスでは再利用できません。
前提条件
Kubernetes クラスタが作成されていること。 詳細は、「Kubernetes クラスターの作成」をご参照ください。
手順 1:デプロイメントを作成する
- Container Service コンソール にログインします。
- Kubernetes の左側のナビゲーションウィンドウで、[テンプレートによる作成] をクリックします。 を選択します。 右上隅の
- 対象となるクラスターと名前空間を選択し、 [リソースタイプ] ドロップダウンリストから、カスタムテンプレートまたはサンプルテンプレートを選択します。 [デプロイ] をクリックします。
この例では、サンプルテンプレートは Nginx デプロイメントです。
apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 # replace it with your exactly <image_name:tags> ports: - containerPort: 80 ##This port must be exposed in a service.
- Kubernetes ダッシュボード をクリックし、このデプロイメントの実行ステータスを表示します。
手順 1: サービスを作成する
- Container Service コンソール にログインします。
- Container Service-Kubernetes の左側のナビゲーションウィンドウで、 を選択します。
- 対象となるクラスターおよび名前空間を選択します。 右上隅の [作成] をクリックします。
- 表示されたダイアログボックスで、サービスパラメーターを設定します。
- 名前: サービス名を入力します。 この例では、サービス名は "nginx-svc" に設定されています。
- タイプ:サービスタイプ、つまりサービスアクセス方法を選択します。
- ClusterIP: クラスターの内部 IP アドレスを使用して、サービスを公開します。 このサービスタイプを選択すると、サービスはクラスター内でのみアクセス可能になります。 これは、デフォルトのサービスタイプです。
- NodePort: 各ノードの IP アドレスと静的ポート (NodePort) を使用して、サービスを公開します。 ノードポートサービスは、 自動的に作成されるクラスター IP
サービスへルーティングされます。
<NodeIP>:<NodePort>
をリクエスすることで、クラスターの外部から ノードポートサービスへアクセスできます。 - Server Load Balancer:Alibaba Cloud Server Load Balancer (SLB) サービス。 このタイプのサービスを作成するには、サービスの既存の SLB インスタンスを選択するか、サービスの
SLB インスタンスを自動的に作成するようにシステムを設定できます。
このタイプのサービスを使用して、アプリケーションのインターネットまたはイントラネットのアクセス方法を設定できます。 SLB インスタンスは、ノードポートサービスとクラスター IP サービスにルーティングできます。
- 関連:サービスに関連付けるバックエンドオブジェクトを選択します。 この例では、前の手順で作成した nginx-deployment-basic デプロイメントがサービスに関連付けられています。 サービスをオブジェクトに関連付けない場合、システムは対応するエンドポイントオブジェクトを作成しません。 この場合、サービスを独自の特定のエンドポイントに手動で関連付けることができます。 詳しくは、「Services without selectors」をご参照ください。
- ポートマッピング: サービスポート番号およびコンテナーポート番号を追加します。 設定したコンテナーポート番号は、ポッドによって公開されたコンテナーのポート番号と同じにする必要があります。
- アノテーション: アノテーションをサービスへ追加します。 SLB パラメーターを設定できます。 サービストラフィックを制御するために、たとえば、このパラメーターを
service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:20
に設定して、サービスのピーク帯域幅を 20 Mbit/s に設定することができます。 詳細は、「Server Load Balancer によるサービスへのアクセス」をご参照ください。 - タグ:サービスを識別するために、サービスにタグを追加します。
- [作成] をクリックします。 サービスリストに "nginx-svc" サービスが表示されます。
- ブラウザに "nginx-svc" サービスの外部エンドポイントを入力して、サービスにアクセスします。