还是mongo假如使用了hostpath 地址就是IP
apiVersion: v1
kind: Service
metadata:
name: mongodb-headless
labels:
name: mongo
spec:
ports:
- port: 27017
targetPort: 27017
clusterIP: None
selector:
role: mongo
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongo
spec:
selector:
matchLabels:
role: mongo
environment: test
serviceName: "mongo"
replicas: 2
template:
metadata:
labels:
role: mongo
environment: test
spec:
nodeSelector:
storagenode: nginx
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 10
- key: "node.kubernetes.io/not-ready"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 10
terminationGracePeriodSeconds: 10
containers:
- name: mongo
image: mongo:4.4
command:
- mongod
- "--replSet"
- rs0
- "--bind_ip"
- 0.0.0.0
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-persistent-storage
mountPath: /data/db
- name: mongo-sidecar
image: cvallance/mongo-k8s-sidecar
env:
- name: MONGO_SIDECAR_POD_LABELS
value: "role=mongo,environment=test"
volumes:
- name: mongo-persistent-storage
hostPath:
path: /mongo/data
type: Directory
部署完后端RS都是IP形式显示代码无法入手
-
因为不是为 Pod 名称创建hostnameA 或 AAAA 记录,所以需要创建 Pod 的 A 或 AAAA 记录。一个没有hostname但有的 Podsubdomain只会为无头服务 ( default-subdomain.my-namespace.svc.cluster-domain.example) 创建 A 或 AAAA 记录,指向 Pod 的 IP 地址。此外,除非在服务上设置,否则 Pod 需要准备好才能有记录publishNotReadyAddresses=True
# kubectl get pods -o wide
mongo-0 2/2 Running 0 146m 10.42.0.215 k3s-node-1 <none> <none>
mongo-1 2/2 Running 0 4h28m 10.42.2.72 k3s-node-2 <none> <none>
mongo-2 2/2 Running 0 78m 10.42.1.6 k3s-node-3 <none> <none>
# nslookup mongodb-headless
Server: 10.43.0.10
Address 1: 10.43.0.10 kube-dns.kube-system.svc.cluster.local
Name: mongodb-headless
Address 1: 10.42.1.6 10-42-1-6.mongo-1.iottepa.svc.cluster.local
Address 2: 10.42.0.215 10-42-0-215.mongodb-headless.iottepa.svc.cluster.local
Address 3: 10.42.2.72 10-42-2-72.mongo-2.iottepa.svc.cluster.local
现在加入以下参数什么意思,我就不讲了,自己看下面官网连接更清楚
publishNotReadyAddresses: true
apiVersion: v1
kind: Service
metadata:
name: mongo-0
labels:
name: mongo
spec:
publishNotReadyAddresses: true
type: ClusterIP
ports:
- name: tcp-server
port: 27017
protocol: TCP
targetPort: 27017
selector:
role: mongo
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: mongo-1
labels:
name: mongo
spec:
publishNotReadyAddresses: true
type: ClusterIP
ports:
- name: tcp-server
port: 27017
protocol: TCP
targetPort: 27017
selector:
role: mongo
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: mongo-2
labels:
name: mongo
spec:
publishNotReadyAddresses: true
type: ClusterIP
ports:
- name: tcp-server
port: 27017
protocol: TCP
targetPort: 27017
selector:
role: mongo
type: ClusterIP
最后变成这样
# nslookup mongo-0
Server: 10.43.0.10
Address 1: 10.43.0.10 kube-dns.kube-system.svc.cluster.local
Name: mongo-0
Address 1: 10.43.162.12 mongo-0.iottepa.svc.cluster.local