微服务探索之路06篇k8s配置文件Yaml部署Redis使用Helm部署MongoDB和kafka

news2024/10/3 10:40:21

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 Deploymentskubectl 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,如果遇到卡主那就是需要翻墙
  • 下载完后解压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安装

  • 创建pvvim 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

  • 创建pvcvim 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/787682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32MP157驱动开发——按键驱动(工作队列)

文章目录 “工作队列”机制:内核函数work_struct 结构体定义 work使用 work :schedule_workworkqueue 其他函数 工作队列方式的按键驱动程序(stm32mp157)编程思路button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “工作队列”机制&#xff1…

UDS之11服务

11服务: 功能:控制MCU进行重启,重启分为硬重启和软重启,11服务一般代表软重启,虽然它里面有个子服务是硬件重启,这里需要注意下;硬重启在日常工作中一般代表B重启。命令格式(请求&am…

外贸找客户工具之邮件群发:MaxBulk Bulk Mailer Pro 9.5

MaxBulk Bulk Mailer Pro 是一款快速的批量邮件软件,旨在帮助在一次操作中向大量电子邮件 ID 发送批量电子邮件。直接将电子邮件发送到收件箱而不是垃圾邮件。该工具的目的是使批量电子邮件处理过程快速而精确,并且它配备了很多高级功能来实现此目的。用…

集成学习——Boosting算法:Adaboost、GBDT、XGBOOST和lightGBM的简要原理和区别

1、Boosting算法 Boosting算法是通过串联的方式,将一组弱学习器提升为强学习器算法。它的工作机制如下: (1)用初始训练集训练出一个基学习器; (2)依据基学习器的表现对训练样本分布进行调整&…

基于Truss+Docker+Kubernetes把开源模型Falcon-7B送上云端(译)

背景 到目前为止,我们已经看到了ChatGPT的能力及其所能提供的强大功能。然而,对于企业应用来说,像ChatGPT这样的封闭源代码模型可能会带来风险,因为企业自身无法控制他们的数据。尽管OpenAI公司声称用户数据不会被存储或用于训练…

【玩转Linux】标准IO函数

(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…

Emvirus: 基于 embedding 的神经网络来预测 human-virus PPIs【Biosafety and Health,2023】

研究背景: Human-virus PPIs 预测对于理解病毒感染机制、病毒防控等十分重要;大部分基于 machine-learning 预测 human-virus PPIs 的方法利用手动方法处理序列特征,包括统计学特征、系统发育图谱、理化性质等;本文作者提出了一个…

redis面试1

Redis基础面试题 1、为什么要使用Redis做缓存 缓存的好处 使用缓存的目的就是提升读写性能。而实际业务场景下,更多的是为了提升读性能,带来更好的性 能,带来更高的并发量。Redis 的读写性能比 Mysql 好的多,我们就可以把 Mysq…

探索APP开发的新趋势:人工智能和大数据的力量

随着5G技术的不断发展,人工智能和大数据将会更加广泛的应用于我们生活和工作中,作为 APP开发公司,应该及时的对新技术进行研发,进而更好的为用户服务。目前 APP开发已经不是传统的软件开发了,而是向移动互联网转型&…

完全背包相关题

class Solution { public:int dp[5005];int change(int amount, vector<int>& coins) {//dp[j]表示金额为j时的组合数dp[0]1;for(int i0;i<coins.size();i){for(int jcoins[i];j<amount;j){dp[j]dp[j-coins[i]];}}return dp[amount];} }; 题解&#xff1a;如果…

Pandas库:从入门到应用(四)--数学函数

一、测试数据 import numpy as np import pandas as pd## 5行3列 0到100的数据 df pd.DataFrame(datanp.random.randint(0, 100, size(5, 3))) df二、基础聚合函数 2.1、count()函数 df.count() # 统计每列的行数(非空),默认axis0 df.count(axis1) # 统计每行的列数(非空)…

mysql的主键选择

一.没有定义主键有什么问题 如果定义了主键&#xff0c;那么InnoDB会使用主键作为聚簇索引如果没有定义主键&#xff0c;那么会使用第一非空的唯一索引&#xff08;NOT NULL and UNIQUE INDEX&#xff09;作为聚簇索引如果既没有主键也找不到合适的非空索引&#xff0c;那么In…

案例研究|DataEase助力亚加达智能医学实验室场景BI展示

深圳市亚加达信息技术有限公司&#xff08;以下简称为亚加达&#xff09;成立于2018年&#xff0c;是一家专注于医疗信息系统研发的高科技公司&#xff0c;隶属于亚辉龙集团。 亚加达深入理解医疗实验室业务和日常工作流程&#xff0c;通过物联网和大数据技术&#xff0c;基于…

数据库概述和DDL语句(学会并使用数据库day1)

数据库概述和DDL语句&#xff08;day1&#xff09; 一、数据库概述概念数据库的集中式控制有什么优点数据库分类mysql数据库mysql简介基本术语数据表的组成 数据库管理系统数据库管理系统、数据库和表的关系 二、SQL的概念三、SQL语句分类1、SQL语句被分为四大类2、MySQL的语法…

电脑上怎么进行pdf合并免费?看看这种方法

电脑上怎么进行pdf合并免费&#xff1f;在日常工作中&#xff0c;我们经常需要将多个PDF文档合并成一个文件&#xff0c;以方便管理和传输。如果你正在寻找一种简单易用的PDF合并工具&#xff0c;那么接下来就给大家介绍一种简单好用的合并方法。 【迅捷PDF转换器】是一款PDF转…

godot引擎c++源码深度解析系列一

许久没有使用c开发过项目了&#xff0c;如果按照此时单位的入职要求&#xff0c;必须拥有项目经验的话&#xff0c;那我就得回到十多年前&#xff0c;大学的时代&#xff0c;哪个时候真好&#xff0c;电脑没有这么普及&#xff0c;手机没有这么智能&#xff0c;网络没有这么发达…

01背包相关题

题解&#xff1a;dp[j]表示目标和为j时的最大组合种数 class Solution { public:int dp[1005];int findTargetSumWays(vector<int>& nums, int target) {int val;int sum0;for(int i0;i<nums.size();i){sumnums[i];}int wsumtarget;if(w%21){return 0;}else{valw…

重磅来袭 | 2023数字供应链安全大会邀请函(DSS 2023)

2023数字供应链安全大会&#xff08;DSS 2023&#xff09;将于8月10日在北京国家会议中心隆重开幕。本次大会由悬镜安全主办&#xff0c;ISC互联网安全大会组委会、中国软件评测中心&#xff08;工业和信息化部软件与集成电路促进中心&#xff09;、中国信息通信研究院云计算与…

基于IMX6ULL的智能车载终端项目(代码开源)

前言&#xff1a;本文为手把手教学智能车载终端项目&#xff08;LinuxQT&#xff09;&#xff0c;该项目是综合性非常强的 Linux 系列项目&#xff01;项目核心板使用 NXP 的 IMX6ULL 作为 CPU&#xff0c;整体实现了简化版本的车载终端功能需求。项目可以学习的点非常多&#…

物联网网关模块可以带几台plc设备吗?可以接几个modbus设备?

随着物联网技术的快速发展&#xff0c;物联网网关模块已经成为了实现物联网应用的重要工具。很多客户在选择物联网网关模块时想了解物联网网关模块的设备接入能力&#xff0c;一个物联网网关模块可以带几台PLC设备&#xff1f;可以接几个Modbus设备&#xff1f; 物联网网关模块…