前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s系列(3)-StatefulSet的MongoDB实战

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

原创
作者头像
爽朗地狮子
修改2022-10-21 10:01:52
6390
修改2022-10-21 10:01:52
举报
文章被收录于专栏:云原生系列

完整系列

  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. 使用端口转发来访问集群中的应用

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 完整系列
  • 一. yaml文件编写
  • 二. 临时撰写数据
  • 三. 转发端口访问
  • 参考文章
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档