微服务探索之路06篇k8s配置文件Yaml部署Redis使用Helm部署MongoDB和kafka
1 安装Redis
1.1创建配置文件redis.conf
切换到自己的目录下如本文是放在/home/ubuntu下
cd /home/ubuntu
vim redis.conf
bind 0.0.0.0
protected-mode yes
port 6379
requirepass qwe123456
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/tmp/redis.log"
databases 16
always-show-logo no
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data
1.2创建deployment配置文件
vim redis.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: redis-single-node
name: redis-single-node
spec:
progressDeadlineSeconds: 600 #部署进度截止时间
replicas: 1 #副本数
revisionHistoryLimit: 10 #修订历史记录限制数
selector:
matchLabels:
app: redis-single-node #选择器,用于选择匹配的Pod
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: redis-single-node
spec:
containers:
- command:
- sh
- -c
- redis-server "/mnt/redis.conf"
env:
- name: TZ
value: Asia/Shanghai
- name: LANG
value: C.UTF-8
image: redis:5.0.4-alpine #Redis镜像版本
imagePullPolicy: IfNotPresent
lifecycle: {}
livenessProbe:
failureThreshold: 2 #失败的最大次数2次
initialDelaySeconds: 10 #启动容器后10秒开始检测
periodSeconds: 10 #每过10s检测一次
successThreshold: 1 #只要成功了1次,就表示成功了。
tcpSocket:
port: 6379
timeoutSeconds: 2
name: redis-single-node
ports:
- containerPort: 6379
name: web
protocol: TCP
readinessProbe:
failureThreshold: 2
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 6379
timeoutSeconds: 2
resources: #资源限制
limits: #最多可使用的资源
cpu: 100m #CPU的计量单位叫毫核(m)。一个节点的CPU核心数量乘以1000,得到的就是节点总的CPU总数量。如,一个节点有两个核,那么该节点的CPU总量为2000m
memory: 339Mi
requests: #代表容器启动请求的资源限制,分配的资源必须要达到此要求
cpu: 10m
memory: 10Mi
securityContext: #上下文参数
privileged: false #特权,最高权限
runAsNonRoot: false #禁止以root用户启动容器 true为禁止
terminationMessagePath: /dev/termination-log #表示容器的异常终止消息的路径,默认在 /dev/termination-log 下。当容器退出时,可以通过容器的状态看到退出信息。
terminationMessagePolicy: File #默认情况容器退出时,退出信息会从文件中读取。 可以修改为 FallbackToLogsOnError 从日志中读取
volumeMounts:
- mountPath: /usr/share/zoneinfo/Asia/Shanghai
name: tz-config
- mountPath: /etc/localtime
name: tz-config
- mountPath: /etc/timezone
name: timezone
- mountPath: /mnt
name: redis-conf
readOnly: true
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30 #在规定的terminationGracePeriodSeconds优雅时间内完成Pod优雅终止动作。默认是30秒
tolerations: #零容忍设置
- effect: NoExecute #即使在节点上存在污点,也不会将Pod从该节点上删除
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 30
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 30
volumes:
- hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
type: ""
name: tz-config
- hostPath:
path: /etc/timezone
type: ""
name: timezone
- configMap:
defaultMode: 420
name: redis-conf
name: redis-conf
- 1.创建k8sConfig Maps配置文件
kubectl create cm redis-conf --from-file=redis.conf
- 2.部署redis Deployments
kubectl create -f redis.yaml
- 3.将资源公开一个新的服务service`kubectl expose deploy redis-single-node --port 6379
- 4.对外开放6379端口找到service编辑type为NodePort,设置nodePort: 6379
- 到此安装完成之后就可以使用可视化工具(如AnotherRedisDesktopManager)或者代码进行测试连接。
2 安装MongoDB
这里使用Helm安装所以需要先安装一下Helm,如果已经安装跳过2.1这个小步骤
2.1 安装Helm
- 下载安装包https://github.com/helm/helm/releases,打开地址后选择适合自己的版本一般选择最新版本。本文使用的是ubuntu服务器下载命令如下
wget https://get.helm.sh/helm-v3.12.1-linux-amd64.tar.gz
,如果遇到卡主那就是需要FQ - 下载完后解压
tar -zxvf helm-v3.12.1-linux-amd64.tar.gz
- 移动到安装目标
mv linux-amd64/helm /usr/local/bin/helm
- 初始化仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
,这边如果要添加找其他仓库地址可以去Artifact Hub搜索相对于的仓库地址。
2.2开始MongoDB安装
- 创建pv
vim mongodb-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /bitnami/mongodb/data
以上内容中/bitnami/mongodb/data是主机真实路径,小提示如果没有权限需要赋权限给uid为1001
- 创建pvc
vim mongodb-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongodb-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
volumeName: mongodb-pv
- 创建配置文件
vim mongodb-values.yaml
persistence:
enabled: true
existingClaim: "mongodb-pvc"
securityContext:
privileged: true
runAsUser: 1001
runAsGroup: 1001
fsGroup: 1001
auth:
rootPassword: "自定义密码"
创建完以上三个文件之后按顺序执行如下:
①kubectl apply -f mongodb-pv.yaml
②kubectl apply -f mongodb-pvc.yaml
③helm install my-mongodb bitnami/mongodb -f mongodb-values.yaml --set volumePermissions.enabled=true
提示--set volumePermissions.enabled=true第③必须加这个不然pod创建的时候没有权限创建文件夹及文件会报错mkdir: cannot create directory '/bitnami/mongodb/data': Permission denied
安装成功之后如果想让外网访问跟上面redis一样service编辑type为NodePort,设置nodePort: 27017,端口号自定义只要防火墙对外开放就行
卸载使用helm uninstall my-mongodb
- 用navicat测试连接能否成功
也可以用MongoDB Compass,;连接地址格式为:mongodb://root:密码@ip:端口
- 修改用户密码,如下图可以使用工具直接执行命令
先切换至admin库use admin
再执行修改 db.changeUserPassword("用户名","密码")
3 安装kafka
前置条件参考第2步安装MongoDB中的创建pv跟pvc命名为kafka-pv和kafka-pvc
3.1 Helm部署kafka
- 创建配置文件kafka-values.yaml内容如下
replicaCount: 1 # kafka 副本数
#global:
# storageClass: nfs-client # kafka 和 zookeeper 使用的存储
heapOpts: "-Xmx1024m -Xms1024m" # kafka 启动的 jvm 参数
persistence: # kafka 每个副本的存储空间
enabled: true
existingClaim: "kafka-pvc"
resources:
limits:
cpu: 1000m
memory: 2Gi
requests:
cpu: 100m
memory: 100Mi
zookeeper:
replicaCount: 1 # zookeeper 的副本数
persistence:
enabled: true
existingClaim: "kafka-pvc"
resources:
limits:
cpu: 2000m
memory: 2Gi
externalAccess:
enabled: true # 开启外部访问
autoDiscovery:
enabled: true
service:
type: NodePort # 开启 nodeport
ports:
external: 9094
nodePorts: # nodeport 对应的端口,多少个 kafka 副本对应多少个端口
- 30001
# - 30002
# - 30003
执行部署helm install my-kafka bitnami/kafka -f kafka-values.yaml --set volumePermissions.enabled=true --set rbac.create=true
3.1 安装简洁版的管理界面kafka-console-ui
- 创建kafka-console-ui-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka-console-ui
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: kafka-console-ui
template:
metadata:
labels:
app: kafka-console-ui
spec:
containers:
- name: kafka-console-ui
resources:
limits:
cpu: 1000m
memory: 1Gi
requests:
cpu: 10m
memory: 10Mi
image: wdkang/kafka-console-ui:latest
volumeMounts:
- mountPath: /etc/localtime
readOnly: true
name: time-data
volumes:
- name: time-data
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
- 创建kafka-console-ui-service.yaml
kind: Service
apiVersion: v1
metadata:
labels:
app: kafka-console-ui
name: kafka-console-ui
namespace: default
spec:
ports:
- port: 7766
targetPort: 7766
nodePort: 30088
selector:
app: kafka-console-ui
type: NodePort
- 执行部署命令
①kubectl apply -f kafka-console-ui-service.yaml
②kubectl apply -f kafka-console-ui-deploy.yaml
- 部署完之后访问地址http://1.xx.1xx.80:30088进入界面
- 进入运维添加集群
- 如果是用的云服务器会发现这时候连接上了但是监听Topic的时候跑到了内网IP,需要修改configmap的配置这里都是建立在之前的k8s上所以直接进入k8s后台找到并修改如下图
- 重启
kubectl rollout restart statefulset my-kafka -n default
微服务探索之路06篇k8s配置文件Yaml部署Redis使用Helm部署MongoDB和kafka的更多相关文章
- 微服务探索之路04篇k8s增加子节点,metrics资源监控,ingress-nginx域名配置及https配置
1 k8s增加子节点 1.1 子节点服务器安装docker,使用脚本自动安装 curl -fsSL https://get.docker.com | bash -s docker --mirror A ...
- 微服务探索之路03篇-docker私有仓库Harbor搭建+Kubernetes(k8s)部署私有仓库的镜像
❝ 目录: 微服务探索之路01篇.net6.0项目本地win10系统docker到服务器liunx系统docker的贯通 微服务探索之路02篇liunx ubuntu服务器部署k8s(kubernet ...
- 微服务探索之路02篇liunx ubuntu服务器部署k8s(kubernetes)-kubernetes/dashboard
本章介绍所需环境:ubuntu18.04,建立在上一篇微服务探索之路01篇已经安装了docker的基础上. 1 替换k8s镜像源为国内镜像 进入目录 cd /etc/apt/sources.list. ...
- 微服务探索之路01篇.net6.0项目本地win10系统docker到服务器liunx系统docker的贯通
本文介绍从创建 net6.0 项目运行在 windows 开发环境的 docker 然后正式部署至 liunx 服务器. 1 windows10 安装 docker 下载docker-desktop ...
- 【微框架】之一:从零开始,轻松搞定SpringCloud微服务系列--开山篇(spring boot 小demo)
Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...
- 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发
<ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...
- 微服务架构开发电商系统需要用Redis、ES和MQ吗?
如果不用什么很高大上的东西,就是有多个微服务就行这种技术架构会很难吗? 我看了一些视频,他们都用到了es.mq.redis的东西,我想不用这些东西,就简单的有多个服务,这样可行吗? 01 使用微服务你 ...
- 微服务从代码到k8s部署应有尽有系列(八、各种队列)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有大结局(k8s部署)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(四、用户中心)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
随机推荐
- Appuploader安装指南
转载:http://kxdang.com/topic/appuploader/install.html 下载和安装appuploader IOS开发工具官网地址 http://www.applicat ...
- 区块链——Lab2
区块链的典型数据结构 比特币:UTXO模型,以交易后找零为中心 ETH:Account 模型,以账户余额为中心(就是账户的形式) 区块链交易 用户发起交易 矿工验证交易(能够得到 区块奖励) 验证成功 ...
- 笔记:设置redhat 7.2 默认root用户启动以及网络服务自启动
笔记:设置redhat 7.2 默认root用户启动以及网络服务自启动 1.root用户启动 root用户下打开 /etc/gdm/custom.conf文件,添加字段如下: [daemo ...
- js中数组的sort() 方法
sort() 方法用于对数组的元素进行排序,并返回数组.默认排序顺序是根据字符串UniCode码.因为排序是按照字符串UniCode码的顺序进行排序的,所以首先应该把数组元素都转化成字符串(如有必要 ...
- 2023-2-22 增加产值冲减和EPC模块
应集团要求,现在已在综合信息管理系统中已增加以下信息,请大家注意,并及时转告业务人员: 1.[施工合同登记]模块增加必填字段"EPC建安费(万元)""EPC暂列费(万元) ...
- 2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。数据库不能停,并且还有增删改操作。请问如何操作?
2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据.数据库不能停,并且还有增删改操作.请问如何操作?福哥答案2020-01-20: 陌陌答案:用pt_onl ...
- Github Copilot Chat 初体验
最近因为阳了的缘故一直躺在床上.今天终于从床上爬起来了.不是因为好透了,而是因为我收到了申请Copilot Chat preview 权限通过的邮件.实在忍不住,于是起床开电脑在咳嗽声中进行了一番体验 ...
- 小程序打印饼图报错VM6541:1 thirdScriptError Converting circular structure to JSON;
今日使用小程序开发饼图页面,由于一个页面需要打印多个饼图,所以需要将echarts对象进行缓存,于是出现了如下js报错问题 一. 错误代码 VM6541:1 thirdScriptError Conv ...
- HashMap 底层是如何实现的?
HashMap 在不同的 JDK 版本下的实现是不同的,在 JDK 1.7 时,HashMap 底层是通过数组 + 链表实现的:而在 JDK 1.8 时,HashMap 底层是通过数组 + 链表或红黑 ...
- NeoVim 学习笔记
NeoVim 学习笔记 这篇学习笔记将用于记录本人在学习使用 NeoVim 编辑器过程中所编写的学习心得与代码.该笔记将会存放在https://github.com/owlman/study_note ...