--- - name: Main playbook for Kubernetes cluster hosts: kubernetes become: true roles: - { role: ansible-role-linux-kubernetes, tags: [setup-cluster] } - { role: geerlingguy.helm, tags: helm, when: "{{ inventory_hostname in groups['kubemaster'] }}" } tasks: - name: Add kubectl alias and completion only on master nodes ansible.builtin.lineinfile: path: "{{ item.path }}" regexp: "{{ item.regexp }}" state: "{{ item.state|default('present') }}" line: "{{ item.line|default(omit) }}" loop: "{{ kubernetes_alias_bashrc }}" when: - inventory_hostname in groups['kubemaster'] tags: - kubernetes # pip install kubernetes # install argocd - block: - name: Download manifest on master ansible.builtin.get_url: url: "{{ item.url }}" dest: "~/{{ item.url.split('/') | last }}" mode: '0664' run_once: true loop: "{{ kubernetes_app }}" - name: Create namespace kubernetes.core.k8s: name: "{{ item.namespace }}" api_version: v1 kind: Namespace state: present loop: "{{ kubernetes_app }}" - name: Apply manifest kubernetes.core.k8s: namespace: "{{ item.namespace }}" state: present src: "~/{{ item.url.split('/') | last }}" loop: "{{ kubernetes_app }}" when: - inventory_hostname in groups['kubemaster'] - kubernetes_init_app tags: - kubernetes # Install clabernetes (docker on worker and master ? No, docker ok on worker but doesn't work ) ----> https://containerlab.dev/install/ # - name: login helm registry # shell: "helm registry login {{ github_registry_containerlab }} -u {{ github_user }} -p {{ github_token }}" # when: "{{ inventory_hostname in groups['kubemaster'] }}" # tags: helm # helm upgrade --install --create-namespace --namespace clabernetes clabernetes oci://ghcr.io/srl-labs/clabernetes/clabernetes # clabverter : Converting the containerlab topology to clabernetes manifests (kubernetes style) and applying it # docker pull ghcr.io/srl-labs/clabernetes/clabverter # alias clabverter="mkdir -p converted && chown -R 65532:65532 converted && \ # docker run -v $(pwd):/clabernetes/work --rm \ # ghcr.io/srl-labs/clabernetes/clabverter" # Install loablancer with VIP (but not necessary) -> if no external access to the nodes is required, load balancer installation can be skipped altogether. # kubectl apply -f https://kube-vip.io/manifests/rbac.yaml # kubectl apply -f https://raw.githubusercontent.com/kube-vip/kube-vip-cloud-provider/main/manifest/kube-vip-cloud-controller.yaml # kubectl create configmap --namespace kube-system kubevip --from-literal range-global=172.18.1.10-172.18.1.250 # CLI #KVVERSION=$(curl -sL https://api.github.com/repos/kube-vip/kube-vip/releases | jq -r ".[0].name") #alias kube-vip="docker run --network host --rm ghcr.io/kube-vip/kube-vip:$KVVERSION" # install kube-vip load balancer daemonset in ARP mode: # I have set on public IP and listening on port kubernetes, 6443 #kube-vip manifest daemonset --services --inCluster --arp --interface eth0 | kubectl apply -f - #root@ovh-master:/tmp/srl02# mkdir -p converted && chown -R 65532:65532 converted && docker run -v $(pwd):/clabernetes/work --rm ghcr.io/srl-labs/clabernetes/clabverter --topologyFile srl02.clab.yml --stdout | kubectl apply -f - # mkdir -p converted && chown -R 65532:65532 converted && docker run -v $(pwd):/clabernetes/work --rm ghcr.io/srl-labs/clabernetes/clabverter --topologyFile srl02.clab.yml --stdout | kubectl apply -f - # docker run -v $(pwd):/clabernetes/work --rm ghcr.io/srl-labs/clabernetes/clabverter --topologyFile srl02.clab.yml --stdout | kubectl apply -f - # INFO | clabverter | starting clabversion! # INFO | clabverter | loading and validating provided containerlab topology file... # INFO | clabverter | handling containerlab associated file(s) if present... # INFO | clabverter | handling containerlab topology startup config(s) if present... # INFO | clabverter | rendering clabernetes startup config outputs... # INFO | clabverter | handling containerlab extra file(s) if present... # INFO | clabverter | rendering clabernetes extra file(s) outputs... # INFO | clabverter | clabversion complete! # configmap/srl02-srl1-startup-config created # configmap/srl02-srl2-startup-config created # containerlab.topology.clabernetes/srl02 created # kubectl exec -n clabernetes -it srl02-srl1-646dbff599-c65gw -- bash # kubectl get --namespace clabernetes Containerlab # kubectl delete --namespace clabernetes Containerlab # containerlab # echo "deb [trusted=yes] https://apt.fury.io/netdevops/ /" | \ # sudo tee -a /etc/apt/sources.list.d/netdevops.list # sudo apt update && sudo apt install containerlab