CoreOSは、Dockerコンテナ用に設計されたオペレーティングシステムです。 CoreOSには、Dockerがすぐにインストールされています。以前の記事「アマゾンウェブサービス(AWS)でのKubernetesの使用を開始する」で詳細に説明されているように、KubernetesはCloudFormationを使用してCoreOSにインストールできます。
問題
KubernetesはCoreOSにプリインストールされておらず、 kube-awsを使用してインストールできます。 ツールであり、ユーザー入力と構成が必要です。 CoreOSへのKubernetesのインストールは複雑なプロセスであり、図1に示す次の段階で構成されています。
図1: CoreOSステージへのKubernetesのインストール
解決策
図2に示すように、Jenkinsパイプラインを使用してKubernetesのインストールを自動化できます。インストールのさまざまな段階を Jenkinsfileで構成できます。 そして、パイプラインが実行されると、 kube-aws ツールがダウンロードされ、 CloudFormation スタックが初期化され、Asset Directoryのコンテンツがレンダリングされ、ワーカーインスタンスの数などのクラスターパラメーターがカスタマイズされ、その後、クラスターが検証されて起動されます。
図2: CoreOSにKubernetesをインストールするためのJenkinsパイプライン
Jenkinsパイプラインを使用したKubernetesのインストールは、自動化の例です。 DevOpsデザインパターン。
3つの記事のチュートリアルでは、Jenkinsパイプラインを使用してKubernetesのインストールプロセスを自動化します。この記事には次のセクションがあります:
- 環境の設定
- 前提条件のアーティファクトの作成
- ジェンキンスノードの作成
- 結論
環境の設定
CoreOSインスタンスにDockerイメージ「jenkins」を使用してJenkinsをインストールします。 Jenkinsパイプラインを使用してAmazonAMILinuxEC2インスタンスでKubernetesクラスターを起動します。まず、図3に示すように、2つのEC2インスタンスを起動します。1つはAmazon Linuxを実行し、もう1つはCoreOSを実行します。
図3: パブリックIPアドレスの取得
Amazon Linuxインスタンスを作成するときは、「Create a new key pair」を選択して新しいキーペア(「jenkins」など)を作成し、Jenkinsエージェントの設定に使用する秘密キー「jenkins.pem」をダウンロードします。 CoreOSを実行しているEC2インスタンスのパブリックIPアドレスを取得し、SSHでインスタンスにログインします。
ssh -i "jenkins.pem" [email protected]
JenkinsのDockerイメージを実行してJenkinsを起動します。
docker run -name jenkins -p 8080:8080 -p 50000:50000 jenkins
Dockerイメージ「Jenkins」がダウンロードされます。ジェンキンスが始めます。生成されたパスワードをコピーします。 Jenkinsを実行しているEC2インスタンスのパブリックDNSを取得します。 URL
図4: Jenkins管理コンソール
前提条件のアーティファクトの作成
次に、自動化に対応していないKubernetesクラスターのアーティファクトをいくつか作成する必要があります。
- EC2キーペア
- KMSキー
- Jenkinsディレクトリ/var/ jenkins
- AmazonLinuxを実行しているAmazonEC2インスタンスへのSSHログイン
ssh -i "jenkins.pem" [email protected]
Amazon EC2を使用しているため、AWSアカウントが必要です。 AWSセキュリティクレデンシャルのセットを作成する必要があります。これを使用して、CloudFormationスタックを起動するEC2インスタンスを設定します。新しいAWSセキュリティクレデンシャルを作成するには、ユーザーアカウントの[セキュリティクレデンシャル]をクリックし、[新しいアクセスキーの作成]をクリックします アクセスキーを作成します。 アクセスキーIDをコピーします とアクセスキー。 Amazon Linuxインスタンスで、次のコマンドを実行して、AWSクレデンシャルを使用してインスタンスを設定します。
aws configure
プロンプトが表示されたら、アクセスキーIDとアクセスキーを指定します。デフォルトのリージョン名を指定します( us-east-1 )と出力形式( json )、図5に示すように。
図5: AWSクレデンシャル、リージョン、デフォルトの出力フォーマットを使用したJenkinsインスタンスの設定
次に、EC2キーペアを作成します。次のコマンドを実行して、 kubernetes-coreosというキーペアを作成します kubernetes-coreos.pemとして保存します 。
aws ec2 create-key-pair --key-name kubernetes-coreos --query 'KeyMaterial' --output text > kubernetes-coreos.pem
モードを400として使用して、キーペアのアクセス許可を変更します。これにより、所有者が読み取るアクセス許可が設定されます。
chmod 400 kubernetes-coreos.pem
キーペアが作成され、アクセス許可が設定されます(図6を参照)。
図6: Kubernetesのキーペアの作成
図7に示すように、キーペアはAWSEC2コンソールにも表示されます。
図7: パブリックIPアドレスの取得
次に、クラスターTLSアセットの暗号化/復号化に使用され、Arn文字列で識別されるKMSキーを作成します。 awsを使用する リージョンus-east-1のKMSキーを作成するためのコマンドラインインターフェイス 。
aws kms --region=us-east-1 create-key --description="kube-aws assets"
図8に示すように、KMSキーが作成されます。 KeyMetadata.Arnをコピーします。 arn:aws:kms:us-east-1で始まる文字列 後でクラスターCloudFormationを初期化するために使用されます。
図8: KMSキーの作成
Jenkinsのディレクトリも作成する必要があります:
sudo mkdir /var/Jenkins sudo chmod 777 /var/jenkins
図9に示すように、ディレクトリが作成され、権限が設定されます。
図9: Jenkinsのディレクトリを作成する
Jenkinsノードの作成
Jenkins Pipelineは、JenkinsPipelineプラグインを利用するJenkinsプロジェクトです。パイプラインは通常、一連のステップで構成され、各ステップがタスクを実行します。エージェントで使用可能なエグゼキュータは、Jenkinsプロジェクトを実行するために使用されます。 「エージェント」は、マスターノードからプロジェクトをオフロードするように構成されたマシンです。 「マスター」ノードは、Jenkinsがインストールされているマシンであり、パイプラインスクリプトの解析や、エグゼキュータでのJenkinsプロジェクトの実行など、ビルドシステムのすべてのタスクを処理します。 「エグゼキュータ」は、コードをコンパイルするための計算リソースであり、マスターノードまたはエージェントノードで構成できます。このセクションでは、エージェントノードを作成し、そのノードにエグゼキュータを設定します。 ジェンキンスの管理を選択します 図10に示すように、Jenkinsダッシュボードで。
図10: パブリックIPアドレスの取得
続いて、ノードの管理を選択します 、図11に示すように。
図11: パブリックIPアドレスの取得
「マスター」ノードが一覧表示されます。 新しいノードをクリックします 図12に示すように、エージェントノードを作成します。
図12: パブリックIPアドレスの取得
ノード名を指定します (ジェンキンス 、たとえば)、常設エージェントを選択します 図13に示すように、ラジオボタン。[OK]をクリックします。
図13: パブリックIPアドレスの取得
新しいエージェントノードを構成するには、エージェントを作成するホストDNSが必要です。図14に示すように、AmazonLinuxイメージを実行しているEC2インスタンスのAWSEC2コンソールからパブリックDNSをコピーします。
図14: パブリックIPアドレスの取得
新しいエージェント入力ユーザーインターフェースで、名前を指定します (ジェンキンス 、 例えば)。 エグゼキュータの数を指定します as1.リモートルートディレクトリを指定します / var / jenkinsとして 、以前に作成されました。 ラベルを指定します 「ジェンキンス」として、その重要性については次のセクションで説明します。 使用法 、デフォルト設定の「このノードをできるだけ使用する」を維持します。 起動方法の場合 、「SSH経由でUnixマシン上でスレーブエージェントを起動する」を選択します。 ホスト 、EC2コンソールからコピーされたパブリックDNSを指定します。 可用性 、[このエージェントを可能な限りオンラインに保つ]を選択します。 資格情報の場合 、追加をクリックします ドロップダウンして、Jenkins資格情報プロバイダーを選択します 、図15に示すように。
図15: パブリックIPアドレスの取得
資格情報の追加 ダイアログで、ドメインをグローバルクレデンシャルとして選択します および種類 グローバルとして 。 ユーザー名を指定します 「ec2-user」として、直接入力を選択します 。秘密鍵ファイルjenkins.pemの内容をコピーして貼り付けます キーで 図16に示すように、フィールド。
図16: Jenkinsクレデンシャルの追加
追加をクリックします 、図17に示すように。
図17: Jenkinsクレデンシャルプロバイダー>追加
ec2-userを選択します クレデンシャルのクレデンシャル 、図18に示すように、[保存]をクリックします 。
図18: Jenkinsノードの構成
図19に示すように、新しいエージェントが追加されます。最初は、エージェントがまだ開始されていないため、エージェントを使用できない場合があります。
図19: JenkinsAgentが作成されました
エージェントのリンクをクリックし、エージェントの再起動をクリックします 、必要に応じて、図20に示すように。
図20: エージェントの再起動
「エージェントは正常に接続され、オンラインです」という出力メッセージは、エージェントが起動されたことを示します(図21を参照)。
図21: エージェントが正常に接続され、オンラインになっている
図22に示すように、「jenkins」エージェントは実行中としてリストされているはずです。
図22: 実行中のジェンキンスエージェント
結論
この記事では、Jenkinsを使用してKubernetesのインストールを自動化することの重要性を紹介しました。まず、CoreOSにJenkinsをインストールし、前提条件のアーティファクトを作成し、Jenkinsノードを作成しました。次の記事では、Jenkinsパイプライン用にJenkinsfileを構成し、Jenkinsパイプラインを作成します。そして、3番目の記事では、Jenkinsパイプラインを実行してKubernetesをインストールします。