我們的系統在 VPC 原生網路中的 GKE 上運行。我們最近從 v1.9 升級到 v1.21,當我們轉移配置時,我注意到 out kube-dns 部署中的 spec.template.spec.affinity.nodeAffinity 被洗掉并忽略了。我嘗試使用“kubectl apply -f kube-dns-deployment.yaml”手動添加它
我得到“deployment.apps/kube-dns 已配置”,但幾秒鐘后,kube-dns 恢復為沒有此關聯的配置。
這是yaml中的相關代碼:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
addonmanager.kubernetes.io/mode: Reconcile
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
name: kube-dns
namespace: kube-system
spec:
progressDeadlineSeconds: 600
replicas: 2
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: kube-dns
strategy:
rollingUpdate:
maxSurge: 10%
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
annotations:
components.gke.io/component-name: kubedns
prometheus.io/port: "10054"
prometheus.io/scrape: "true"
scheduler.alpha.kubernetes.io/critical-pod: ""
seccomp.security.alpha.kubernetes.io/pod: runtime/default
creationTimestamp: null
labels:
k8s-app: kube-dns
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: cloud.google.com/gke-nodepool
operator: In
values:
- pool-1
weight: 20
- preference:
matchExpressions:
- key: cloud.google.com/gke-nodepool
operator: In
values:
- pool-3
- training-pool
weight: 1
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/gke-nodepool
operator: In
values:
- pool-1
- pool-3
- training-pool
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: k8s-app
operator: In
values:
- kube-dns
topologyKey: kubernetes.io/hostname
weight: 100
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: k8s-app
operator: In
values:
- kube-dns
topologyKey: cloud.google.com/hostname
containers:
....
dnsPolicy: Default
nodeSelector:
kubernetes.io/os: linux
這是我運行$ kubectl get deployment kube-dns -n kube-system -o yaml時得到的:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
....
labels:
addonmanager.kubernetes.io/mode: Reconcile
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
name: kube-dns
namespace: kube-system
resourceVersion: "16650828"
uid: ....
spec:
progressDeadlineSeconds: 600
replicas: 2
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: kube-dns
strategy:
rollingUpdate:
maxSurge: 10%
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
annotations:
components.gke.io/component-name: kubedns
prometheus.io/port: "10054"
prometheus.io/scrape: "true"
scheduler.alpha.kubernetes.io/critical-pod: ""
seccomp.security.alpha.kubernetes.io/pod: runtime/default
creationTimestamp: null
labels:
k8s-app: kube-dns
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: k8s-app
operator: In
values:
- kube-dns
topologyKey: kubernetes.io/hostname
weight: 100
containers:
...
dnsPolicy: Default
nodeSelector:
kubernetes.io/os: linux
priorityClassName: system-cluster-critical
restartPolicy: Always
schedulerName: default-scheduler
securityContext:
fsGroup: 65534
supplementalGroups:
- 65534
serviceAccount: kube-dns
serviceAccountName: kube-dns
terminationGracePeriodSeconds: 30
tolerations:
- key: CriticalAddonsOnly
operator: Exists
- key: components.gke.io/gke-managed-components
operator: Exists
volumes:
- configMap:
defaultMode: 420
name: kube-dns
optional: true
name: kube-dns-config
status:
...
如您所見,GKE 只是移除了 NodeAffinity 部分,以及 podAffinity 的一部分。
uj5u.com熱心網友回復:
kube-dns是 GKE 中的一種服務發現機制,也是集群使用的默認 DNS 提供程式。它由 Google 管理,這就是為什么沒有保留更改的原因,并且很可能這部分代碼已在新版本中被洗掉。
如果您需要應用自定義配置,可以按照設定自定義 kube-dns 部署指南進行操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410370.html
標籤:
