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 --clientK8sのシンプルな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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Actions による Docker イメージのビルド
- レジストリへのイメージのプッシュ
- Actions による Kubernetes へのデプロイ
- CI/CDにおけるHelm ChartとKubernetesマニフェスト