feat(calico_operator): deploy the operator to configure calico cni
!17 fixes #3
This commit is contained in:
@ -9,6 +9,21 @@ ContainerDioVersion: 1.6.20-1
|
|||||||
KubernetesVersion: '1.26.2' # must match the repository release version
|
KubernetesVersion: '1.26.2' # must match the repository release version
|
||||||
kubernetes_version_olm: '0.26.0'
|
kubernetes_version_olm: '0.26.0'
|
||||||
|
|
||||||
|
|
||||||
|
# Depreciated:
|
||||||
|
# Calico is being migrated to use the calico operator.
|
||||||
|
# in a near future release, this method of deploying calico
|
||||||
|
# will be removed. use tag `operator_migrate_calico` to migrate
|
||||||
|
calico_image_tag: v3.25.0 # Depreciated
|
||||||
|
# EoF Depreciated
|
||||||
|
# SoF New Variables
|
||||||
|
nfc_kubernetes_calico_version: v3.27.0
|
||||||
|
nfc_kubernetes_tigera_operator_registry: quay.io
|
||||||
|
nfc_kubernetes_tigera_operator_image: tigera/operator
|
||||||
|
nfc_kubernetes_tigera_operator_tag: v1.32.3 # Calico v3.27.0
|
||||||
|
# EoF New Variables, EEoF Depreciated
|
||||||
|
|
||||||
|
|
||||||
KubernetesVersion_k8s_prefix: '-00'
|
KubernetesVersion_k8s_prefix: '-00'
|
||||||
KubernetesVersion_k3s_prefix: '+k3s1'
|
KubernetesVersion_k3s_prefix: '+k3s1'
|
||||||
|
|
||||||
|
|||||||
@ -4,16 +4,31 @@
|
|||||||
- name: K3s Install
|
- name: K3s Install
|
||||||
ansible.builtin.include_tasks:
|
ansible.builtin.include_tasks:
|
||||||
file: k3s/install.yaml
|
file: k3s/install.yaml
|
||||||
|
apply:
|
||||||
|
tags:
|
||||||
|
- always
|
||||||
when: >
|
when: >
|
||||||
install_kubernetes | default(true) | bool
|
install_kubernetes | default(true) | bool
|
||||||
and
|
and
|
||||||
not kubernetes_installed | default(false) | bool
|
not kubernetes_installed | default(false) | bool
|
||||||
|
tags:
|
||||||
|
- never
|
||||||
|
- install
|
||||||
|
- operator_calico
|
||||||
|
- operator_migrate_calico
|
||||||
|
|
||||||
|
|
||||||
- name: K3s Configure
|
- name: K3s Configure
|
||||||
ansible.builtin.include_tasks:
|
ansible.builtin.include_tasks:
|
||||||
file: k3s/configure.yaml
|
file: k3s/configure.yaml
|
||||||
|
apply:
|
||||||
|
tags:
|
||||||
|
- always
|
||||||
when: >
|
when: >
|
||||||
install_kubernetes | default(true) | bool
|
install_kubernetes | default(true) | bool
|
||||||
and
|
and
|
||||||
kubernetes_installed | default(false) | bool
|
kubernetes_installed | default(false) | bool
|
||||||
|
tags:
|
||||||
|
- never
|
||||||
|
- install
|
||||||
|
- operator_migrate_calico
|
||||||
|
|||||||
@ -243,7 +243,14 @@
|
|||||||
notify: kubernetes_restart
|
notify: kubernetes_restart
|
||||||
- src: "calico.yaml.j2"
|
- src: "calico.yaml.j2"
|
||||||
dest: /var/lib/rancher/k3s/server/manifests/calico.yaml
|
dest: /var/lib/rancher/k3s/server/manifests/calico.yaml
|
||||||
when: "{{ kubernetes_config.cluster.prime.name == inventory_hostname }}"
|
when: >
|
||||||
|
{{ kubernetes_config.cluster.prime.name == inventory_hostname
|
||||||
|
and
|
||||||
|
(
|
||||||
|
'operator_migrate_calico' not in ansible_run_tags
|
||||||
|
and
|
||||||
|
'operator_calico' not in ansible_run_tags
|
||||||
|
) }}
|
||||||
- src: k3s-registries.yaml.j2
|
- src: k3s-registries.yaml.j2
|
||||||
dest: /etc/rancher/k3s/registries.yaml
|
dest: /etc/rancher/k3s/registries.yaml
|
||||||
notify: kubernetes_restart
|
notify: kubernetes_restart
|
||||||
@ -316,6 +323,23 @@
|
|||||||
and
|
and
|
||||||
kubernetes_olm_install | default(false) | bool
|
kubernetes_olm_install | default(false) | bool
|
||||||
|
|
||||||
|
|
||||||
|
- name: Install Calico Operator
|
||||||
|
ansible.builtin.include_tasks:
|
||||||
|
file: migrate_to_operator.yaml
|
||||||
|
apply:
|
||||||
|
tags:
|
||||||
|
- always
|
||||||
|
when: >-
|
||||||
|
(
|
||||||
|
'operator_migrate_calico' in ansible_run_tags
|
||||||
|
or
|
||||||
|
'operator_calico' in ansible_run_tags
|
||||||
|
)
|
||||||
|
and
|
||||||
|
kubernetes_config.cluster.prime.name == inventory_hostname
|
||||||
|
|
||||||
|
|
||||||
- name: Enable Cluster Encryption
|
- name: Enable Cluster Encryption
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
cmd: kubectl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabled":true,"wireguardEnabledV6":true}}'
|
cmd: kubectl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabled":true,"wireguardEnabledV6":true}}'
|
||||||
@ -324,6 +348,12 @@
|
|||||||
kubernetes_config.cluster.prime.name == inventory_hostname
|
kubernetes_config.cluster.prime.name == inventory_hostname
|
||||||
and
|
and
|
||||||
kubernetes_config.cluster.networking.encrypt | default(false) | bool
|
kubernetes_config.cluster.networking.encrypt | default(false) | bool
|
||||||
|
and
|
||||||
|
(
|
||||||
|
'operator_migrate_calico' not in ansible_run_tags
|
||||||
|
or
|
||||||
|
'operator_calico' not in ansible_run_tags
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
- name: Fetch Join Token
|
- name: Fetch Join Token
|
||||||
|
|||||||
215
tasks/k3s/migrate_to_operator.yaml
Normal file
215
tasks/k3s/migrate_to_operator.yaml
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
# Reference https://docs.tigera.io/calico/3.25/operations/operator-migration
|
||||||
|
|
||||||
|
# Script creation of imageset: https://docs.tigera.io/calico/latest/operations/image-options/imageset#create-an-imageset
|
||||||
|
# above may pull sha for arch of machine who ran the script
|
||||||
|
|
||||||
|
- name: Try / Catch
|
||||||
|
vars:
|
||||||
|
operator_manifests:
|
||||||
|
- Deployment-manifest-Calico_Operator.yaml.j2
|
||||||
|
- Installation-manifest-Calico_Cluster.yaml.j2
|
||||||
|
- FeilixConfiguration-manifest-Calico_Cluster.yaml
|
||||||
|
- IPPool-manifest-Calico_Cluster.yaml.j2
|
||||||
|
- APIServer-manifest-Calico_Cluster.yaml
|
||||||
|
# - calico.yaml.j2
|
||||||
|
block:
|
||||||
|
|
||||||
|
|
||||||
|
- name: Check for calico deployment manifest
|
||||||
|
ansible.builtin.stat:
|
||||||
|
name: /var/lib/rancher/k3s/server/manifests/calico.yaml
|
||||||
|
become: true
|
||||||
|
register: file_calico_yaml_metadata
|
||||||
|
|
||||||
|
|
||||||
|
- name: Move Calico Manifest from addons directory
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: mv /var/lib/rancher/k3s/server/manifests/calico.yaml /tmp/
|
||||||
|
become: true
|
||||||
|
changed_when: false
|
||||||
|
when: file_calico_yaml_metadata.stat.exists
|
||||||
|
|
||||||
|
|
||||||
|
- name: Remove addon from Kubernetes
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: kubectl delete addon -n kube-system calico
|
||||||
|
become: true
|
||||||
|
changed_when: false
|
||||||
|
when: file_calico_yaml_metadata.stat.exists
|
||||||
|
|
||||||
|
|
||||||
|
- name: Uninstall Calico
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: kubectl delete -f /tmp/calico.yaml
|
||||||
|
become: true
|
||||||
|
changed_when: false
|
||||||
|
when: file_calico_yaml_metadata.stat.exists
|
||||||
|
|
||||||
|
|
||||||
|
- name: Copy Manifest for addition
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: "{{ item }}"
|
||||||
|
dest: "/tmp/{{ item | lower | replace('.j2', '') }}"
|
||||||
|
mode: '744'
|
||||||
|
become: true
|
||||||
|
loop: "{{ operator_manifests }}"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Try / Catch
|
||||||
|
block:
|
||||||
|
|
||||||
|
|
||||||
|
- name: Apply Operator Manifests
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: "kubectl create -f /tmp/{{ item | lower | replace('.j2', '') }}"
|
||||||
|
become: true
|
||||||
|
changed_when: false
|
||||||
|
diff: true
|
||||||
|
failed_when: >
|
||||||
|
{{ 'Error from server' in operator_manifest_stdout.stderr }}
|
||||||
|
loop: "{{ operator_manifests }}"
|
||||||
|
register: operator_manifest_stdout
|
||||||
|
|
||||||
|
|
||||||
|
rescue:
|
||||||
|
|
||||||
|
|
||||||
|
- name: TRACE - Operator manifest apply
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "{{ operator_manifest_stdout }}"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Apply Operator Manifests - "Rescue"
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: "kubectl replace -f /tmp/{{ item | lower | replace('.j2', '') }}"
|
||||||
|
become: true
|
||||||
|
changed_when: false
|
||||||
|
diff: true
|
||||||
|
failed_when: >
|
||||||
|
{{
|
||||||
|
'Error from server' in operator_manifest_stdout.stderr
|
||||||
|
and
|
||||||
|
'ensure CRDs are installed first' in operator_manifest_stdout.stderr
|
||||||
|
}}
|
||||||
|
loop: "{{ operator_manifests }}"
|
||||||
|
register: operator_manifest_stdout
|
||||||
|
|
||||||
|
|
||||||
|
- name: TRACE - Operator manifest apply. Rescued
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "{{ operator_manifest_stdout }}"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Fetch Calico Kubectl Plugin
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: |-
|
||||||
|
https://github.com/projectcalico/calico/releases/download/{{ nfc_kubernetes_calico_version }}/calicoctl-linux-
|
||||||
|
{%- if cpu_arch.key == 'aarch64' -%}
|
||||||
|
arm64
|
||||||
|
{%- else -%}
|
||||||
|
amd64
|
||||||
|
{%- endif %}
|
||||||
|
status_code:
|
||||||
|
- 200
|
||||||
|
- 304
|
||||||
|
dest: "/tmp/kubectl-calico.{{ cpu_arch.key }}"
|
||||||
|
mode: '777'
|
||||||
|
owner: root
|
||||||
|
group: 'root'
|
||||||
|
become: true
|
||||||
|
delegate_to: localhost
|
||||||
|
loop: "{{ nfc_kubernetes_install_architectures | dict2items }}"
|
||||||
|
loop_control:
|
||||||
|
loop_var: cpu_arch
|
||||||
|
vars:
|
||||||
|
ansible_connection: local
|
||||||
|
|
||||||
|
|
||||||
|
- name: Add calico Plugin
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: "/tmp/kubectl-calico.{{ ansible_architecture }}"
|
||||||
|
dest: /usr/local/bin/kubectl-calico
|
||||||
|
mode: '770'
|
||||||
|
owner: root
|
||||||
|
group: 'root'
|
||||||
|
become: true
|
||||||
|
when: inventory_hostname in groups['kubernetes_master']
|
||||||
|
|
||||||
|
|
||||||
|
- name: Setup Automagic Host Endpoints
|
||||||
|
ansible.builtin.shell:
|
||||||
|
cmd: |-
|
||||||
|
kubectl calico \
|
||||||
|
patch kubecontrollersconfiguration \
|
||||||
|
default --patch='{"spec": {"controllers": {"node": {"hostEndpoint": {"autoCreate": "Enabled"}}}}}'
|
||||||
|
executable: bash
|
||||||
|
become: true
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false # fixme
|
||||||
|
|
||||||
|
|
||||||
|
- name: Remove calico migration label
|
||||||
|
ansible.builtin.shell:
|
||||||
|
cmd: |-
|
||||||
|
kubectl label \
|
||||||
|
{{ inventory_hostname }} \
|
||||||
|
projectcalico.org/operator-node-migration-
|
||||||
|
executable: bash
|
||||||
|
become: true
|
||||||
|
delegate_to: "{{ kubernetes_config.cluster.prime.name }}"
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
loop: "{{ groups[kubernetes_config.cluster.group_name] }}"
|
||||||
|
|
||||||
|
# kubectl label node ip-10-229-92-202.eu-west-1.compute.internal projectcalico.org/operator-node-migration-
|
||||||
|
# migration started
|
||||||
|
|
||||||
|
rescue:
|
||||||
|
|
||||||
|
|
||||||
|
- name: Remove Operator Manifests
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: "kubectl delete -f /tmp/{{ item | lower | replace('.j2', '') }}"
|
||||||
|
become: true
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
loop: "{{ operator_manifests }}"
|
||||||
|
when: file_calico_yaml_metadata.stat.exists # Only rescue if it was a migration
|
||||||
|
|
||||||
|
|
||||||
|
- name: Move Calico Manifest from addons directory
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: mv /tmp/calico.yaml /var/lib/rancher/k3s/server/manifests/
|
||||||
|
become: true
|
||||||
|
changed_when: false
|
||||||
|
when: file_calico_yaml_metadata.stat.exists
|
||||||
|
|
||||||
|
|
||||||
|
- name: Re-install Calico
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: kubectl apply -f /var/lib/rancher/k3s/server/manifests/calico.yaml
|
||||||
|
become: true
|
||||||
|
changed_when: false
|
||||||
|
when: file_calico_yaml_metadata.stat.exists
|
||||||
|
|
||||||
|
|
||||||
|
always:
|
||||||
|
|
||||||
|
|
||||||
|
- name: Remove Operator Manifests files
|
||||||
|
ansible.builtin.file:
|
||||||
|
name: "/tmp/{{ item | lower | replace('.j2', '') }}"
|
||||||
|
state: absent
|
||||||
|
become: true
|
||||||
|
changed_when: false
|
||||||
|
loop: "{{ operator_manifests }}"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Clean-up Temp File
|
||||||
|
ansible.builtin.file:
|
||||||
|
name: /tmp/calico.yaml
|
||||||
|
state: absent
|
||||||
|
become: true
|
||||||
|
when: file_calico_yaml_metadata.stat.exists
|
||||||
@ -1,14 +1,38 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
- name: Firewall Rules
|
- name: Firewall Rules
|
||||||
ansible.builtin.include_role:
|
ansible.builtin.include_role:
|
||||||
name: nfc_firewall
|
name: nfc_firewall
|
||||||
vars:
|
vars:
|
||||||
nfc_firewall_enabled_kubernetes: "{{ nfc_kubernetes.enable_firewall | default(false) | bool }}"
|
nfc_firewall_enabled_kubernetes: "{{ nfc_kubernetes.enable_firewall | default(false) | bool }}"
|
||||||
|
tags:
|
||||||
|
- never
|
||||||
|
- install
|
||||||
|
|
||||||
|
|
||||||
|
# fix, reload firewall `iptables-reloader`
|
||||||
|
- name: Reload iptables
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: bash -c /usr/bin/iptables-reloader
|
||||||
|
changed_when: false
|
||||||
|
tags:
|
||||||
|
- never
|
||||||
|
- install
|
||||||
|
|
||||||
|
|
||||||
- name: K8s Cluster
|
- name: K8s Cluster
|
||||||
ansible.builtin.include_tasks: k8s.yaml
|
ansible.builtin.include_tasks: k8s.yaml
|
||||||
when: kubernetes_type == 'k8s'
|
when: kubernetes_type == 'k8s'
|
||||||
|
tags:
|
||||||
|
- never
|
||||||
|
- install
|
||||||
|
|
||||||
|
|
||||||
- name: K3s Cluster
|
- name: K3s Cluster
|
||||||
ansible.builtin.include_tasks: k3s.yaml
|
ansible.builtin.include_tasks: k3s.yaml
|
||||||
when: kubernetes_type == 'k3s'
|
when: kubernetes_type == 'k3s'
|
||||||
|
tags:
|
||||||
|
- never
|
||||||
|
- install
|
||||||
|
- operator_calico
|
||||||
|
- operator_migrate_calico
|
||||||
|
|||||||
6
templates/APIServer-manifest-Calico_Cluster.yaml
Normal file
6
templates/APIServer-manifest-Calico_Cluster.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
apiVersion: operator.tigera.io/v1
|
||||||
|
kind: APIServer
|
||||||
|
metadata:
|
||||||
|
name: default
|
||||||
|
spec: {}
|
||||||
25301
templates/Deployment-manifest-Calico_Operator.yaml.j2
Normal file
25301
templates/Deployment-manifest-Calico_Operator.yaml.j2
Normal file
File diff suppressed because it is too large
Load Diff
14
templates/FeilixConfiguration-manifest-Calico_Cluster.yaml
Normal file
14
templates/FeilixConfiguration-manifest-Calico_Cluster.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
apiVersion: crd.projectcalico.org/v1
|
||||||
|
kind: FelixConfiguration
|
||||||
|
metadata:
|
||||||
|
name: default
|
||||||
|
spec:
|
||||||
|
bpfLogLevel: ""
|
||||||
|
floatingIPs: Disabled
|
||||||
|
healthPort: 9099
|
||||||
|
logSeverityScreen: Info
|
||||||
|
reportingInterval: 0s
|
||||||
|
wireguardEnabled: true
|
||||||
|
wireguardEnabledV6: true
|
||||||
16
templates/IPPool-manifest-Calico_Cluster.yaml.j2
Normal file
16
templates/IPPool-manifest-Calico_Cluster.yaml.j2
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
apiVersion: crd.projectcalico.org/v1
|
||||||
|
kind: IPPool
|
||||||
|
metadata:
|
||||||
|
name: default-ipv4-ippool
|
||||||
|
spec:
|
||||||
|
allowedUses:
|
||||||
|
- Workload
|
||||||
|
- Tunnel
|
||||||
|
blockSize: 26
|
||||||
|
cidr: {{ kubernetes_config.cluster.networking.podSubnet }}
|
||||||
|
ipipMode: Never
|
||||||
|
natOutgoing: true
|
||||||
|
nodeSelector: all()
|
||||||
|
vxlanMode: Always
|
||||||
44
templates/Installation-manifest-Calico_Cluster.yaml.j2
Normal file
44
templates/Installation-manifest-Calico_Cluster.yaml.j2
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
apiVersion: operator.tigera.io/v1
|
||||||
|
kind: Installation
|
||||||
|
metadata:
|
||||||
|
name: default
|
||||||
|
spec:
|
||||||
|
calicoNetwork:
|
||||||
|
bgp: Disabled
|
||||||
|
containerIPForwarding: Enabled
|
||||||
|
hostPorts: Enabled
|
||||||
|
ipPools:
|
||||||
|
- blockSize: 26
|
||||||
|
cidr: {{ kubernetes_config.cluster.networking.podSubnet }}
|
||||||
|
disableBGPExport: false
|
||||||
|
encapsulation: VXLAN
|
||||||
|
natOutgoing: Enabled
|
||||||
|
nodeSelector: all()
|
||||||
|
linuxDataplane: Iptables
|
||||||
|
mtu: 0
|
||||||
|
multiInterfaceMode: None
|
||||||
|
nodeAddressAutodetectionV4:
|
||||||
|
kubernetes: NodeInternalIP
|
||||||
|
cni:
|
||||||
|
ipam:
|
||||||
|
type: Calico
|
||||||
|
type: Calico
|
||||||
|
componentResources:
|
||||||
|
- componentName: Node
|
||||||
|
resourceRequirements:
|
||||||
|
requests:
|
||||||
|
cpu: 250m
|
||||||
|
controlPlaneReplicas: 3
|
||||||
|
flexVolumePath: None
|
||||||
|
kubeletVolumePluginPath: None
|
||||||
|
nodeUpdateStrategy:
|
||||||
|
rollingUpdate:
|
||||||
|
maxSurge: 0
|
||||||
|
maxUnavailable: 1
|
||||||
|
type: RollingUpdate
|
||||||
|
nonPrivileged: Disabled
|
||||||
|
serviceCIDRs:
|
||||||
|
- {{ kubernetes_config.cluster.networking.ServiceSubnet }}
|
||||||
|
variant: Calico
|
||||||
@ -1,4 +1,11 @@
|
|||||||
---
|
---
|
||||||
|
# Depreciated:
|
||||||
|
# Calico is being migrated to use the calico operator.
|
||||||
|
# in a near future release, this method of deploying calico
|
||||||
|
# will be removed. use tag `operator_migrate_calico` to migrate
|
||||||
|
# and tag `operator_calico` to keep.
|
||||||
|
#
|
||||||
|
#
|
||||||
# URL: https://github.com/projectcalico/calico/blob/8f2548a71ddc4fbe2497a0c20a3b24fc7a165851/manifests/calico.yaml
|
# URL: https://github.com/projectcalico/calico/blob/8f2548a71ddc4fbe2497a0c20a3b24fc7a165851/manifests/calico.yaml
|
||||||
# Source: calico/templates/calico-kube-controllers.yaml
|
# Source: calico/templates/calico-kube-controllers.yaml
|
||||||
# This manifest creates a Pod Disruption Budget for Controller to allow K8s Cluster Autoscaler to evict
|
# This manifest creates a Pod Disruption Budget for Controller to allow K8s Cluster Autoscaler to evict
|
||||||
|
|||||||
Reference in New Issue
Block a user