mirror of https://github.com/fluxcd/flux2.git
Merge pull request #401 from fluxcd/docs-v1-migration
Add migration guide for Flux v1 userspull/402/head
commit
fb81870803
@ -0,0 +1,315 @@
|
|||||||
|
# Migrate from Flux v1 to v2
|
||||||
|
|
||||||
|
This guide walks you through migrating from Flux v1 to v2.
|
||||||
|
Read the [FAQ](../faq/index.md) to find out what differences are between v1 and v2.
|
||||||
|
|
||||||
|
!!! info "Automated image updates"
|
||||||
|
The image automation feature is under development in Flux v2.
|
||||||
|
Please consult the [roadmap](../roadmap/index.md) for more details.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
You will need a Kubernetes cluster version **1.16** or newer
|
||||||
|
and kubectl version **1.18** or newer.
|
||||||
|
|
||||||
|
### Install Flux v2 CLI
|
||||||
|
|
||||||
|
With Homebrew:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
brew install fluxcd/tap/flux
|
||||||
|
```
|
||||||
|
|
||||||
|
With Bash:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl -s https://toolkit.fluxcd.io/install.sh | sudo bash
|
||||||
|
|
||||||
|
# enable completions in ~/.bash_profile
|
||||||
|
. <(flux completion bash)
|
||||||
|
```
|
||||||
|
|
||||||
|
Command-line completion for `zsh`, `fish`, and `powershell`
|
||||||
|
are also supported with their own sub-commands.
|
||||||
|
|
||||||
|
Binaries for macOS, Windows and Linux AMD64/ARM are available for download on the
|
||||||
|
[release page](https://github.com/fluxcd/flux2/releases).
|
||||||
|
|
||||||
|
Verify that your cluster satisfies the prerequisites with:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
flux check --pre
|
||||||
|
```
|
||||||
|
|
||||||
|
## GitOps migration
|
||||||
|
|
||||||
|
Flux v2 offers an installation procedure that is declarative first
|
||||||
|
and disaster resilient.
|
||||||
|
|
||||||
|
Using the `flux bootstrap` command you can install Flux on a
|
||||||
|
Kubernetes cluster and configure it to manage itself from a Git
|
||||||
|
repository. The Git repository created during bootstrap can be used
|
||||||
|
to define the state of your fleet of Kubernetes clusters.
|
||||||
|
|
||||||
|
For a detailed walk-through of the bootstrap procedure please see the [installation guide](installation.md).
|
||||||
|
|
||||||
|
After you've installed Flux v2 on your cluster using bootstrap,
|
||||||
|
you can delete the Flux v1 from your clusters and move the manifests from the
|
||||||
|
Flux v1 repository to the bootstrap one.
|
||||||
|
|
||||||
|
## In-place migration
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
For production use we recommend using the **bootstrap** procedure,
|
||||||
|
but if you wish to install Flux v2 in the
|
||||||
|
same way as Flux v1 then follow along.
|
||||||
|
|
||||||
|
### Flux read-only mode
|
||||||
|
|
||||||
|
Assuming you've installed Flux v1 to sync a directory with plain YAMLs from a private Git repo:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# create namespace
|
||||||
|
kubectl create ns flux
|
||||||
|
|
||||||
|
# deploy Flux v1
|
||||||
|
fluxctl install \
|
||||||
|
--git-url=git@github.com:org/app \
|
||||||
|
--git-branch=main \
|
||||||
|
--git-path=./deploy \
|
||||||
|
--git-readonly \
|
||||||
|
--namespace=flux | kubectl apply -f -
|
||||||
|
|
||||||
|
# print deploy key
|
||||||
|
fluxctl identity --k8s-fwd-ns flux
|
||||||
|
|
||||||
|
# trigger sync
|
||||||
|
fluxctl sync --k8s-fwd-ns flux
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! hint "Uninstall Flux v1"
|
||||||
|
Before you proceed, scale the Flux v1 deployment to zero
|
||||||
|
or delete its namespace and RBAC.
|
||||||
|
|
||||||
|
If there are YAML files in your `deploy` dir that are not meant to be
|
||||||
|
applied on the cluster, you can exclude them by placing a `.sourceignore` in your repo root:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ cat .sourceignore
|
||||||
|
# exclude all
|
||||||
|
/*
|
||||||
|
# include deploy dir
|
||||||
|
!/deploy
|
||||||
|
# exclude files from deploy dir
|
||||||
|
/deploy/**/eksctl.yaml
|
||||||
|
/deploy/**/charts
|
||||||
|
```
|
||||||
|
|
||||||
|
Install Flux v2 in the `flux-system` namespace:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ flux install \
|
||||||
|
--arch=amd64 \
|
||||||
|
--network-policy=true \
|
||||||
|
--watch-all-namespaces=true \
|
||||||
|
--namespace=flux-systen
|
||||||
|
✚ generating manifests
|
||||||
|
✔ manifests build completed
|
||||||
|
► installing components in flux-system namespace
|
||||||
|
✔ install completed
|
||||||
|
◎ verifying installation
|
||||||
|
✔ source-controller ready
|
||||||
|
✔ kustomize-controller ready
|
||||||
|
✔ helm-controller ready
|
||||||
|
✔ notification-controller ready
|
||||||
|
✔ install finished
|
||||||
|
```
|
||||||
|
|
||||||
|
Register your Git repository and add the deploy key with read-only access:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ flux create source git app \
|
||||||
|
--url=ssh://git@github.com/org/app \
|
||||||
|
--branch=main \
|
||||||
|
--interval=1m
|
||||||
|
► generating deploy key pair
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp2x9ghVmv1zD...
|
||||||
|
Have you added the deploy key to your repository: y
|
||||||
|
► collecting preferred public key from SSH server
|
||||||
|
✔ collected public key from SSH server:
|
||||||
|
github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A...
|
||||||
|
► applying secret with keys
|
||||||
|
✔ authentication configured
|
||||||
|
✚ generating GitRepository source
|
||||||
|
► applying GitRepository source
|
||||||
|
✔ GitRepository source created
|
||||||
|
◎ waiting for GitRepository source reconciliation
|
||||||
|
✔ GitRepository source reconciliation completed
|
||||||
|
✔ fetched revision: main/5302d04c2ab8f0579500747efa0fe7abc72c8f9b
|
||||||
|
```
|
||||||
|
|
||||||
|
Configure the reconciliation of the `deploy` dir on your cluster:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ flux create kustomization app \
|
||||||
|
--source=app \
|
||||||
|
--path="./deploy" \
|
||||||
|
--prune=true \
|
||||||
|
--interval=10m
|
||||||
|
✚ generating Kustomization
|
||||||
|
► applying Kustomization
|
||||||
|
✔ Kustomization created
|
||||||
|
◎ waiting for Kustomization reconciliation
|
||||||
|
✔ Kustomization app is ready
|
||||||
|
✔ applied revision main/5302d04c2ab8f0579500747efa0fe7abc72c8f9b
|
||||||
|
```
|
||||||
|
|
||||||
|
If your repository contains secrets encrypted with Mozilla SOPS, please read this [guide](mozilla-sops.md).
|
||||||
|
|
||||||
|
Pull changes from Git and apply them immediately:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
flux reconcile kustomization app --with-source
|
||||||
|
```
|
||||||
|
|
||||||
|
List all Kubernetes objects reconciled by `app`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl get all --all-namespaces \
|
||||||
|
-l=kustomize.toolkit.fluxcd.io/name=app \
|
||||||
|
-l=kustomize.toolkit.fluxcd.io/namespace=flux-system
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flux with Kustomize
|
||||||
|
|
||||||
|
Assuming you've installed Flux v1 to sync a Kustomize overlay from an HTTPS Git repository:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
fluxctl install \
|
||||||
|
--git-url=https://github.com/org/app \
|
||||||
|
--git-branch=main \
|
||||||
|
--manifest-generation \
|
||||||
|
--namespace=flux | kubectl apply -f -
|
||||||
|
```
|
||||||
|
|
||||||
|
With the following `.flux.yaml` in the root dir:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: 1
|
||||||
|
patchUpdated:
|
||||||
|
generators:
|
||||||
|
- command: kustomize build ./overlays/prod
|
||||||
|
patchFile: flux-patch.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! hint "Uninstall Flux v1"
|
||||||
|
Before you proceed, delete the Flux v1 namespace
|
||||||
|
and remove the `.flux.yaml` from your repo.
|
||||||
|
|
||||||
|
Install Flux v2 in the `flux-system` namespace:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
flux install
|
||||||
|
```
|
||||||
|
|
||||||
|
Register the Git repository using a personal access token:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
flux create source git app \
|
||||||
|
--url=https://github.com/org/app \
|
||||||
|
--branch=main \
|
||||||
|
--username=git \
|
||||||
|
--password=token \
|
||||||
|
--interval=1m
|
||||||
|
```
|
||||||
|
|
||||||
|
Configure the reconciliation of the `prod` overlay on your cluster:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
flux create kustomization app \
|
||||||
|
--source=app \
|
||||||
|
--path="./overlays/prod" \
|
||||||
|
--prune=true \
|
||||||
|
--interval=10m
|
||||||
|
```
|
||||||
|
|
||||||
|
Check the status of the Kustomization reconciliation:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ flux get kustomizations app
|
||||||
|
NAME REVISION SUSPENDED READY
|
||||||
|
app main/5302d04c2ab8f0579500747efa0fe7abc72c8f9b False True
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flux with Slack notifications
|
||||||
|
|
||||||
|
Assuming you've configured Flux v1 to send notifications to Slack with FluxCloud.
|
||||||
|
|
||||||
|
With Flux v2, create an alert provider for a Slack channel:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
flux create alert-provider slack \
|
||||||
|
--type=slack \
|
||||||
|
--channel=general \
|
||||||
|
--address=https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK
|
||||||
|
```
|
||||||
|
|
||||||
|
And configure notifications for the `app` reconciliation events:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
flux create alert app \
|
||||||
|
--provider-ref=slack \
|
||||||
|
--event-severity=info \
|
||||||
|
--event-source=GitRepository/app \
|
||||||
|
--event-source=Kustomization/app
|
||||||
|
```
|
||||||
|
|
||||||
|
For more details, read the guides on how to configure
|
||||||
|
[notifications](notifications.md) and [webhooks](webhook-receivers.md).
|
||||||
|
|
||||||
|
### Flux debugging
|
||||||
|
|
||||||
|
Check the status of Git operations:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ kubectl -n flux-system get gitrepositories
|
||||||
|
NAME READY MESSAGE
|
||||||
|
app True Fetched revision: main/5302d04c2ab8f0579500747efa0fe7abc72c8f9b
|
||||||
|
test False SSH handshake failed: unable to authenticate, attempted methods [none publickey]
|
||||||
|
```
|
||||||
|
|
||||||
|
Check the status of the cluster reconciliation with kubectl:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ kubectl -n flux-system get kustomizations
|
||||||
|
NAME READY STATUS
|
||||||
|
app True Applied revision: main/5302d04c2ab8f0579500747efa0fe7abc72c8f9
|
||||||
|
test False The Service 'backend' is invalid: spec.type: Unsupported value: 'Ingress'
|
||||||
|
```
|
||||||
|
|
||||||
|
Suspend a reconciliation:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ flux suspend kustomization app
|
||||||
|
► suspending kustomization app in flux-system namespace
|
||||||
|
✔ kustomization suspended
|
||||||
|
```
|
||||||
|
|
||||||
|
Check the status with kubectl:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ kubectl -n flux-system get kustomization app
|
||||||
|
NAME READY STATUS
|
||||||
|
app False Kustomization is suspended, skipping reconciliation
|
||||||
|
```
|
||||||
|
|
||||||
|
Resume a reconciliation:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ flux resume kustomization app
|
||||||
|
► resuming Kustomization app in flux-system namespace
|
||||||
|
✔ Kustomization resumed
|
||||||
|
◎ waiting for Kustomization reconciliation
|
||||||
|
✔ Kustomization reconciliation completed
|
||||||
|
✔ applied revision main/5302d04c2ab8f0579500747efa0fe7abc72c8f9b
|
||||||
|
```
|
Loading…
Reference in New Issue