Пост

Переводим Cilium под управление FluxCD

Погнали!

Первым делом добавляем в каталог cluster файл 04-cilium.yaml следующего содержания:

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: cilium
  namespace: flux-system
spec:
  interval: 1m0s
  wait: true
  path: ./components/cilium
  prune: true
  sourceRef:
    kind: GitRepository
    name: flux-system

Здесь все стандартно, думаю после предыдущего поста пояснений не требует.

Добавляем его в kustomization.yaml, после этого файл выглядит следующим образом:

1
2
3
4
5
6
7
8
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - 00-prometheus-operator-crds.yaml
  - 01-victoria-metrics-crds.yaml
  - 02-flux-operator.yaml
  - 03-flux-instance.yaml
  - 04-cilium.yaml

Создаем каталог cilium внутри components и добавляем туда файл hr-cilium.yaml следующего содержания:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
  name: cilium
  namespace: kube-system
spec:
  interval: 5m0s
  url: https://helm.cilium.io
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: cilium
  namespace: kube-system
spec:
  chart:
    spec:
      chart: cilium
      sourceRef:
        kind: HelmRepository
        name: cilium
      version: '1.19.0'
  interval: 5m0s
  install:
    timeout: 15m0s
  upgrade:
    timeout: 15m0s
  values:
    resources:
      limits:
        memory: 4Gi
      requests:
        cpu: 100m
        memory: 512Mi
    ipam:
      mode: kubernetes
    kubeProxyReplacement: false
    securityContext:
      capabilities:
        ciliumAgent:
          - CHOWN
          - KILL
          - NET_ADMIN
          - NET_RAW
          - IPC_LOCK
          - SYS_ADMIN
          - SYS_RESOURCE
          - DAC_OVERRIDE
          - FOWNER
          - SETGID
          - SETUID
        cleanCiliumState:
          - NET_ADMIN
          - SYS_ADMIN
          - SYS_RESOURCE
    cgroup:
      autoMount:
        enabled: false
      hostRoot: /sys/fs/cgroup
    prometheus:
      enabled: true
      serviceMonitor:
        enabled: true
    operator:
      resources:
        limits:
          memory: 1Gi
        requests:
          cpu: 100m
          memory: 128Mi
      prometheus:
        enabled: true
        serviceMonitor:
          enabled: true
    envoy:
      prometheus:
        enabled: true
        serviceMonitor:
          enabled: true
      resources:
        limits:
          memory: 4Gi
        requests:
          cpu: 100m
          memory: 512Mi

В процессе настройки я руководствовался документацией по установке cilium в кластер, который работает на Talos Linux.

На что стоит обратить внимание:

Здесь я увеличил timeout на установку и обновление приложения через helm. В маленьком кластере это не очень нужно, но в больших кластерах обновление на всех нодах может занять длительное время.

1
2
3
4
  install:
    timeout: 15m0s
  upgrade:
    timeout: 15m0s

В остальном все настройки были перенесены из документации, ссылку на которую я приводил выше, добавлены requests и limits для всех компонентов cilium и включены prometheus service monitor для них.

Делаем коммит и пуш в наш инфраструктурный репозиторий.

Проверяем состояние кластера через flux get all -A. После успешного обновления cilium картина должна быть примерно такая:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
NAMESPACE       NAME                            REVISION                SUSPENDED       READY   MESSAGE                                             
flux-system     ocirepository/flux-operator     0.35.0@sha256:f4491d1f  False           True    stored artifact for digest '0.35.0@sha256:f4491d1f'

NAMESPACE       NAME                            REVISION                        SUSPENDED       READY   MESSAGE                                                      
flux-system     gitrepository/flux-system       refs/heads/main@sha1:b8b38b22   False           True    stored artifact for revision 'refs/heads/main@sha1:b8b38b22'

NAMESPACE       NAME                                    REVISION        SUSPENDED       READY   MESSAGE                                     
flux-system     helmrepository/prometheus-community     sha256:b9d66f1c False           True    stored artifact: revision 'sha256:b9d66f1c'
flux-system     helmrepository/vm                       sha256:e8789521 False           True    stored artifact: revision 'sha256:e8789521'
kube-system     helmrepository/cilium                   sha256:e63dda21 False           True    stored artifact: revision 'sha256:e63dda21'

NAMESPACE       NAME                                            REVISION        SUSPENDED       READY   MESSAGE                                                            
flux-system     helmchart/flux-system-prometheus-operator-crds  25.0.0          False           True    pulled 'prometheus-operator-crds' chart with version '25.0.0'     
flux-system     helmchart/flux-system-victoria-metrics-crds     0.6.0           False           True    pulled 'victoria-metrics-operator-crds' chart with version '0.6.0'
kube-system     helmchart/kube-system-cilium                    1.19.0          False           True    pulled 'cilium' chart with version '1.19.0'                       

NAMESPACE       NAME                                    REVISION                SUSPENDED       READY   MESSAGE                                                                                                                 
flux-system     helmrelease/flux-operator               0.35.0+f4491d1fd68c     False           True    Helm upgrade succeeded for release flux-system/flux-operator.v2 with chart flux-operator@0.35.0+f4491d1fd68c           
flux-system     helmrelease/prometheus-operator-crds    25.0.0                  False           True    Helm install succeeded for release flux-system/prometheus-operator-crds.v1 with chart prometheus-operator-crds@25.0.0  
flux-system     helmrelease/victoria-metrics-crds       0.6.0                   False           True    Helm install succeeded for release flux-system/victoria-metrics-crds.v1 with chart victoria-metrics-operator-crds@0.6.0
kube-system     helmrelease/cilium                      1.19.0                  False           True    Helm upgrade succeeded for release kube-system/cilium.v3 with chart cilium@1.19.0                                      

NAMESPACE       NAME                                    REVISION                        SUSPENDED       READY   MESSAGE                                         
flux-system     kustomization/cilium                    refs/heads/main@sha1:b8b38b22   False           True    Applied revision: refs/heads/main@sha1:b8b38b22
flux-system     kustomization/flux-instance             refs/heads/main@sha1:b8b38b22   False           True    Applied revision: refs/heads/main@sha1:b8b38b22
flux-system     kustomization/flux-operator             refs/heads/main@sha1:b8b38b22   False           True    Applied revision: refs/heads/main@sha1:b8b38b22
flux-system     kustomization/flux-system               refs/heads/main@sha1:b8b38b22   False           True    Applied revision: refs/heads/main@sha1:b8b38b22
flux-system     kustomization/prometheus-operator-crds  refs/heads/main@sha1:b8b38b22   False           True    Applied revision: refs/heads/main@sha1:b8b38b22
flux-system     kustomization/victoria-metrics-crds     refs/heads/main@sha1:b8b38b22   False           True    Applied revision: refs/heads/main@sha1:b8b38b22

Если по каким-то причинам cilium обновлялся дольше, чем 15 минут, то FluxCD покажет, что обновление не удалось. При этом все поды могут быть успешно запущены и находиться в статусе Ready (Проверяем командой kubectl get po -n kube-system | grep cilium):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cilium-2b2g5                           1/1     Running   0              99m
cilium-6mlcs                           1/1     Running   0              77m
cilium-96tph                           1/1     Running   0              76m
cilium-envoy-2df5r                     1/1     Running   0              90m
cilium-envoy-5lrcp                     1/1     Running   0              90m
cilium-envoy-n4wnw                     1/1     Running   0              77m
cilium-envoy-pqlpw                     1/1     Running   0              77m
cilium-envoy-qmwtw                     1/1     Running   0              100m
cilium-envoy-xmhmz                     1/1     Running   0              90m
cilium-operator-5b55dbbb66-6qgsp       1/1     Running   0              77m
cilium-operator-5b55dbbb66-mrsl9       1/1     Running   0              100m
cilium-skxkw                           1/1     Running   0              76m
cilium-tksgq                           1/1     Running   0              77m
cilium-tnjp2                           1/1     Running   0              99m

Рассказать FluxCD, что все ок можно следующими командами:

  • Перезаписываем аннотацию helmrelease fluxcd.io/reconcileAt текущей датой

kubectl -n kube-system annotate helmrelease cilium fluxcd.io/reconcileAt="$(date +%s)" --overwrite

  • Производим принудительный reconcile

flux reconcile helmrelease cilium -n kube-system --force

При успехе выполнения данной команды - видим следующую картину:

1
2
3
4
► annotating HelmRelease cilium in kube-system namespace
✔ HelmRelease annotated
◎ waiting for HelmRelease reconciliation
✔ applied revision 1.19.0

Теперь FluxCD тоже видит, что все прошло успешно.

Видео, где наглядно показан материал данного поста:

YouTube

ВКВидео

Комментировать можно тут - пост в telegram канале

Авторский пост защищен лицензией CC BY 4.0 .

© Pavel Ivanov. Некоторые права защищены.