k8s系列(3)-StatefulSet的MongoDB实战

2022-10-21 10:01:52 浏览数 (1)

完整系列

  1. k8s系列(1)-腾讯云CVM手动部署K8S_Dashboard安装1
  2. k8s系列(1)-腾讯云CVM手动部署K8S_Dashboard安装2
  3. k8s系列(2)-Service
  4. k8s系列(3)-StatefulSet的MongoDB实战
  5. k8s系列(4)-MongoDB数据持久化
  6. k8s系列(5)-Configmap和Secret
  7. k8s系列(6)-Helm
  8. k8s系列(7)-命名空间
  9. k8s系列(8)-Ingress
  10. k8s系列(9)-容忍、污点、亲和

docker的镜像源,docker info

mongodb的yaml文件如下

代码语言:txt复制
 Registry Mirrors:
  https://dockerhub.woa.com/

一. yaml文件编写

代码语言:txt复制
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongodb
spec:
  replicas: 3
  serviceName: mongodb
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
        - name: mongo
          image: mongo:4.4
          # IfNotPresent 仅本地没有镜像时才远程拉,Always 永远都是从远程拉,Never 永远只用本地镜像,本地没有则报错
          imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb
spec:
  selector:
    app: mongodb
  type: ClusterIP
  # HeadLess
  clusterIP: None
  ports:
    - port: 27017
      targetPort: 27017

kubectl apply -f mongo.yaml来部署

二. 临时撰写数据

访问时,如果直接使用 Service 名字连接,会随机转发请求

要连接指定 Pod,可以这样 pod-name.service-name

运行一个临时 Pod 连接数据测试下

kubectl run mongodb-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mongodb:4.4.10-debian-10-r20 --command -- bash

代码语言:txt复制
kubectl get endpoints mongodb -o yaml
kubectl run mongodb-client --rm --tty -i --restart='Never' --image [docker.io/bitnami/mongodb:4.4.10-debian-10-r20](http://docker.io/bitnami/mongodb:4.4.10-debian-10-r20) --command — bash
mongo --host mongodb-0.mongodb
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> use test
switched to db test
> db.users.save({'_id':'easydoc','name':'易文档'})
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "easydoc" })
> db.users.find()
{ "_id" : "easydoc", "name" : "易文档” }
> exit
I have no name!@mongodb-client:/$ mongo --host mongodb-1.mongodb
> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB
> db.users.find()
> use test
switched to db test
> db.users.save({'_id':'machine','name':'mondb-1机器'})
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "machine" })
> db.users.find()
{ "_id" : "machine", "name" : "mondb-1机器" }
> exit
I have no name!@mongodb-client:/$ mongo --host mongodb-2.mongodb
> use test
switched to db test
> db.users.save({'_id':'tools','name':'工具箱'})
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "tools" })
> db.users.find()
{ "_id" : "tools", "name" : "工具箱" }
> exit
bye

三. 转发端口访问

代码语言:txt复制
kubectl port-forward service/mongo 28015:27017

以上所有命令都有效。输出类似于:
Forwarding from 127.0.0.1:28015 -> 27017
Forwarding from [::1]:28015 -> 27017

说明:

kubectl port-forward 不会返回。你需要打开另一个终端来继续这个练习

参考文章

  1. 使用端口转发来访问集群中的应用

0 人点赞