使用してクラスタAPIはどこにKubernetesクラスタを提供する!


TLドクター


クラスタAPIを使用して、管理されたノードグループを持つ複数のEKSクラスタを提供する方法を学びます.

クラスタAPIとは


Kubernetesクラスタのプロビジョニングは容易な仕事ではない.1000 +のクラスタがある場合は、間違いなくあなたの人生を容易にするために標準化されたアプローチをしたい.この懸念がある場合は、適切な場所に来る!クラスタAPIは何が必要です!

Some of you might know tools like kOps, Kubespray. You can imagine Cluster API as their alternative solution, but more powerful!


公式APIによると、「クラスタAPIは、複数のKubernetesクラスタを提供して、アップグレードして、動かすことを簡素化するために宣言的なAPIとツールを提供することに集中しているKubernetesサブプロジェクトです」.
ここではクラスタAPIのいくつかの注目点を示します.

  • 純粋なYAMLベース.
    Kubernetesスタイル.スーパーハンディ.

  • サポート任意の主流インフラストラクチャプロバイダ.
    あなたのKubernetesクラスタをクラウドで提供します.

  • 管理されたKubernetesサービスサポート.
    AES EKS、Azure Ak、GCP GKEはすべてサポートされます.

  • 独自のインフラストラクチャをもたらす.
    既存のインフラの再利用Kubernetesクラスタのプロビジョニングに焦点を当てる
  • それは素晴らしい、右?
    クラスタAPIを使用する方法を示すには、管理ノードのAWS EKSを作成する方法を示します.

    コンセプト


    あなたが続く前に、あなたが最初に理解する必要があるいくつかの概念があります.
    インフラプロバイダー
    クラスタAPIプロジェクトは、カスタムリソース定義(CRDS)の形式で一連のAPIを定義します.それぞれのプロバイダはAPIに従って、それに応じてインフラを提供する方法を指定しなければなりません.
    使えますclusterctl config repositories サポートされているプロバイダとそのリポジトリ構成のリストを取得するコマンドです.
    AWSでは、その実装はクラスタAPIプロバイダAWS(CAPA)です.
    管理クラスタ
    ワークロードクラスタのライフサイクルを管理するKubernetesクラスタ.このクラスタでは、クラスタAPIを使用して、任意のインフラストラクチャプロバイダーでワークロードクラスタをさらに提供します.
    管理クラスタを作成する“鶏や卵の最初の”問題です.利用可能な2つの方法があります.
  • 既存のKubernetesクラスタを見つけ、それを管理クラスタとして変換します.
  • ブートストラップ&ピボット.Kubernetesクラスタを一時的な管理クラスタとしてブートし、ターゲット管理クラスタ内にクラスタAPIを使用してターゲット管理クラスタを提供します.最後に、テンポラリ管理クラスタからすべてのクラスタAPIリソースをターゲット管理クラスタに移動します.
  • クラスタAPIの包括的な使い方を見るには、「ブートストラップ&ピボット」メソッドを使います.どのように管理クラスタの移行を学ぶことができます.
    ワークロードクラスタ
    管理クラスタによってライフサイクルが管理されるKubernetesクラスタ.

    前提条件


    インストール


    明らかに、最初にインストールする必要のあるツールがいくつかあります
  • Kubectl -誰もがよく知っているはずです.
  • 種類- Dockerコンテナノードを使用してローカルKubernetesクラスタを実行するためのツールです.
  • クラスタAPIのCLIツール
  • クラスタAPIプロバイダAWS(CAPA)のCLIツール
  • brew install kubectl clusterctl kind
    
    wget -O /usr/local/bin/clusterawsadm /usr/local/bin/ https://github.com/kubernetes-sigs/cluster-api-provider-aws/releases/download/v1.3.0/clusterawsadm-darwin-amd64 
    chmod +x /usr/local/bin/clusterawsadm
    

    あなたのAWS資格


    あなたの資格を設定するために複数の方法があるので、私はそれについてあまり話しません.
    しかし、2つのことを思い出させる必要があります.

  • あなたの資格情報には管理許可がなければなりません.EKSクラスタの作成には、IAMリソースの作成が含まれます.

  • 永久の資格を使用してください.
    あなたの資格は管理クラスタの中に格納されます.そして、ワークロードクラスタの状態を監視するために資格情報を使用します.
  • 実装


    使用されるコードはすべて私の中にありますGithub repository

    一時管理クラスタ


    我々は、臨時管理クラスタを作成するために種類を使用します.
    これらのコマンドを実行してクラスタを作成します.
    kind create cluster --name kind
    kubectl config use-context kind-kind
    

    You can use alternative distributions, such as minikube, microk8s, k3s, k0s. It is up to your preference, the concept is pretty much the same.


    AWSリソースを作成する


    KubernetesクラスタAPIとKubernetes AWSアイデンティティとアクセス管理(IAM)許可をブートストラップするためにAWS CloudFormationスタックを作成または更新します.clusterawsadm bootstrap iam create-cloudformation-stack

    (オプション)ネットワークリソースを作成する


    EKSはいくつかのネットワークインフラ要素に基づいています.
    できます.

  • あなたのためのネットワークインフラストラクチャを提供するためにCAPAをみましょう.クラスタAPIを使用する方法を実験したい人に良い.

  • あなた自身のネットワーク基盤を持ってきてください.基本的には、VPC、NATゲートウェイ、インターネットゲートウェイ、ルートテーブルとサブネットを作成する必要があります.
  • いいえ、私はこのチュートリアルの両方のアプローチをカバーします.

    CAPIとCAPAを管理クラスタにインストールします

    cluster init Coreリソースと共にコアクラスタAPIリソースをインストールします.
    マネージノードグループの作成は実験的な機能ですので、インストール前にそれを有効にする必要があります.
    # Allow CAPA to create EKS managed node groups
    export EXP_CLUSTER_RESOURCE_SET=true
    export EXP_MACHINE_POOL=true
    
    # Create the base64 encoded credentials using clusterawsadm.
    # This command uses your environment variables and encodes
    # them in a value to be stored in a Kubernetes Secret.
    export AWS_B64ENCODED_CREDENTIALS=$(clusterawsadm bootstrap credentials encode-as-profile)
    
    clusterctl init --infrastructure aws
    
    現在、管理クラスタはAWSSense B 64 EnterdedCount資格情報を使用してEKSリソースを提供します.

    To enable experimental features in an existing Management Cluster, please visit here for the instructions.


    セキュリティトリック


    資格証明書は既にCAPAコントローラに読み込まれているので、clusterawsadm controller zero-credentials .
    あなたのCAAコントローラが再起動されるか、あなたの管理クラスタが新しいKubernetesクラスタに移行されるとき、あなたはこれらのコマンドを使用することによってそれを更新する必要があります.
    export AWS_B64ENCODED_CREDENTIALS=$(clusterawsadm bootstrap credentials encode-as-profile)
    clusterawsadm controller update-credentials
    clusterawsadm controller rollout-controller
    

    AWS EKSでターゲット管理クラスタを作成する


    つのことを思い出させる必要があります.
  • EKSサポートKubernetesバージョンを選択します.
    今のところ、EKSがサポートする最新バージョンは1.21です
  • Eks命名規則に基づいてあなたのEKSクラスタを命名してください.
    Unicode文字、数字、ハイフン、アンダースコアのセットを以下の文字のいずれかを使用できます.
  • 私は2つのオプションのために2つのYAMLファイルを準備しました:

  • 私はクラスタAPIを私のためにすべてを管理したい.ヤル

  • 私は自分のインフラを持っています.山口大
  • AWLアカウントID、VPC ID、サブネットIDなどのYAMLファイルの一部のフィールドを変更する必要があることに注意してください.
    ランkubectl apply -f byoi-management-cluster.yaml 管理クラスタを提供する.
    Kubeconfigファイルを新しく作成した管理クラスタにアクセスする必要があります.
    クラスタAPIはKubeconfigファイルをエクスポートするネイティブメソッドを提供します.しかし、マイナーですincompatible issue . sedを使って解決できます.
    export CLUSTER_API_CLUSTER_NAME=byoi-mgnt-cl
    
    kubectl --namespace=capi get secret ${CLUSTER_API_CLUSTER_NAME}-user-kubeconfig \
       -o jsonpath={.data.value} | base64 --decode \
       > ${CLUSTER_API_CLUSTER_NAME}.kubeconfig
    
    sed -i '' -e 's/v1alpha1/v1beta1/' ${CLUSTER_API_CLUSTER_NAME}.kubeconfig
    

    ピボット


    あなたがあなたの望ましい目標Kubernetesクラスタであなたの管理クラスタをつくるならば.ここで止まることができます.
    一時的な管理クラスタを使用している場合は、クラスタAPIリソースをブートストラップ一時クラスタからターゲットEKSクラスタに移行するまでの時間です.

    Indeed, the Cluster API resources we are moving is the target Management Cluster itself.


    # Remember to enable experimental features
    export EXP_CLUSTER_RESOURCE_SET=true
    export EXP_MACHINE_POOL=true
    
    # Before you move the resources, you need to install Cluster # API in the target Management Cluster first.
    clusterctl init --infrastructure aws --kubeconfig ${CLUSTER_API_CLUSTER_NAME}.kubeconfig
    
    clusterctl move -n capi --to-kubeconfig=${CLUSTER_API_CLUSTER_NAME}.kubeconfig 
    

    クラリスセル


    複数の名前空間にクラスタAPIマネージクラスタを作成する場合は、clusterctl move 各名前空間のコマンド.
    例えば、
    clusterctl move -n first-namespace --to-kubeconfig=${CLUSTER_API_CLUSTER_NAME}.kubeconfig 
    clusterctl move -n second-namespace --to-kubeconfig=${CLUSTER_API_CLUSTER_NAME}.kubeconfig 
    

    (ワークフロー)


    クラスタAPIを使用するゴールを覚えて、複数のKubernetesクラスタをプロビジョニング、アップグレード、操作することですか?
    私のレポでは、あなたはbyoi-workload-cluster.yaml . eks管理クラスタからEKSワークロードクラスタを実行するkubectl apply -f byoi-workload-cluster.yaml .
    そして、ワークロードクラスタのEKSバージョンがV 1であることに注意してください.20 .ワークロードクラスタを設定した後、v 1に変更することができます.21そしてファイルを再び適用します.あなたのEKSクラスタをアップグレードすることは簡単です!

    クリーンリソース


    一時管理クラスタを削除するにはkind delete cluster --name kindクラスタAPIプロビジョニングクラスタを削除するにはkubectl delete cluster {cluster name}EKS管理ノードグループを削除するにはkubectl delete machinepools.cluster.x-k8s.io {node group name}

    結論


    おめでとう!あなたはクラスタAPIに向けての第一歩を踏み出しました.他のプロバイダでよりクールなstuffs、提供のクラスタを行うに自由に感じなさい.
    あなたが私の記事が好きであるならば、私に若干の反応を与えてください、さもなければ、私に以下のメッセージを残してください.ありがとう.

    資料


    CAPI - Concepts
    CAPA - Enabling EKS managed Machine Pools
    CAPI - Reference
    CAPI free course