2021年12月15日 星期三

應用程式在 Kubernetes 上的傳統基礎設施

 本篇紀錄個人 2021 年的 K8S 建置的基礎內容。


基本服務建置


以下內容是一個單位服務的 k8s 基礎設施:

  • configmap 提供服務互相共享設定
  • deployment 描述應用程式的 pod 和 deployment
  • ingress  API 流量進入點
  • secrets 小秘密
  • service 建立 deployment 服務,可以被自動發現,讓流量流進 Pods,可以是 ClusterIP、LoadBalance、NodePort
  • others 其他相依服務: 像是 Redis..., xxx_agent
  • namespace 命名空間

基礎設施上的關聯性,依照 API 流入進行分層:

  • namespace (大家都需要在特定的 namespace)
    • ingress (網路流量入口)
      • service (流量是透過 service 找到對應的 pod 來分流)
        • deployment (應用程式)
          • secrets (秘密檔案)
          • configmap (一般設定檔案)
      • others

詳情檔案可以參考:

https://github.com/hpcslag/infrastructure_boilerplate/tree/main/classical_kubernetes


套用設定直接輸入:

kubectl apply -f .

就可以把整個目錄的資源套用上去


跨 namespace 存取資源的 FQDN 如何設定,以 Jaeger Agent Endpoint 為例


一般就是直接用 service name,k8s 可以自己做服務發現,但如果做成集中式 tracing, logging 日誌服務,則需要透過加一層 DNS Name 來做服務發現。


舉例像是都在同一個 namespace 要存取 service, yaml 上的 service name 叫做: jaeger-agent,則同一個 namespace 服務只要輸入 endpoint:     udp://jaeger-agent:xxxx 就可以被發現了。


但假設為跨 namespace 的服務, endpoint 就會像是: udp://jaeger-agent.<namespace>.svc.cluster.local:xxxx。



References:

Book - Kubernetes in action

沒有留言:

張貼留言

© Mac Taylor, 歡迎自由轉貼。
Background Email Pattern by Toby Elliott
Since 2014