0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · レッスン

Actions による Kubernetes へのデプロイ

Kubernetes クラスターへの Continuous Deployment を設定し、GitHub Actions から直接デプロイメントとサービスを管理します。

「Actions による Kubernetes へのデプロイ」はCoddyKit上の無料CI/CD with GitHub Actions & DevOps Pipelinesレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCI/CD with GitHub Actions & DevOps Pipelines学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。

ActionsによるK8s CD入門

ようこそ!このレッスンでは、GitHub Actionsを使用してKubernetesクラスターへの継続的デプロイ(CD)を設定する方法を学びます。

デプロイを自動化すると、手作業なしでアプリケーションの変更を迅速かつ確実に公開できます。

認証、Kubernetesマニフェストの適用、更新の管理について説明します。

K8s Deploymentの基礎

デプロイする前に、Kubernetesの主要なリソースを2つ簡単に確認しましょう。

  • Deployments: アプリケーションのPodを管理し、指定した数のレプリカが常に実行されるようにします。更新やロールバックも処理します。
  • Services: アプリケーションへのアクセス方法を定義します(クラスター内部からのアクセスや、LoadBalancerを介した外部からのアクセスなど)。

ここでは、これらを定義したYAMLファイルをGitHub Actionsからクラスターに適用することを目指します。

ActionsからK8sへの認証

デプロイするには、GitHub ActionsのワークフローがKubernetesクラスターのAPIサーバーと通信する必要があります。

そのためには認証が必要です。Kubernetesで認証する標準的な方法は、kubeconfigファイルを使用することです。

このファイルの内容をワークフローの実行環境に安全に提供する必要があります。

Kubeconfigの安全な管理

kubeconfigファイルには、クラスターのエンドポイントやユーザー認証情報などの機密情報が含まれています。秘密として管理する必要があります。

GitHub Actionsには、この目的のためにSecretsが用意されています。kubeconfigファイルの内容をリポジトリシークレットとして保存します。

kubeconfigはどのように取得するのでしょうか。利用するK8sプロバイダーによって異なります(例:aws eks update-kubeconfig、gcloud container clusters get-credentials)。

K8sコンテキストの設定

kubeconfigをシークレットとして保存したら(ここではKUBE_CONFIG_DATAと呼ぶことにします)、ワークフローから利用できます。

一般的には、シークレットの内容を実行環境上の一時ファイルに書き込み、KUBECONFIG環境変数にそのファイルのパスを設定します。

これにより、kubectlにクラスターへの接続情報の場所を伝えられます。

ワークフローで`kubectl`を使用する

kubectlは、Kubernetesクラスターを操作するための公式コマンドラインツールです。GitHub Actionsの実行環境にはkubectlがあらかじめインストールされています。

kubeconfigを設定した後は、ワークフローの各ステップで任意のkubectlコマンドを実行できます。

基本的な例を見てみましょう。

name: K8s Setup Test

on: [workflow_dispatch]

jobs:
  test-kubeconfig:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Kubeconfig
        env:
          KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
        run: |
          mkdir -p ~/.kube
          echo "$KUBE_CONFIG_DATA" > ~/.kube/config
          chmod 600 ~/.kube/config
          echo "KUBECONFIG=$HOME/.kube/config" >> $GITHUB_ENV

      - name: Verify kubectl access
        run: kubectl version --client

K8sのシンプルなDeploymentマニフェスト

これは、「hello-world」アプリケーション用の基本的なKubernetes DeploymentとServiceのマニフェストです。Kubernetesに実行させる内容を定義しています。

この例ではシンプルなNginxイメージを使用し、ポート80で公開します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-app-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-app
  template:
    metadata:
      labels:
        app: hello-app
    spec:
      containers:
      - name: hello-app
        image: nginx:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: hello-app-service
spec:
  selector:
    app: hello-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

デプロイワークフロー全体

ここでは、ワークフローにデプロイのステップを組み込みます。前のレッスンで行ったコンテナイメージのビルドとプッシュが完了したら、デプロイできます。

このワークフローでは、kubeconfigシークレットが設定済みで、マニフェストファイル(例:k8s/deployment.yaml)がリポジトリに存在することを前提としています。

name: Deploy to Kubernetes

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Kubeconfig
        env:
          KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
        run: |
          mkdir -p ~/.kube
          echo "$KUBE_CONFIG_DATA" > ~/.kube/config
          chmod 600 ~/.kube/config
          echo "KUBECONFIG=$HOME/.kube/config" >> $GITHUB_ENV

      - name: Deploy application to K8s
        run: kubectl apply -f k8s/deployment.yaml

アプリケーションの更新

kubectl applyの優れた特徴の1つは、冪等性です。YAMLで定義されたリソースがすでに存在する場合、kubectl applyは新しいリソースを作成するのではなく、既存のリソースを更新します。

アプリケーションの新しいバージョンをデプロイするには、deployment.yamlのイメージタグを更新して変更をプッシュするだけです。するとGitHub Actionsが起動し、Kubernetesがローリングアップデートを実行します。古いPodを新しいPodに段階的に置き換えるため、ダウンタイムを最小限に抑えられます。

簡単な確認

GitHub Actionsを使用してアプリケーションをKubernetesにデプロイするための基本的な手順を学びました。

GitHub ActionsのワークフローでKubernetesマニフェストをデプロイする場合、正しい手順の順序は次のどれでしょうか。

復習と次のステップ

よくできました!GitHub Actionsを使用してKubernetesへの継続的デプロイを設定する方法を学びました。

  • 機密性の高いkubeconfigデータをGitHub Secretsに保存します。
  • ワークフローでは、このシークレットを使用してkubectlを設定します。
  • kubectl apply -fを使用して、K8sマニフェストをデプロイまたは更新します。
  • 変更が適用されると、Kubernetesがローリングアップデートを処理します。

この強力な組み合わせによってデプロイが自動化され、開発プロセスがよりスムーズで迅速になります。さらに高度なK8sの機能も学んでいきましょう!

よくある質問

「Actions による Kubernetes へのデプロイ」レッスンは無料ですか?

はい。「Actions による Kubernetes へのデプロイ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CI/CD with GitHub Actions & DevOps Pipelinesコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。

「Actions による Kubernetes へのデプロイ」で何を学びますか?

Kubernetes クラスターへの Continuous Deployment を設定し、GitHub Actions から直接デプロイメントとサービスを管理します。 ブラウザで直接実行するハンズオンコードでCI/CD with GitHub Actions & DevOps Pipelinesを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

CI/CD with GitHub Actions & DevOps Pipelinesを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCI/CD with GitHub Actions & DevOps Pipelinesは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Actions による Kubernetes へのデプロイ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCI/CD with GitHub Actions & DevOps Pipelinesレッスンでコードを書いて実行できますか?

はい。すべてのCI/CD with GitHub Actions & DevOps Pipelinesレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Actions による Docker イメージのビルド
  2. レジストリへのイメージのプッシュ
  3. Actions による Kubernetes へのデプロイ
  4. CI/CDにおけるHelm ChartとKubernetesマニフェスト
← CI/CD with GitHub Actions & DevOps Pipelinesに戻る