Azure開発者が知っておくべきトップ5つの事柄:Kubernetesインフラストラクチャ


歴史レッスン時間!2011年に、MicroServicesは雲に適している建築様式としてデビューしました.2013年に、Dockerは建築容器を簡素化しました.コンテナとマイクロサービスを組み合わせることは、アプリケーションがどのように構築されて、クラウドで分配されるかにおける変化を引き起こしました.性能、スケーリング、および信頼性が増加する懸念となったので、コンテナ・オーケストレーションプラットホームは広く利用可能になりました.Kubernetesはコミュニティと企業支持を通して支配的なコンセンサス・オーケストレーションになりました、そして、いくつかはそれがinevitable . Azureを含むすべての主要なクラウドサービスプロバイダは、Kubernetesのバージョンを提供しています.
Kubernetesはコンテナの展開と管理を合理化し、アプリケーションをスケールし、アクセスできるようにします.KubernetesをAzureで設定し展開する方法を示します.

Kubernetesレビュー


あなたがKubernetesの概念と用語に精通していない場合は、取得Kubernetesシリーズは、高速にあなたを得ることができます.
  • Getting Started With Kubernetes: Clusters and Nodes
  • Getting Started With Kubernetes: Application Basics
  • Getting Started With Kubernetes: Advanced Deployment
  • Getting Started with Kubernetes: Stateful Applications
  • Getting Started With Kubernetes: Networking
  • Getting Started With Kubernetes: Day 2
  • アジュールKerbernetesサービス


    Azure Kubernetes Service(AK)は、ホストしているKubernetesサービスです.AzureはKubernetesのマスターノードを管理し、エージェントや労働者ノードの管理に責任があります.アプリケーションを構成するクラスタ内の労働者ノードを支払うだけです.
    Kubernetesノードは、物理的または仮想的であるワーカーマシンです.AKノードは、Azure仮想マシン(VMS)を使用しますそして、ストレージを追加することができますクラスタコンポーネントをアップグレードするか、さらに混合オペレーティングシステムで複数のノードプールを実行します.
    AKクラスタを作成できます
  • 紺碧のCLI
  • Azureポータル
  • パワーシェル
  • テンプレートAzure Resource Manager ( ARM )テンプレート.
  • AK機能


    Kubernetesの設定と展開は複雑です.AKは、次の機能を含むプロセスを簡素化するために多くの機能を提供します
  • クラスタノードとPODスケーリングは、リソース要求の変更としてノードまたはポップの数を調整します.Pods can scale horizontally, and the cluster can also autoscale .
  • Kubernetesは、迅速なオープンソースプロジェクトであり、AKは複数のバージョンをサポートしています.あなたはupgrade the cluster nodes アプリケーションを中断せずに.
  • あなたが機械学習を実行するならば、AKはつくることができますGPU-enabled node pools 計算集約,グラフィックス集約,可視化作業負荷について
  • AKはアクセス制御をKubernetes RBAC アジュールActive Directory .
  • 統合ロギングとモニタリングAzure Monitor for Containers コンテナ、ノード、およびコントローラからのメモリとプロセッサのメトリックを収集します.
  • あなたをマウントするstatic or dynamic storage volumes 永続的なデータ.ストレージボリュームは、同時のpodアクセスのために単一のpodアクセスまたはazureファイルのためにazureディスクを使用します.

  • Virtual networking クラスタと他のノードのポッドの場合は、ピーリングされた仮想ネットワークを使用できます.また、ネットワークはHTTPアプリケーションルーティングでアプリケーションのためにIngressを提供します.
  • ヘルムとAのための開発ツールとの統合Visual Studio Code extension for Kubernetes 開発者の経験を向上させます.
  • ストレージを含むDocker画像のサポートAzure Container Registry , 配備をより簡単にします.
  • AzureポータルでAKクラスタを作成する


    AKUクラスタを設定して展開する手順を説明するために、Azureポータルを使用します.
    Step 1 : Kubernetesサービスを作成します.
    開けるAzure Portal を選択します.
    「コンテナ」を選択します.
    を選択します.

    ステップ2 : AZクラスタを作成します.
    この例では、基本的なウィンドウでいくつかのオプションを設定しますが、ほとんどのオプションでデフォルトを使用します.
  • サブスクリプションでは、Azureサブスクリプションを選択します.
  • を作成または選択Resource Group .
  • クラスタの詳細では、Kubernetesクラスタ名を設定します.
  • 必要に応じて領域を変更します.
  • 次のノードプールを選択します.

    ステップ3 :ノードプールを設定します.
    ノードプールは、ノードの論理的なグループ化です.プール内のノードは、異なる仮想マシン、異なるKubernetesバージョン、およびその他の属性を持つことができます.ワークフローをグループ化するなど、さまざまな目的のために異なるノードプールを使用することができます.たとえば、生産のためのノードプールとdevまたはtestの1つです.
    この例では、ノードプールに既定値を使用します.

    ステップ4 :認証を構成します.
    Kubernetesクラスタへのアクセスを認証、認証、セキュリティー、コントロールすることができます

  • Kubernetes role-based access control ( Kubernetes RBAC )サービスアカウントへのアクセスを許可するか、

  • Azure Active Directory integration これは、マルチテナント、クラウドベースのディレクトリとアイデンティティ管理サービスを提供します.
  • この例の認証を構成するには、認証メソッドをシステム割り当てのマネージIDに設定します.ロールベースのアクセス制御(RBAC)を有効にすることができますが、例には不要です.ノードプールOSディスク暗号化タイプのデフォルト値を使用します.

    ステップ5 :ネットワーク設定
    AKはどちらでも使えますkubenet or Azure CNI ネットワーキングKubenetは、AKクラスタ作成のためのデフォルトの設定です.
    Kubenetで、Azureは仮想ネットワークを作成して、構成します.しかし、ノードだけはルーティング可能なIPアドレスを受け取ります、そして、PODSはAKクラスタの外で資源と通信するためにNATを使用します.このアプローチは、あなたが使用するポッドのためにあなたのネットワーク・スペースで予約する必要があるIPアドレスの数を減らします.Azure CNI すべてのpodにIPアドレスを割り当てます.IPアドレスは事前にユニークで計画されなければなりません.各々のノードは、ノードにつきIPアドレスを予約するためにPODの最大数のために構成されなければなりません.ポッドの数のための会計なしで、ネットワークはより大きなサブネットでクラスタを再構築する必要を割り当てるか、必要とするのにIPアドレスを使い果たすことができます.
    この例では、kubenet それは簡単ですが、生産Azure Cniのアプリケーションのためのより良い選択.

    ステップ6 :配備を完了する
    を選択します.展開に数分かかる.完了すると、配置の詳細を確認またはクラスタに接続を選択できます.

    ステップ7 :クラスタに接続する
    あなたのクラスタを管理することができますkubectl , Kubernetesを管理するためのコマンドラインツール.インストールできますkubectl on linux , macOS , and Windows .
    を使用してクラスタに接続し、認証するコマンドをコピーして貼り付けますAzure CLI .

    接続し、クラスタに認証後、使用することができますkubectl クラスタを照会するには
    kubectl get nodes
    NAME                                STATUS   ROLES   AGE     VERSION
    aks-agentpool-19694923-vmss000000   Ready    agent   9m35s   v1.20.7
    aks-agentpool-19694923-vmss000001   Ready    agent   9m39s   v1.20.7
    aks-agentpool-19694923-vmss000002   Ready    agent   9m47s   v1.20.7
    kubectl get all
    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    service/kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   11m
    
    あなたのAKクラスタが展開され、実行されます.

    コードでAKクラスタを展開する


    Azureポータルを使用してAKSクラスタを作成するプロセスをレビューしたので、コードを使用してプロセスを繰り返すことができます.
    ステップ1:作成Resource groupService principal クラスタに.私たちはSystem-assigned managed identity Azureポータルの例では.
    Pythonでの例
        # Create new resource group
        resource_group = resources.ResourceGroup("azure-native-py-aks")
    
        # Create an AD service principal
        ad_app = azuread.Application("aks", display_name="aks")
        ad_sp = azuread.ServicePrincipal("aksSp", application_id=ad_app.application_id)
    
        # Generate random password
        password = random.RandomPassword("password", length=20, special=True)
    
        # Create the Service Principal Password
        ad_sp_password = azuread.ServicePrincipalPassword("aksSpPassword",
                                                        service_principal_id=ad_sp.id,
                                                        value=password.result,
                                                        end_date="2099-01-01T00:00:00Z")
    
        # Generate an SSH key
        ssh_key = tls.PrivateKey("ssh-key", algorithm="RSA", rsa_bits=4096)
    
    ステップ2 : AKクラスタの設定
    設定オプションを設定しますManagedClusterAgentPoolProfileArgs :
  • Count : 仮想マシンの数
  • MaxPods : ノード上で実行できるPODの最大数.
  • Mode : プールノードの型を設定します.system or user
  • Name : プールノードの名前
  • OsType : os型を指定する
  • Type : Aの間を選択VirtualMachineScaleSet またはAvailabilitySet
  • VmSize : クラスタで使用する仮想マシンのサイズ.
    残りのパラメータはKubernetesバージョンを設定し、RBACを有効にし、ContainerService .
  • Pythonでの例
        # Create cluster
        managed_cluster_name = config.get("managedClusterName")
        if managed_cluster_name is None:
            managed_cluster_name = "azure-native-aks"
    
        managed_cluster = containerservice.ManagedCluster(
            managed_cluster_name,
            resource_group_name=resource_group.name,
            agent_pool_profiles=[{
                "count": 3,
                "max_pods": 110,
                "mode": "System",
                "name": "agentpool",
                "node_labels": {},
                "os_disk_size_gb": 30,
                "os_type": "Linux",
                "type": "VirtualMachineScaleSets",
                "vm_size": "Standard_DS2_v2",
            }],
            enable_rbac=True,
            kubernetes_version="1.18.14",
            linux_profile={
                "admin_username": "testuser",
                "ssh": {
                    "public_keys": [{
                        "key_data": ssh_key.public_key_openssh,
                    }],
                },
            },
            dns_prefix=resource_group.name,
            node_resource_group=f"MC_azure-native-go_{managed_cluster_name}_westus",
            service_principal_profile={
                "client_id": ad_app.application_id,
                "secret": ad_sp_password.value
            })
    
    ステップ3:エクスポートエクスポートファイル
    エーkubeconfig ファイルはクラスタに関する情報を整理し、許可するkubectl クラスタに接続します.
    Pythonでの例
        # Export kubeconfig
        encoded = creds.kubeconfigs[0].value
        kubeconfig = encoded.apply(
            lambda enc: base64.b64decode(enc).decode())
        pulumi.export("kubeconfig", kubeconfig)
    
    ステップ4 : AKクラスタに接続する
    私たちはkubeconfig ファイルをクラスタに接続します.をコピーするのは一般的な習慣ですkubeconfig ファイル~/.kube/config , どちらがディレクトリですかkubectl ファイルを探します.ただし、--kubeconfig 例えば、
    kubectl --kubeconfig /path/to/kubeconfig_file get pods
    
    この例のように、AKSクラスタを展開するには、パラメーターを設定する必要があります.このアクションは、ポータルまたはコードで行うことができます.コードの利点は、クラスタがAzureポータルを使用することなく、要求に応じて作成できることです.この設定は、dev/test環境や生産環境など、さまざまな環境がある場合に便利です.
    AKを展開するための完全なコードはGithubTypescript , Python , Go , and C# .

    概要


    Azure Kubernetesサービスを使用すると、迅速かつ効率的にKubernetesクラスタを展開することができます.AKUE展開は、マスターノードがAzureによって提供されるので、労働者ノードを構成します.Azure Portalは構成のための簡略化されたインターフェースを提供します、しかし、あなたが配備の上に細かい穀物管理を望むならば、コードとしての基盤はオプションです.これは、構成がアプリケーション展開のチューニングを必要とする生産展開に特に当てはまります.
    次の記事では、さまざまなメソッドを使用してAKSクラスタにアプリケーションを配備します.