業務容器需要在 A 集羣解析 B 集羣的容器,已知 B 集羣的 Pod 如果重啓後,IP 會變化,所以在 B 集羣創建 StatefulSet,並且創建 Headless Service,A 容器通過訪問 B 集羣這些服務的 ServiceName 來通信,因此 A 集羣容器需要在訪問 B 集羣 ServiceName 的時候能夠解析出 IP,所以這裏通過給 B 集羣的 kube-dns 創建負載均衡或者內網 IP,之後將內網 IP 寫入 /etc/resolv.conf
文件中,在 A 集羣創建 ConfigMap,最後將其掛載給業務容器。
假設這個 ConfigMap 如下。
apiVersion: v1
data:
resolv.conf: |
nameserver x.xx.xxx.xxx
kind: ConfigMap
metadata:
name: huanandns
namespace: test
Pod 的定義如下,主要注意 volumes
和 volumesmount
,subpath
是到文件的。
apiVersion: v1
kind: Pod
metadata:
name: testcm-755976b754-pxtpt
namespace: test
ownerReferences:
- apiVersion: extensions/v1beta1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: testcm-755976b754
spec:
containers:
- args:
- "36000"
command:
- sleep
image: nginx:latest
imagePullPolicy: Always
name: new-container-1
resources:
limits:
cpu: "1"
memory: 100Mi
requests:
cpu: "1"
memory: 100Mi
volumeMounts:
- mountPath: /etc/resolv.conf
name: cm
subPath: resolv.conf
volumes:
- configMap:
name: huanandns
name: cm
Reference
- https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-pod-configmap/