init
This commit is contained in:
commit
0e0297b89e
8 changed files with 258 additions and 0 deletions
1
.envrc
Normal file
1
.envrc
Normal file
|
|
@ -0,0 +1 @@
|
|||
use flake
|
||||
91
LAB_ARGOCD_CLI.md
Normal file
91
LAB_ARGOCD_CLI.md
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
# Lab: Mastering the ArgoCD CLI
|
||||
|
||||
This lab will guide you through managing your GitOps workflow using the `argocd` command-line interface, which is faster and often more scriptable than the UI.
|
||||
|
||||
## Prerequisites
|
||||
Ensure you have run `make setup` and your cluster is running.
|
||||
|
||||
## Step 1: Establish Connection
|
||||
|
||||
1. **Port Forward** (if not already running):
|
||||
Open a *separate terminal* and run:
|
||||
```bash
|
||||
kubectl port-forward svc/argocd-server -n argocd 8080:443
|
||||
```
|
||||
|
||||
2. **Get the Admin Password**:
|
||||
```bash
|
||||
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
|
||||
```
|
||||
|
||||
3. **Login with CLI**:
|
||||
```bash
|
||||
# Accept the self-signed certificate warning with 'y'
|
||||
argocd login localhost:8080 --username admin --password <YOUR_PASSWORD_ABOVE>
|
||||
```
|
||||
|
||||
## Step 2: Inspecting Applications
|
||||
|
||||
1. **List all apps**:
|
||||
```bash
|
||||
argocd app list
|
||||
```
|
||||
*Observe the `guestbook` app status (Synced/Healthy).*
|
||||
|
||||
2. **Get detailed info**:
|
||||
```bash
|
||||
argocd app get guestbook
|
||||
```
|
||||
*This shows the "Service" and "Deployment" resources managed by this app.*
|
||||
|
||||
3. **Check Sync History**:
|
||||
```bash
|
||||
argocd app history guestbook
|
||||
```
|
||||
|
||||
## Step 3: Triggering Actions
|
||||
|
||||
1. **Force a Refresh**:
|
||||
Sometimes ArgoCD doesn't pick up git changes immediately (default is 3m poll). Force it:
|
||||
```bash
|
||||
argocd app get guestbook --refresh
|
||||
```
|
||||
|
||||
2. **Manual Sync**:
|
||||
If an app is "OutOfSync", you can trigger it manually:
|
||||
```bash
|
||||
argocd app sync guestbook
|
||||
```
|
||||
|
||||
## Step 4: Imperative Deployment (The "Quick & Dirty" way)
|
||||
|
||||
While we prefer declarative YAML (`application.yaml`), sometimes you need to test something quickly.
|
||||
|
||||
1. **Deploy the "Sock Shop" demo app**:
|
||||
```bash
|
||||
argocd app create sock-shop \
|
||||
--repo https://github.com/argoproj/argocd-example-apps.git \
|
||||
--path sock-shop \
|
||||
--dest-server https://kubernetes.default.svc \
|
||||
--dest-namespace default
|
||||
```
|
||||
|
||||
2. **Sync it (Deploy it)**:
|
||||
Newly created apps are usually "OutOfSync" and "Missing" initially.
|
||||
```bash
|
||||
argocd app sync sock-shop
|
||||
```
|
||||
|
||||
3. **Verify**:
|
||||
```bash
|
||||
argocd app list
|
||||
kubectl get pods -n default
|
||||
```
|
||||
|
||||
## Step 5: Clean Up
|
||||
|
||||
1. **Delete the imperative app**:
|
||||
```bash
|
||||
argocd app delete sock-shop --cascade
|
||||
```
|
||||
*Confirm with `y`. `--cascade` ensures k8s resources (deployments/services) are deleted too.*
|
||||
21
Makefile
Normal file
21
Makefile
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
setup:
|
||||
@echo "Creating Kind cluster..."
|
||||
kind create cluster --name gitops-playground || true
|
||||
@echo "Installing ArgoCD..."
|
||||
kubectl create namespace argocd || true
|
||||
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
|
||||
@echo "Waiting for ArgoCD components (this may take a moment)..."
|
||||
kubectl wait --for=condition=available deployment -l "app.kubernetes.io/name=argocd-server" -n argocd --timeout=300s
|
||||
@echo "Applying Application Manifest..."
|
||||
kubectl apply -f argocd/application.yaml
|
||||
@echo "------------------------------------------------"
|
||||
@echo "✅ Setup Complete!"
|
||||
@echo "Access ArgoCD UI:"
|
||||
@echo " 1. Port-forward: kubectl port-forward svc/argocd-server -n argocd 8080:443"
|
||||
@echo " 2. Open: https://localhost:8080"
|
||||
@echo " 3. Password:"
|
||||
@echo "kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=\"{.data.password}\" | base64 -d; echo"
|
||||
@echo " 4. Username: admin"
|
||||
|
||||
clean:
|
||||
kind delete cluster --name gitops-playground
|
||||
33
README.md
Normal file
33
README.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# GitOps Playground (ArgoCD + Kind)
|
||||
|
||||
## Prerequisites
|
||||
- NixOS / Nix package manager
|
||||
- Direnv (optional, but recommended)
|
||||
|
||||
## Quick Start
|
||||
|
||||
1. **Enter Environment:**
|
||||
```bash
|
||||
direnv allow
|
||||
# OR if not using direnv:
|
||||
nix develop
|
||||
```
|
||||
|
||||
2. **Spin up Playground:**
|
||||
```bash
|
||||
make setup
|
||||
```
|
||||
|
||||
3. **Access ArgoCD:**
|
||||
- Run the port-forward command output by the make script.
|
||||
- Login with `admin` and the printed password.
|
||||
|
||||
4. **Experiment:**
|
||||
- View the `guestbook` application in the UI.
|
||||
- Modify `argocd/application.yaml` to point to a different repo or path.
|
||||
- Run `k9s` to explore the cluster state.
|
||||
|
||||
## Cleanup
|
||||
```bash
|
||||
make clean
|
||||
```
|
||||
33
apps/guestbook/deployment.yaml
Normal file
33
apps/guestbook/deployment.yaml
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: guestbook-ui
|
||||
namespace: guestbook
|
||||
spec:
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 3
|
||||
selector:
|
||||
matchLabels:
|
||||
app: guestbook-ui
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: guestbook-ui
|
||||
spec:
|
||||
containers:
|
||||
- image: gcr.io/heptio-images/ks-guestbook-demo:0.2
|
||||
name: guestbook-ui
|
||||
ports:
|
||||
- containerPort: 80
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: guestbook-ui
|
||||
namespace: guestbook
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 80
|
||||
selector:
|
||||
app: guestbook-ui
|
||||
22
argocd/application.yaml
Normal file
22
argocd/application.yaml
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: guestbook
|
||||
namespace: argocd
|
||||
finalizers:
|
||||
- resources-finalizer.argocd.argoproj.io
|
||||
spec:
|
||||
project: default
|
||||
source:
|
||||
repoURL: https://github.com/argoproj/argocd-example-apps.git
|
||||
targetRevision: HEAD
|
||||
path: guestbook
|
||||
destination:
|
||||
server: https://kubernetes.default.svc
|
||||
namespace: guestbook
|
||||
syncPolicy:
|
||||
automated:
|
||||
prune: true
|
||||
selfHeal: true
|
||||
syncOptions:
|
||||
- CreateNamespace=true
|
||||
27
flake.lock
generated
Normal file
27
flake.lock
generated
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1766651565,
|
||||
"narHash": "sha256-QEhk0eXgyIqTpJ/ehZKg9IKS7EtlWxF3N7DXy42zPfU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3e2499d5539c16d0d173ba53552a4ff8547f4539",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
30
flake.nix
Normal file
30
flake.nix
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
description = "GitOps Playground with ArgoCD and Kind";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs }:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
in
|
||||
{
|
||||
devShells.${system}.default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
kind
|
||||
kubectl
|
||||
argocd
|
||||
k9s
|
||||
jq
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
echo "🚀 GitOps Playground Environment Loaded"
|
||||
echo "Tools available: kind, kubectl, argocd, k9s"
|
||||
echo "Run 'make setup' to initialize the cluster."
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue