国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

k8s集群配置NodeLocal DNSCache

這篇具有很好參考價值的文章主要介紹了k8s集群配置NodeLocal DNSCache。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、簡介

當集群規(guī)模較大時,運行的服務非常多,服務之間的頻繁進行大量域名解析,CoreDNS將會承受更大的壓力,可能會導致如下影響:
延遲增加:有限的coredns服務在解析大量的域名時,會導致解析結果返回慢。
業(yè)務訪問異常:集群內(nèi)的服務基本都是通過域名進行訪問,coredns在解析壓力大時會存在慢或者丟包的情況,導致服務之間解析異常。

二、原理架構
NodeLocal DNSCache 通過在集群節(jié)點上作為 DaemonSet 運行 DNS 緩存代理來提高集群 DNS 性能。 在當今的體系結構中,運行在 ‘ClusterFirst’ DNS 模式下的 Pod 可以連接到 kube-dns serviceIP 進行 DNS 查詢。 通過 kube-proxy 添加的 iptables 規(guī)則將其轉(zhuǎn)換為 kube-dns/CoreDNS 端點。 而借助新架構,Pod 將可以訪問在同一節(jié)點上運行的 DNS 緩存代理,從而避免 iptables DNAT 規(guī)則和連接跟蹤。 本地緩存代理將查詢 kube-dns 服務以獲取集群主機名的緩存缺失(默認為 “cluster.local” 后綴)

啟用 NodeLocal DNSCache 之后,DNS 查詢所遵循的路徑如下,流程圖取自官網(wǎng):
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生

三、與coredns對比
1、 使用當前的 DNS 體系結構,如果沒有本地 kube-dns/CoreDNS 實例,則具有最高
DNS QPS 的 Pod 可能必須延伸到另一個節(jié)點。 在這種場景下,擁有本地緩存將有助于改善延遲。
2、 跳過 iptables DNAT 和連接跟蹤將有助于減少 conntrack 競爭并避免 UDP DNS 條目填滿 conntrack 表。
3、 從本地緩存代理到 kube-dns 服務的連接可以升級為 TCP。 TCP conntrack 條目將在連接關閉時被刪除,相反 UDP 條目必須超時 (默認 nf_conntrack_udp_timeout 是 30 秒)。
4、 將 DNS 查詢從 UDP 升級到 TCP 將減少由于被丟棄的 UDP 包和 DNS 超時而帶來的尾部等待時間; 這類延時通常長達 30 秒(3 次重試 + 10 秒超時)。 由于 nodelocal 緩存監(jiān)聽 UDP DNS 查詢,應用不需要變更。
5、 在節(jié)點級別對 DNS 請求的度量和可見性。
6、 可以重新啟用負緩存,從而減少對 kube-dns 服務的查詢數(shù)量。
四、NodeLocal DNSCache部署
1)修改kubelet.config文件,添加NodeLocal DNS的本地偵聽IP。本文使用的地址為:169.254.20.10。

kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
address: 0.0.0.0
port: 10250
cgroupDriver: systemd
clusterDNS: [“169.254.20.10”,“169.169.0.100”]
clusterDomain: cluster.local
failSwapOn: false
allow-privileged: true
tlsCipherSuites: [“TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256”,“TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256”,“TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305”,“TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384”,“TLS_ECDHE_R
SA_WITH_CHACHA20_POLY1305”,“TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384”,“TLS_RSA_WITH_AES_256_GCM_SHA384”,“TLS_RSA_WITH_AES_128_GCM_SHA256”]authentication:
anonymous:
enabled: false
x509:
clientCAFile: /etc/kubernetes/ssl/ca.crt

2)部署NodeLocal DNS的yaml如下:

apiVersion: v1
kind: ServiceAccount
metadata:
name: node-local-dns
namespace: kube-system
labels:
kubernetes.io/cluster-service: “true”
addonmanager.kubernetes.io/mode: Reconcile

apiVersion: v1
kind: Service
metadata:
name: kube-dns-upstream
namespace: kube-system
labels:
k8s-app: kube-dns
kubernetes.io/cluster-service: “true”
addonmanager.kubernetes.io/mode: Reconcile
kubernetes.io/name: “KubeDNSUpstream”
spec:
ports:

– name: dns
port: 53
protocol: UDP
targetPort: 53

  • name: dns-tcp
    port: 53
    protocol: TCP
    targetPort: 53
    selector:
    k8s-app: kube-dns

    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: node-local-dns
    namespace: kube-system
    labels:
    addonmanager.kubernetes.io/mode: Reconcile
    data:
    Corefile: |
    cluster.local:53 {
    errors
    cache {
    success 9984 30
    denial 9984 5
    }
    reload
    loop
    bind 169.254.20.10 #NodeLocal DNS的本地偵聽IP。
    forward . 169.169.0.100 { #轉(zhuǎn)發(fā)到coredns地址
    force_tcp #轉(zhuǎn)發(fā)協(xié)議
    }
    prometheus :9253
    health 169.254.20.10:8080
    }
    in-addr.arpa:53 {
    errors
    cache 30
    reload
    loop
    bind 169.254.20.10
    forward . 169.169.0.100 {
    force_tcp
    }
    prometheus :9253
    }
    ip6.arpa:53 {
    errors
    cache 30
    reload
    loop
    bind 169.254.20.10
    forward . PILLAR__CLUSTER__DNS {
    force_tcp
    }
    prometheus :9253
    }
    .:53 {
    errors
    cache 30
    reload
    loop
    bind 169.254.20.10
    forward . 169.169.0.100
    prometheus :9253
    }

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
    name: node-local-dns
    namespace: kube-system
    labels:
    k8s-app: node-local-dns
    kubernetes.io/cluster-service: “true”
    addonmanager.kubernetes.io/mode: Reconcile
    spec:
    updateStrategy:
    rollingUpdate:
    maxUnavailable: 10%
    selector:
    matchLabels:
    k8s-app: node-local-dns
    template:
    metadata:
    labels:
    k8s-app: node-local-dns
    annotations:
    prometheus.io/port: “9253”
    prometheus.io/scrape: “true”
    spec:
    priorityClassName: system-node-critical
    serviceAccountName: node-local-dns
    hostNetwork: true
    dnsPolicy: Default # Don’t use cluster DNS.
    tolerations:
    - key: “CriticalAddonsOnly”
    operator: “Exists”
    - effect: “NoExecute”
    operator: “Exists”
    - effect: “NoSchedule”
    operator: “Exists”
    containers:
    - name: node-cache
    image: 127.0.0.1:1120/panji_microservice/k8s-dns-node-cache:1.22.9
    resources:
    limits: #根據(jù)自己環(huán)境設置合適的資源限制
    cpu: 50m
    memory: 50Mi
    requests:
    cpu: 25m
    memory: 5Mi
    args: [ “-localip”, “169.254.20.10”, “-conf”, “/etc/Corefile”, “-upstreamsvc”, “kube-dns-upstream” ]
    securityContext:
    capabilities:
    add:
    - NET_ADMIN
    ports:
    - containerPort: 53
    name: dns
    protocol: UDP
    - containerPort: 53
    name: dns-tcp
    protocol: TCP
    - containerPort: 9253
    name: metrics
    protocol: TCP
    livenessProbe:
    httpGet:
    host: 169.254.20.10
    path: /health
    port: 8080
    initialDelaySeconds: 60
    timeoutSeconds: 5
    volumeMounts:
    - mountPath: /run/xtables.lock
    name: xtables-lock
    readOnly: false
    - name: config-volume
    mountPath: /etc/coredns
    - name: kube-dns-config
    mountPath: /etc/kube-dns
    volumes:
    - name: xtables-lock
    hostPath:
    path: /run/xtables.lock
    type: FileOrCreate
    - name: kube-dns-config
    configMap:
    name: kube-dns
    optional: true
    - name: config-volume
    configMap:
    name: node-local-dns
    items:
    - key: Corefile
    path: Corefile.base

    apiVersion: v1
    kind: Service
    metadata:
    annotations:
    prometheus.io/port: “9253”
    prometheus.io/scrape: “true”
    labels:
    k8s-app: node-local-dns
    name: node-local-dns
    namespace: kube-system
    spec:
    clusterIP: None
    ports:
    - name: metrics
    port: 9253
    targetPort: 9253
    selector:
    k8s-app: node-local-dns

**注:**1、以上配置文件中 169.169.0.100 為k8s集群中得coredns的svc地址。
169.254.20.10為本地NodeLocal dns 監(jiān)聽服務地址。
2、NodeLocal dns會使用主機網(wǎng)絡監(jiān)聽8080端口到宿主機,防止和業(yè)務服務端口沖突。

3)NodeLocal DNS在kube-proxy不同模式下的配置

一、kube-proxy 運行在 IPTABLES 模式:
可以在kubelet的kubelet.config配置文件中添加NodeLocal dns的本地地址即可。

二、 kube-proxy 運行在 IPVS 模式:
node-local-dns Pod 會設置 PILLAR__UPSTREAM__SERVERS。
在此模式下,node-local-dns Pod 只會偵聽 的地址。 node-local-dns 接口不能綁定 kube-dns 的集群 IP 地址,因為 IPVS 負載均衡使用的接口已經(jīng)占用了該地址。
如果 kube-proxy 運行在 IPVS 模式,需要修改 kubelet 的 --cluster-dns 參數(shù)
NodeLocal DNSCache 正在偵聽的 地址。

五、部署結果
部署node-local-dns服務。
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生

服務訪問域名解析結果如下,可以看到已經(jīng)解析到本地dns:
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生

六、壓力測試
使用queryperf對NodeLocal dns 和DNS分別進行壓測。
測試結果如下圖,僅供參考:

qps 1000 2000 10000 50000 100000
localdns 0.0379s 0.0030s 0.0227s 0.0001s 0.0021s
coredns 0.0104s 0.0046s 0.0026s 0.0177s 0.0061s

以看到,在解析壓力較大時,Node localDNS的 解析性能優(yōu)于coreDNS。

使用Node localDNS壓測結果截圖如下:

1000qps壓測截圖:
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生

2000qps壓測截圖:
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生

10000qps壓測截圖:
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生
50000qps壓測截圖:
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生
100000qps壓測截圖:
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生
對coredns解析壓測結果截圖如下:

1000qps壓測截圖:
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生
2000qps壓測截圖如下:
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生
10000qps壓測截圖:
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生
50000qps壓測截圖:
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生
100000qps壓測截圖:
k8s集群配置NodeLocal DNSCache,kubernetes,容器,云原生文章來源地址http://www.zghlxwxcb.cn/news/detail-793999.html

到了這里,關于k8s集群配置NodeLocal DNSCache的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • [Kubernetes]9. K8s ingress講解借助ingress配置http,https訪問k8s集群應用

    [Kubernetes]9. K8s ingress講解借助ingress配置http,https訪問k8s集群應用

    前面講解了使用Helm部署mysql集群,這里來看看使用Ingress搭建負載均衡功能 功能類似 Nginx ,可以根據(jù)域名、路徑把請求轉(zhuǎn)發(fā)到不同的 Service , Ingress 為外部訪問集群提供了一個 統(tǒng)一 入口, 避免 了 對外暴露集群端口 ,可以配置 https,http訪問集群應用,接下來看看如何通過騰訊云來

    2024年01月22日
    瀏覽(35)
  • K8s攻擊案例:RBAC配置不當導致集群接管

    K8s攻擊案例:RBAC配置不當導致集群接管

    01、概述 Service Account本質(zhì)是服務賬號,是Pod連接K8s集群的憑證。在默認情況下,系統(tǒng)會為創(chuàng)建的Pod提供一個默認的Service Account,用戶也可以自定義Service Account,與Service Account關聯(lián)的憑證會自動掛載到Pod的文件系統(tǒng)中。 當攻擊者通過某個web應用獲取到一個Pod權限時,如果RBAC權

    2024年02月02日
    瀏覽(22)
  • k8s containerd集群配置安裝完整踩坑教程

    k8s containerd集群配置安裝完整踩坑教程

    完整踩坑和精簡內(nèi)容 containerd安裝參考 k8s安裝參考 兩臺機器 系統(tǒng) CentOS 7.9 1、關閉swap 2、網(wǎng)橋設置 3、ipvs設置 4、關閉防火墻 5、禁用selinux 6、添加源 在所有節(jié)點上執(zhí)行 1、安裝最新的kubectl kubelet kubeadm 2、安裝containerd 安裝 配置 重啟 3、安裝crictl 編寫配置文件 下載鏡像 mast

    2024年02月09日
    瀏覽(34)
  • k8s整合istio配置gateway入口、配置集群內(nèi)部服務調(diào)用管理

    curl -HHost:tomcat.shenshuxin.cn “http://node101:32318” 端口號是ingressgateway服務的nodeport 查看方式: kubectl get service -n istio-system | grep istio-ingressgateway 找到80端口對應的nodeport即可 注意部署的兩個deployment需要指定一下版本標簽 version: ?? 注意這里的hosts名稱(demo-tomcat-for-istio-name)要和上面

    2024年02月12日
    瀏覽(21)
  • 使用rancher rke2配置高可用k8s集群

    使用rancher rke2配置高可用k8s集群

    RKE2 結合了 RKE1.x 版本(以下簡稱 RKE1)和 K3s 的優(yōu)點和特性。 從 K3s 中,它繼承了可用性、易操作性和部署模式。 從 RKE1 來看,它繼承了與上游 Kubernetes 的緊密一致性。在一些地方,K3s 與上游的 Kubernetes 有分歧,以便為邊緣部署進行優(yōu)化,但 RKE1 和 RKE2 可以與上游保持密切一

    2023年04月26日
    瀏覽(16)
  • 微服務系列文章之 Springboot應用在k8s集群中配置的使用

    微服務系列文章之 Springboot應用在k8s集群中配置的使用

    Docker部署其實也可以再docker run或者dockerfile里面,將配置文件目錄映射到宿主機,然后通過宿主機配置文件修改參數(shù)。 很多時候Dockerfile文件中需要定義變量,減少對Dockerfile文件的修改,在編譯的時候從外部傳入?yún)?shù),這種情況可使用? ARG 參數(shù),然后通過 --build-arg 進行賦值。

    2024年02月16日
    瀏覽(22)
  • K8S 集群應用配置coredns實現(xiàn)訪問內(nèi)網(wǎng)域名 —— 筑夢之路

    問題: 在內(nèi)網(wǎng)環(huán)境中,服務器不能連接互聯(lián)網(wǎng),某些服務直接使用ip訪問又不方便,于是直接在hosts中配置域名解析,而K8S集群中的應用需要訪問這些服務,pod容器內(nèi)卻不能解析,此時該怎么解決呢? 解決方法: 第一種方法:內(nèi)網(wǎng)自建DNS服務,每臺主機DNS都指向該dnsf服務器

    2024年02月15日
    瀏覽(27)
  • 本地k8s集群搭建保姆級教程(3)-安裝k8s集群

    本地k8s集群搭建保姆級教程(3)-安裝k8s集群

    1.1 增加鏡像替換腳本 注意:請在master機器上執(zhí)行 添加腳本內(nèi)容: 1.2 查看k8s版本 1.3 執(zhí)行腳本 2.1 初始化master節(jié)點 在master機器上執(zhí)行如下命令: 說明: –apiserver-advertise-address= 你master節(jié)點的ip 看到如下內(nèi)容,說明master節(jié)點初始化成功 圖片中最后一行記得要保存起來,worker節(jié)

    2024年02月15日
    瀏覽(20)
  • k8s簡介、虛擬機快速搭建k8s集群、集群管理方式及K8S工作原理和組件介紹

    k8s簡介、虛擬機快速搭建k8s集群、集群管理方式及K8S工作原理和組件介紹

    1.1、部署方式的變遷 傳統(tǒng)部署時代: 在物理服務器上運行應用程序 無法為應用程序定義資源邊界 導致資源分配問題 例如,如果在物理服務器上運行多個應用程序,則可能會出現(xiàn)一個應用程序占用大部分資源的情況, 結果可能導致其他應用程序的性能下降。 一種解決方案是

    2024年02月12日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包