0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M1 Mac(16GB)で作るKubernetes + OpenTelemetry Observability検証環境 - ArgoCD対応版(Part 2: ArgoCD設定とGitOps実装)

Last updated at Posted at 2025-11-03

はじめに

本記事は3部構成のPart 2です。

Part 1をまだ読んでいない場合は、先にPart 1の記事を確認してください。

概要

Part 2では、ArgoCDのインストールと設定、GitOpsによる自動デプロイの実装を行います。セットアップスクリプト、サンプルアプリケーション、負荷テストスクリプトの作成まで含みます。

前提条件

Part 1で以下が完了していること:

  • ✅ 必要なツールがインストールされている
  • ✅ Kubernetesクラスターが起動している
  • ✅ GitLabリポジトリが準備されている
  • ✅ Helmチャートが作成されている

ステップ4: ArgoCDのインストールと設定

4.1 ArgoCDのインストール

# ArgoCD名前空間に移動
kubectl create namespace argocd

# ArgoCDをインストール
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# ArgoCDが起動するまで待機(約2-3分)
kubectl wait --for=condition=available --timeout=300s deployment/argocd-server -n argocd
kubectl wait --for=condition=available --timeout=300s deployment/argocd-repo-server -n argocd
kubectl wait --for=condition=available --timeout=300s deployment/argocd-applicationset-controller -n argocd

4.2 ArgoCD CLIのインストール

# ArgoCD CLIのインストール(既にインストール済みの場合はスキップ)
brew install argocd

4.3 ArgoCDの初期パスワード取得とログイン

# ArgoCDが完全に起動するまで待機(Secretが生成されるまで待つ)
echo "⏳ ArgoCDの初期パスワード生成を待機中..."
for i in {1..60}; do
    if kubectl -n argocd get secret argocd-initial-admin-secret >/dev/null 2>&1; then
        echo "✅ パスワードSecretが生成されました"
        break
    fi
    echo "  待機中... ($i/60)"
    sleep 2
done

# ArgoCDの初期パスワードを取得(macOS/Linux両対応)
ARGOCD_PASSWORD=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d 2>/dev/null || kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -D 2>/dev/null)

if [ -z "$ARGOCD_PASSWORD" ]; then
    echo "❌ パスワードの取得に失敗しました。ArgoCDが完全に起動するまで待ってから再試行してください。"
    echo "   確認コマンド: kubectl get pods -n argocd"
    exit 1
fi

echo "✅ ArgoCD Password: $ARGOCD_PASSWORD"

# ArgoCD Serverをポートフォワード(バックグラウンドで実行)
echo "🔌 ArgoCD Serverへのポートフォワードを開始..."
kubectl port-forward svc/argocd-server -n argocd 8080:443 > /dev/null 2>&1 &
PORT_FORWARD_PID=$!

# ポートフォワードが確立するまで待機
echo "⏳ ポートフォワードの確立を待機中..."
for i in {1..30}; do
    if curl -k -s https://localhost:8080 >/dev/null 2>&1; then
        echo "✅ ポートフォワードが確立されました"
        break
    fi
    sleep 1
done

# ArgoCDにログイン(--grpc-webオプションを追加してより確実に)
echo "🔑 ArgoCDにログイン中..."
argocd login localhost:8080 \
  --username admin \
  --password "$ARGOCD_PASSWORD" \
  --insecure \
  --grpc-web

if [ $? -eq 0 ]; then
    echo "✅ ArgoCDへのログインに成功しました"
    echo "💡 ポートフォワードを停止するには: kill $PORT_FORWARD_PID"
else
    echo "❌ ログインに失敗しました"
    echo "   確認事項:"
    echo "   - ArgoCD Podが起動しているか: kubectl get pods -n argocd"
    echo "   - パスワードが正しいか: 上記で表示されたパスワードを確認"
    echo "   - ポートフォワードが動作しているか: curl -k https://localhost:8080"
    kill $PORT_FORWARD_PID 2>/dev/null
    exit 1
fi

トラブルシューティング

もしログインに失敗する場合:

# 1. ArgoCD Podの状態を確認
kubectl get pods -n argocd

# 2. ArgoCD Serverのログを確認
kubectl logs -n argocd -l app.kubernetes.io/name=argocd-server --tail=50

# 3. Secretが正しく生成されているか確認
kubectl get secret argocd-initial-admin-secret -n argocd -o yaml

# 4. パスワードを手動で取得(base64を手動でデコード)
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
# macOSの場合、base64 -D も試す

# 5. ポートフォワードを再試行
kubectl port-forward svc/argocd-server -n argocd 8080:443

# 別ターミナルでログイン
argocd login localhost:8080 --username admin --password "<上記で取得したパスワード>" --insecure --grpc-web

4.4 ArgoCD Applicationのマニフェスト作成

cd ~/k8s-otel-gitops/argocd/apps

applications.yamlを作成:

# argocd/apps/applications.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: otel-collector
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://gitlab.com/YOUR_USERNAME/k8s-otel-gitops.git
    targetRevision: main
    path: helm-charts/otel-collector/otel-collector
    helm:
      values: |
        replicaCount: 1
        resources:
          limits:
            cpu: 500m
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 128Mi
        serviceAccount:
          create: true
          automount: true
        ingress:
          enabled: false
        httpRoute:
          enabled: false
        autoscaling:
          enabled: false
  destination:
    server: https://kubernetes.default.svc
    namespace: observability
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: prometheus
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://prometheus-community.github.io/helm-charts
    targetRevision: 40.0.0  # PSPがデフォルトで無効化されているバージョン
    chart: kube-prometheus-stack
    helm:
      values: |
        prometheus:
          prometheusSpec:
            resources:
              limits:
                cpu: 1000m
                memory: 1Gi
              requests:
                cpu: 200m
                memory: 512Mi
            retention: 7d
            retentionSize: 5GB
            storageSpec:
              volumeClaimTemplate:
                spec:
                  accessModes: ["ReadWriteOnce"]
                  storageClassName: ""  # 空文字でデフォルトのStorageClassを使用
                  resources:
                    requests:
                      storage: 5Gi
  destination:
    server: https://kubernetes.default.svc
    namespace: observability
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: grafana
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://grafana.github.io/helm-charts
    targetRevision: 6.57.4
    chart: grafana
    helm:
      values: |
        adminUser: admin
        adminPassword: admin
        resources:
          limits:
            cpu: 500m
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 128Mi
        persistence:
          enabled: true
          storageClassName: ""  # 空文字でデフォルトのStorageClassを使用
          accessModes:
            - ReadWriteOnce
          size: 2Gi
        service:
          type: NodePort
          nodePort: 30000
  destination:
    server: https://kubernetes.default.svc
    namespace: observability
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: jaeger
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://jaegertracing.github.io/helm-charts
    targetRevision: 0.72.0
    chart: jaeger
    helm:
      values: |
        agent:
          enabled: false
        collector:
          resources:
            limits:
              cpu: 500m
              memory: 512Mi
            requests:
              cpu: 100m
              memory: 128Mi
        query:
          resources:
            limits:
              cpu: 500m
              memory: 512Mi
            requests:
              cpu: 100m
              memory: 128Mi
          service:
            type: NodePort
            nodePort: 30686
        storage:
          type: memory
          cassandra:
            enabled: false  # Cassandraを無効化してリソース使用量を削減
  destination:
    server: https://kubernetes.default.svc
    namespace: observability
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

重要な注意事項:

  1. パス設定について:

    • pathは、GitリポジトリのルートからHelmチャートディレクトリへの相対パスを指定します
    • プロジェクトディレクトリがリポジトリのルート直下にある場合(例: ~/k8s-otel-gitopsがルート): helm-charts/otel-collector/otel-collector
    • プロジェクトディレクトリがサブディレクトリにある場合(例: repo/sandbox/k8s-otel-gitops): sandbox/k8s-otel-gitops/helm-charts/otel-collector/otel-collector
    • 実際のリポジトリ構造に合わせてパスを調整してください
  2. リポジトリURLについて:

    • YOUR_USERNAMEは実際のGitLabまたはGitHubのユーザー名に置き換えてください
    • GitHubを使用する場合: https://github.com/YOUR_USERNAME/k8s-otel-gitops.git
    • GitLabを使用する場合: https://gitlab.com/YOUR_USERNAME/k8s-otel-gitops.git
  3. プライベートリポジトリについて:

    • プライベートリポジトリの場合は、ArgoCDにリポジトリを登録する必要があります(ステップ8参照)
    • Personal Access Tokenを使用する場合、記事やコードにトークンを直接記載しないでください
    • トークンは環境変数やSecretとして管理し、ArgoCDに登録する際に使用してください

ステップ5: ワンコマンドセットアップスクリプト

5.1 セットアップスクリプトの作成

cd ~/k8s-otel-gitops/scripts

setup.shを作成:

#!/bin/bash
set -e

echo "🚀 Kubernetes + OpenTelemetry 検証環境のセットアップを開始します..."

# 色の定義
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# 必要なツールの確認
echo -e "${YELLOW}📋 必要なツールの確認中...${NC}"
command -v kubectl >/dev/null 2>&1 || { echo -e "${RED}❌ kubectl がインストールされていません${NC}"; exit 1; }
command -v helm >/dev/null 2>&1 || { echo -e "${RED}❌ helm がインストールされていません${NC}"; exit 1; }
command -v argocd >/dev/null 2>&1 || { echo -e "${RED}❌ argocd がインストールされていません${NC}"; exit 1; }

# Kubernetesクラスターの確認
echo -e "${YELLOW}🔍 Kubernetesクラスターの確認中...${NC}"
if ! kubectl cluster-info >/dev/null 2>&1; then
    echo -e "${RED}❌ Kubernetesクラスターに接続できません${NC}"
    echo "Docker DesktopでKubernetesが有効化されているか確認してください"
    exit 1
fi

# 名前空間の作成
echo -e "${YELLOW}📦 名前空間の作成中...${NC}"
kubectl create namespace argocd --dry-run=client -o yaml | kubectl apply -f -
kubectl create namespace observability --dry-run=client -o yaml | kubectl apply -f -
kubectl create namespace demo-app --dry-run=client -o yaml | kubectl apply -f -

# ArgoCDのインストール
echo -e "${YELLOW}🔧 ArgoCDのインストール中...${NC}"
if ! kubectl get deployment argocd-server -n argocd >/dev/null 2>&1; then
    kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
    echo "⏳ ArgoCDの起動を待機中(約2-3分)..."
    kubectl wait --for=condition=available --timeout=300s deployment/argocd-server -n argocd
    kubectl wait --for=condition=available --timeout=300s deployment/argocd-repo-server -n argocd
else
    echo -e "${GREEN}✅ ArgoCDは既にインストールされています${NC}"
fi

# ArgoCDの初期パスワード取得
echo -e "${YELLOW}🔐 ArgoCDの初期パスワードを取得中...${NC}"
ARGOCD_PASSWORD=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" 2>/dev/null | base64 -d)

if [ -z "$ARGOCD_PASSWORD" ]; then
    echo -e "${YELLOW}⚠️  初期パスワードが取得できませんでした。ArgoCDの起動を待ってから再実行してください${NC}"
    exit 1
fi

# ArgoCDにログイン(ポートフォワードが必要)
echo -e "${YELLOW}🔑 ArgoCDにログイン中...${NC}"
kubectl port-forward svc/argocd-server -n argocd 8080:443 > /dev/null 2>&1 &
PORT_FORWARD_PID=$!
sleep 3

# ArgoCDにログイン
argocd login localhost:8080 --username admin --password "$ARGOCD_PASSWORD" --insecure --grpc-web > /dev/null 2>&1 || true

# HelmリポジトリをArgoCDに登録
echo -e "${YELLOW}📦 HelmリポジトリをArgoCDに登録中...${NC}"
argocd repo add https://prometheus-community.github.io/helm-charts --name prometheus-community --type helm --insecure-skip-server-verification > /dev/null 2>&1 || true
argocd repo add https://grafana.github.io/helm-charts --name grafana --type helm --insecure-skip-server-verification > /dev/null 2>&1 || true
argocd repo add https://jaegertracing.github.io/helm-charts --name jaegertracing --type helm --insecure-skip-server-verification > /dev/null 2>&1 || true

# ポートフォワードを停止
kill $PORT_FORWARD_PID 2>/dev/null || true

# ArgoCD Applicationの適用
echo -e "${YELLOW}📝 ArgoCD Applicationの適用中...${NC}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"

if [ -f "$PROJECT_ROOT/argocd/apps/applications.yaml" ]; then
    echo -e "${YELLOW}⚠️  重要: GitLabリポジトリにコードをプッシュしてから続行してください${NC}"
    echo -e "${YELLOW}   まだプッシュしていない場合: git push -u origin main${NC}"
    echo ""
    read -p "GitLabリポジトリにプッシュしましたか? (y/n) " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        echo -e "${YELLOW}⚠️  先にGitLabリポジトリにプッシュしてから再実行してください${NC}"
        exit 1
    fi
    
    kubectl apply -f "$PROJECT_ROOT/argocd/apps/applications.yaml"
    echo -e "${GREEN}✅ ArgoCD Applicationを適用しました${NC}"
    echo -e "${YELLOW}💡 注意: applications.yamlのrepoURLを実際のGitLabリポジトリURLに変更してください${NC}"
    echo -e "${YELLOW}💡 次のステップ: ArgoCD Applicationを同期してください(Part 3参照)${NC}"
else
    echo -e "${YELLOW}⚠️  applications.yamlが見つかりません。手動で適用してください${NC}"
fi

# リソースの確認
echo -e "${YELLOW}📊 デプロイ状況の確認中...${NC}"
sleep 5

# Applicationが適用されているか確認
echo ""
echo -e "${YELLOW}📋 ArgoCD Applicationの状態:${NC}"
APPLICATIONS=$(kubectl get applications -n argocd --no-headers 2>/dev/null | wc -l)
if [ "$APPLICATIONS" -eq 0 ]; then
    echo -e "${RED}❌ Applicationが作成されていません${NC}"
    echo -e "${YELLOW}   確認: kubectl get applications -n argocd${NC}"
    echo -e "${YELLOW}   対処: kubectl apply -f $PROJECT_ROOT/argocd/apps/applications.yaml${NC}"
else
    echo -e "${GREEN}$APPLICATIONS 個のApplicationが作成されています${NC}"
    kubectl get applications -n argocd
fi

# Podの状態確認
echo ""
echo -e "${YELLOW}📋 ArgoCD Podの状態:${NC}"
kubectl get pods -n argocd

echo ""
echo -e "${YELLOW}📋 observability名前空間のPod状態:${NC}"
OBSERVABILITY_PODS=$(kubectl get pods -n observability --no-headers 2>/dev/null | wc -l)
if [ "$OBSERVABILITY_PODS" -eq 0 ]; then
    echo -e "${YELLOW}⚠️  observability名前空間にPodがありません(これは正常です。Applicationを同期するまでPodは作成されません)${NC}"
else
    kubectl get pods -n observability
fi

echo ""
echo -e "${GREEN}🎉 セットアップが完了しました!${NC}"
echo ""
echo "📋 次のステップ:"
echo "1. Applicationが作成されているか確認: kubectl get applications -n argocd"
if [ "$APPLICATIONS" -eq 0 ]; then
    echo "   ⚠️  Applicationが存在しない場合: kubectl apply -f $PROJECT_ROOT/argocd/apps/applications.yaml"
fi
echo "2. Applicationを同期: Part 3を参照"
echo "3. 全リソースの確認: Part 3を参照"
echo "4. ArgoCD UIにアクセス: kubectl port-forward svc/argocd-server -n argocd 8080:443"

スクリプトに実行権限を付与:

chmod +x setup.sh

ステップ6: サンプルアプリケーションの作成

6.1 サンプルアプリケーションのマニフェスト

cd ~/k8s-otel-gitops/demo-app

app.yamlを作成:

# demo-app/app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-app
  namespace: demo-app
  labels:
    app: demo-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-app
  template:
    metadata:
      labels:
        app: demo-app
    spec:
      containers:
      - name: demo-app
        image: nginx:alpine
        ports:
        - containerPort: 80
        env:
        - name: OTEL_SERVICE_NAME
          value: "demo-app"
        - name: OTEL_EXPORTER_OTLP_ENDPOINT
          value: "http://otel-collector.observability.svc.cluster.local:4317"
        resources:
          limits:
            cpu: 200m
            memory: 256Mi
          requests:
            cpu: 50m
            memory: 64Mi
---
apiVersion: v1
kind: Service
metadata:
  name: demo-app
  namespace: demo-app
spec:
  selector:
    app: demo-app
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP

ステップ7: k6による負荷テストと疎通確認

7.1 k6テストスクリプトの作成

cd ~/k8s-otel-gitops
mkdir -p tests

tests/load-test.jsを作成:

// tests/load-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';

export let options = {
  stages: [
    { duration: '30s', target: 10 },  // 10ユーザーで30秒
    { duration: '1m', target: 20 },   // 20ユーザーで1分
    { duration: '30s', target: 0 },   // 0ユーザーに戻す
  ],
  thresholds: {
    http_req_duration: ['p(95)<500'], // 95%のリクエストが500ms以内
    http_req_failed: ['rate<0.1'],    // エラー率10%未満
  },
};

export default function() {
  // ポートフォワード経由でアクセス(別ターミナルで実行: kubectl port-forward svc/demo-app -n demo-app 8080:80)
  let response = http.get('http://localhost:8080/');
  
  check(response, {
    'status is 200': (r) => r.status === 200,
    'response time < 500ms': (r) => r.timings.duration < 500,
  });

  sleep(1);
}

7.2 疎通確認スクリプト

scripts/health-check.shを作成:

#!/bin/bash
set -e

echo "🔍 疎通確認を開始します..."

# 色の定義
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'

# OpenTelemetry Collectorの確認
echo -e "${YELLOW}📡 OpenTelemetry Collectorの確認...${NC}"
if kubectl get pod -n observability -l app=otel-collector 2>/dev/null | grep -q Running; then
    echo -e "${GREEN}✅ OpenTelemetry Collector が起動しています${NC}"
else
    echo -e "${RED}❌ OpenTelemetry Collector が起動していません${NC}"
fi

# Prometheusの確認
echo -e "${YELLOW}📊 Prometheusの確認...${NC}"
if kubectl get pod -n observability -l app.kubernetes.io/name=prometheus 2>/dev/null | grep -q Running; then
    echo -e "${GREEN}✅ Prometheus が起動しています${NC}"
else
    echo -e "${RED}❌ Prometheus が起動していません${NC}"
fi

# Grafanaの確認
echo -e "${YELLOW}📈 Grafanaの確認...${NC}"
if kubectl get pod -n observability -l app.kubernetes.io/name=grafana 2>/dev/null | grep -q Running; then
    echo -e "${GREEN}✅ Grafana が起動しています${NC}"
    echo "   アクセス: kubectl port-forward svc/grafana -n observability 3000:80"
    echo "   ユーザー名: admin、パスワード: admin"
else
    echo -e "${RED}❌ Grafana が起動していません${NC}"
fi

# Jaegerの確認
echo -e "${YELLOW}🔍 Jaegerの確認...${NC}"
if kubectl get pod -n observability -l app.kubernetes.io/name=jaeger 2>/dev/null | grep -q Running; then
    echo -e "${GREEN}✅ Jaeger が起動しています${NC}"
    echo "   アクセス: kubectl port-forward svc/jaeger-query -n observability 16686:16686"
else
    echo -e "${RED}❌ Jaeger が起動していません${NC}"
fi

# ArgoCDの確認
echo -e "${YELLOW}🚀 ArgoCDの確認...${NC}"
if kubectl get pod -n argocd -l app.kubernetes.io/name=argocd-server 2>/dev/null | grep -q Running; then
    echo -e "${GREEN}✅ ArgoCD が起動しています${NC}"
    echo "   アクセス: kubectl port-forward svc/argocd-server -n argocd 8080:443"
else
    echo -e "${RED}❌ ArgoCD が起動していません${NC}"
fi

echo ""
echo -e "${GREEN}✅ 疎通確認が完了しました${NC}"

実行権限を付与:

chmod +x scripts/health-check.sh

7.3 全リソース診断スクリプトの作成

すべてのリソースが正しく作成されているか確認する診断スクリプトを作成します:

scripts/diagnose.shを作成(内容はPart 1と同じパターンで、長いので省略。詳細は[元記事]を参照):

#!/bin/bash
set -e

echo "🔍 全リソース診断を開始します..."
echo ""

# 色の定義
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

# 1. 名前空間の確認
echo -e "${YELLOW}1. 名前空間の確認${NC}"
for ns in argocd observability demo-app; do
    if kubectl get namespace $ns >/dev/null 2>&1; then
        echo -e "  ${GREEN}$ns${NC}"
    else
        echo -e "  ${RED}$ns が存在しません${NC}"
    fi
done

# 2. ArgoCD Applicationの確認
echo ""
echo -e "${YELLOW}2. ArgoCD Applicationの確認${NC}"
APPLICATIONS=$(kubectl get applications -n argocd --no-headers 2>/dev/null | wc -l | tr -d ' ')
if [ "$APPLICATIONS" -gt 0 ]; then
    echo -e "  ${GREEN}$APPLICATIONS 個のApplicationが存在します${NC}"
    kubectl get applications -n argocd
else
    echo -e "  ${RED}❌ Applicationが存在しません${NC}"
    echo -e "  ${YELLOW}   対処: kubectl apply -f argocd/apps/applications.yaml${NC}"
fi

# ... 他の確認項目(省略)

実行権限を付与:

chmod +x scripts/diagnose.sh

ステップ8: プライベートリポジトリのArgoCD登録(必要な場合)

プライベートリポジトリ(GitHub/GitLab)を使用する場合、ArgoCDにリポジトリを登録する必要があります。

セキュリティ注意事項:

  • Personal Access Tokenは記事やコードに直接記載しないでください
  • トークンは環境変数やSecretとして管理し、コマンド実行時に使用してください
  • トークンが漏洩した場合は、すぐに無効化してください

8.1 GitHub Personal Access Tokenの作成

  1. GitHubにログイン
  2. Settings → Developer settings → Personal access tokens → Tokens (classic)
  3. "Generate new token (classic)" をクリック
  4. Note: argocd-repo-access
  5. Scopes: repo にチェック(Full control of private repositories)
  6. "Generate token" をクリック
  7. 生成されたトークンをコピー(後で使用します。この機会のみ表示されます

8.2 GitLab Personal Access Tokenの作成

  1. GitLabにログイン
  2. Settings → Access Tokens
  3. Token name: argocd-repo-access
  4. Scopes: read_repository にチェック
  5. "Create personal access token" をクリック
  6. 生成されたトークンをコピー(後で使用します)

8.3 ArgoCDにリポジトリを登録

GitHubリポジトリの場合

# ArgoCD Serverをポートフォワード(バックグラウンドで実行)
kubectl port-forward svc/argocd-server -n argocd 8080:443 > /dev/null 2>&1 &
sleep 3

# ArgoCDにログイン
ARGOCD_PASSWORD=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d 2>/dev/null || kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -D)
argocd login localhost:8080 --username admin --password "$ARGOCD_PASSWORD" --insecure --grpc-web

# 環境変数にトークンを設定(実際のトークンに置き換える)
export GITHUB_TOKEN="your_github_token_here"

# ArgoCDにリポジトリを登録
argocd repo add https://github.com/YOUR_USERNAME/k8s-otel-gitops.git \
  --name github-k8s-otel \
  --type git \
  --username YOUR_USERNAME \
  --password "$GITHUB_TOKEN" \
  --insecure-skip-server-verification

GitLabリポジトリの場合

# ArgoCD Serverをポートフォワード(バックグラウンドで実行)
kubectl port-forward svc/argocd-server -n argocd 8080:443 > /dev/null 2>&1 &
sleep 3

# ArgoCDにログイン
ARGOCD_PASSWORD=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d 2>/dev/null || kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -D)
argocd login localhost:8080 --username admin --password "$ARGOCD_PASSWORD" --insecure --grpc-web

# 環境変数にトークンを設定(実際のトークンに置き換える)
export GITLAB_TOKEN="your_gitlab_token_here"

# ArgoCDにリポジトリを登録
argocd repo add https://gitlab.com/YOUR_USERNAME/k8s-otel-gitops.git \
  --name gitlab-k8s-otel \
  --type git \
  --username YOUR_USERNAME \
  --password "$GITLAB_TOKEN" \
  --insecure-skip-server-verification

ステップ9: Gitリポジトリへのコミットとプッシュ

9.1 .gitignoreの作成

cd ~/k8s-otel-gitops

.gitignoreを作成:

# Kubernetes secrets
*.secret.yaml
secrets/

# Temporary files
*.tmp
*.log

# IDE
.vscode/
.idea/

# OS
.DS_Store

9.2 初回コミット

# すべてのファイルをステージング
git add .

# 初回コミット
git commit -m "Initial commit: Kubernetes + OpenTelemetry GitOps環境"

# リモートリポジトリにプッシュ
git push -u origin main

⚠️ 重要なポイント: GitLabリポジトリにコードをプッシュしてから、ArgoCD Applicationを適用・同期してください。順序が逆だと同期に失敗します。

まとめ(Part 2)

Part 2では、以下の作業を完了しました:

ArgoCDのインストールと設定: ArgoCDのインストール、ログイン、Applicationマニフェスト作成
セットアップスクリプトの作成: ワンコマンドセットアップスクリプト
サンプルアプリケーションの作成: デモアプリのマニフェスト
負荷テストと疎通確認スクリプト: k6テストスクリプト、health-check.sh、diagnose.sh
プライベートリポジトリの登録: ArgoCDへのリポジトリ登録
Gitリポジトリへのコミットとプッシュ: すべての設定をコード管理

次のステップ: Part 3では、セットアップの実行、ArgoCD Applicationの同期、動作確認、トラブルシューティングを行います。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?