iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0

Taints & Tolerations 簡介

簡單來說,先想像 Nodes 是人,Pods 是蚊子。Pods 被部署到 Nodes 上就是蚊子在叮人類。
從這個場景來看,Taints 就是防蚊液,目的是阻止蚊子叮咬人類,也就是防止 Pods 被部署到有 Taints 的 Nodes 上。Tolerations 就是蚊子對於防蚊液的抗體,只要有符合該防蚊液的抗體,就可以叮這個人類,也就是可以 Deploy 到這些 Nodes 上。

為什麼突然開始討論這個 Kubernetes 的概念呢?
昨天有提到為了將 Nginx-Ingress Pod 部署到 Control-Plane Node 上,我將該 Node 的 Taints 給刪除,並且為 Nginx-Ingress 的 Deployment 設置 NodeSelector。
透過這些手段來將 Nginx-Ingress Pod 準確的部署到 Control-Plane Node 上,但是是否可以將這些流程整合到我們的部署流程中呢?

values.yaml

由於過去幾天都是透過指令來安裝 GitLab,就算是帶入 Values,也是使用官方提供的範例。我們為了要能夠一鍵達成目的,就必須要來調整我們的 Values 值。

參考 GitLab 官方的 values.yaml 檔,可以發現 nginx-ingress 區塊其實完全沒有 nodeSelectortolerations 相關的設定。

到這一步我開始懷疑人生,難道要寫腳本來自動調整?應該不用這樣吧?

templates

Helm Chart 其實就是先設立一堆 templates 的 Yaml 檔,再根據不同的 Values 值來自動化產生並部署所需的 Kubernetes Components。

所以如果想要調整 nodeSelectortolerations 的話,或許 templates 的 Yaml 中會存在線索。
幸運的是從官方的 templates 中,找到了關鍵的線索。

    {{- if .Values.controller.nodeSelector }}
      nodeSelector: {{ toYaml .Values.controller.nodeSelector | nindent 8 }}
    {{- else if include "gitlab.nodeSelector" . }}
      {{- include "gitlab.nodeSelector" . | nindent 6 }}
    {{- end }}
    {{- if .Values.controller.tolerations }}
      tolerations: {{ toYaml .Values.controller.tolerations | nindent 8 }}
    {{- end }}

從這段我們可以得知,只要在 controller 的下一層定義 nodeSelector 和 tolerations 就可以在 Deployment 建立時,自動地帶入想要的設定。

value-base.yaml

我決定在官方的 examples 中修改 value-base.yaml,在 nginx-ingress 區塊新增目標的設定,最後也成功將 Nginx-Ingress Pod 自動部署到 Control-Plane Node 上。

nginx-ingress:
  controller:
    replicaCount: 1
    minAavailable: 1
    service:
      type: NodePort
      nodePorts:
        # gitlab-shell port value below must match the KinD config file:
        #   nodes[0].extraPortMappings[1].containerPort
        gitlab-shell: 32022
    nodeSelector:
      "kubernetes.io/hostname": "local-dev-control-plane"
    tolerations:
      - key: "node-role.kubernetes.io/control-plane"
        effect: "NoSchedule"

上一篇
Day 09:Debug
下一篇
Day 11:Users
系列文
在Local建立完整的開發環境筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言