# Install Helm + Flux
Flux Architecture:
Create git repository which will be used by Flux in GitHub:
hub create -d "Flux repository for k8s-flux-istio-gitlab-harbor" -h "https://ruzickap.github.io/k8s-flux-istio-gitlab-harbor/" ruzickap/k8s-flux-repository
Output:
A git remote named 'origin' already exists and is set to push to 'ssh://git@github.com/ruzickap/k8s-flux-istio-gitlab-harbor.git'.
https://github.com/ruzickap/k8s-flux-repository
Clone newly create git repository:
if [ ! -n "$(grep "^github.com " ~/.ssh/known_hosts)" ]; then ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null; fi
git config --global user.email "petr.ruzicka@gmail.com"
git -C tmp clone git@github.com:ruzickap/k8s-flux-repository.git
Output:
Cloning into 'k8s-flux-repository'...
warning: You appear to have cloned an empty repository.
Create initial flux repository structure and add it into the git repository:
cp -v files/flux-repository/README.md tmp/k8s-flux-repository/
mkdir -v tmp/k8s-flux-repository/{namespaces,releases,workloads}
git -C tmp/k8s-flux-repository add .
git -C tmp/k8s-flux-repository commit -m "Initial commit"
git -C tmp/k8s-flux-repository push -q
Output:
'files/flux-repository/README.md' -> 'tmp/k8s-flux-repository/README.md'
mkdir: created directory 'tmp/k8s-flux-repository/namespaces'
mkdir: created directory 'tmp/k8s-flux-repository/releases'
mkdir: created directory 'tmp/k8s-flux-repository/workloads'
[master (root-commit) 01ec748] Initial commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
# Install Helm
Install Helm (opens new window) binary:
curl -s https://raw.githubusercontent.com/helm/helm/master/scripts/get | bash -s -- --version v2.14.3
Output:
Helm v2.14.3 is already v2.14.3
Run 'helm init' to configure helm.
Create a service account and a cluster role binding for Tiller:
kubectl -n kube-system create sa tiller
kubectl create clusterrolebinding tiller-cluster-rule \
--clusterrole=cluster-admin \
--serviceaccount=kube-system:tiller
Output:
serviceaccount/tiller created
clusterrolebinding.rbac.authorization.k8s.io/tiller-cluster-rule created
Deploy Tiller in kube-system
namespace:
helm init --skip-refresh --upgrade --service-account tiller --history-max 10 --wait
Output:
Creating /home/pruzicka/.helm
Creating /home/pruzicka/.helm/repository
Creating /home/pruzicka/.helm/repository/cache
Creating /home/pruzicka/.helm/repository/local
Creating /home/pruzicka/.helm/plugins
Creating /home/pruzicka/.helm/starters
Creating /home/pruzicka/.helm/cache/archive
Creating /home/pruzicka/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /home/pruzicka/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Check if the tiller was installed properly:
kubectl get pods -l app=helm -n kube-system
Output:
NAME READY STATUS RESTARTS AGE
tiller-deploy-7b8b4499b5-cs6zf 1/1 Running 0 11s
# Install Flux
Add the Flux repository:
helm repo add fluxcd https://charts.fluxcd.io
helm update
Output:
"fluxcd" has been added to your repositories
Command "update" is deprecated, use 'helm repo update'
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "fluxcd" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete.
Apply the Helm Release CRD:
kubectl apply -f https://raw.githubusercontent.com/fluxcd/flux/helm-0.10.1/deploy-helm/flux-helm-release-crd.yaml
Output:
customresourcedefinition.apiextensions.k8s.io/helmreleases.flux.weave.works created
Install Flux:
helm install --name flux --namespace flux --wait --version 0.12.0 fluxcd/flux \
--set git.email="petr.ruzicka@gmail.com" \
--set git.url=git@github.com:ruzickap/k8s-flux-repository \
--set git.user="Flux" \
--set helmOperator.create=true \
--set helmOperator.createCRD=false \
--set registry.insecureHosts="harbor.${MY_DOMAIN}" \
--set registry.pollInterval="10s" \
--set syncGarbageCollection.enabled=true
Output:
NAME: flux
LAST DEPLOYED: Thu Aug 29 09:39:10 2019
NAMESPACE: flux
STATUS: DEPLOYED
RESOURCES:
==> v1/ConfigMap
NAME DATA AGE
flux-kube-config 1 16s
==> v1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
flux 1/1 1 1 16s
flux-helm-operator 1/1 1 1 16s
flux-memcached 1/1 1 1 16s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
flux-bbb76576-8clvg 1/1 Running 0 16s
flux-helm-operator-6877b9f564-rt5rl 1/1 Running 0 16s
flux-memcached-88db78d9d-vnrl7 1/1 Running 0 16s
==> v1/Secret
NAME TYPE DATA AGE
flux-git-deploy Opaque 1 16s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
flux ClusterIP 100.70.220.201 <none> 3030/TCP 16s
flux-memcached ClusterIP 100.64.195.153 <none> 11211/TCP 16s
==> v1/ServiceAccount
NAME SECRETS AGE
flux 1 16s
==> v1beta1/ClusterRole
NAME AGE
flux 16s
==> v1beta1/ClusterRoleBinding
NAME AGE
flux 16s
NOTES:
Get the Git deploy key by either (a) running
kubectl -n flux logs deployment/flux | grep identity.pub | cut -d '"' -f2
or by (b) installing fluxctl through
https://github.com/weaveworks/flux/blob/master/docs/references/fluxctl.md#installing-fluxctl
and running:
fluxctl identity
Install fluxcli:
sudo wget -q -c https://github.com/fluxcd/flux/releases/download/1.14.0/fluxctl_linux_amd64 -O /usr/local/bin/fluxctl
sudo chmod a+x /usr/local/bin/fluxctl
Set the namespace (flux
) where flux was installed for running fluxctl
:
export FLUX_FORWARD_NAMESPACE=flux
Obtain the ssh public key through fluxctl
:
fluxctl identity
if [ -x /usr/bin/chromium-browser ]; then chromium-browser https://github.com/ruzickap/k8s-flux-repository/settings/keys/new & fi
Output:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyGvcJPcFxvsc9SHtJiOt7G6pvNQgmcf+PIIfy6PoEvXK2naXmKw68+dtKeIoMzvp63QxoNB+B6qamMbkWqaVCjS4glAXKmf68k/eCazcPNZaQRmL/YUmgmyZ8AF02fDmM/RQMz/2hUtUE6UYs/T5vYUdDwYb09nOmVMgclY6jbmQ4b0OgG18p6RnNYtJ4wysC6+wEoy5xVljKWRE03UxD3pJbVdk5KPcJ/mnX44tUwU/oE/Ezz7LaMjVXnXns8zKu3LOAIeolcCFVJUbUMQhOuvwrXp+Sag1VV3OG4Uy6P3/0wIajEumzHO4GvpAEJ1F1Ny4b692wP/TdUX/WWAIr
Add the ssh key to the GitHub "https://github.com/ruzickap/k8s-flux-repository (opens new window)" -> "Settings" -> "Deploy keys" -> "Add new" -> "Allow write access"