はじめに
本記事は3部構成のPart 2です。
- Part 1: 環境構築とHelmチャート作成
- Part 2(本記事): ArgoCD設定とGitOps実装
- Part 3: 実行・動作確認・トラブルシューティング
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
重要な注意事項:
-
パス設定について:
-
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 - 実際のリポジトリ構造に合わせてパスを調整してください
-
-
リポジトリ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
-
-
プライベートリポジトリについて:
- プライベートリポジトリの場合は、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の作成
- GitHubにログイン
- Settings → Developer settings → Personal access tokens → Tokens (classic)
- "Generate new token (classic)" をクリック
- Note:
argocd-repo-access - Scopes:
repoにチェック(Full control of private repositories) - "Generate token" をクリック
- 生成されたトークンをコピー(後で使用します。この機会のみ表示されます)
8.2 GitLab Personal Access Tokenの作成
- GitLabにログイン
- Settings → Access Tokens
- Token name:
argocd-repo-access - Scopes:
read_repositoryにチェック - "Create personal access token" をクリック
- 生成されたトークンをコピー(後で使用します)
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の同期、動作確認、トラブルシューティングを行います。