云原生Java架构师(KubeSphere实战)中间件部署

一、简介

使用KubeShere部署应用架构图:
在这里插入图片描述
注意三点:

  1. 应用的部署方式
  2. 应用的数据挂载(数据、配置文件)
  3. 应用的可访问行性

二、部署MySQL

创建MySQL配置集(ConfigMap)

在这里插入图片描述

[client]
default-character-set=utf8mb4
 
[mysql]
default-character-set=utf8mb4
 
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

在这里插入图片描述
在这里插入图片描述

需要安装nfs-server 配置动态供应的默认存储类(如果已经操作过则略)

# 在每个机器。
yum install -y nfs-utils


# 在master 执行以下命令 
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports


# 执行以下命令,启动 nfs 服务;创建共享目录
mkdir -p /nfs/data


# 在master执行
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server

# 使配置生效
exportfs -r


#检查配置是否生效
exportfs

配置nfs-client(选做)

showmount -e 172.31.0.4

mkdir -p /nfs/data

mount -t nfs 172.31.0.4:/nfs/data /nfs/data

配置动态供应的默认存储类

注意修改主节点的私网ip地址。
使用kubectl apply -f nfs-server.yml命令部署。
部署成功后可以在 存储管理 —— 存储类型 看到。
在这里插入图片描述

## 创建了一个存储类
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
  archiveOnDelete: "true"  ## 删除pv的时候,pv的内容是否要备份

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2
          # resources:
          #    limits:
          #      cpu: 10m
          #    requests:
          #      cpu: 10m
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: k8s-sigs.io/nfs-subdir-external-provisioner
            - name: NFS_SERVER
              value: 172.31.0.4 ## 指定自己nfs服务器地址
            - name: NFS_PATH  
              value: /nfs/data  ## nfs服务器共享的目录
      volumes:
        - name: nfs-client-root
          nfs:
            server: 172.31.0.4
            path: /nfs/data
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

创建存储卷(PVC)

在这里插入图片描述

创建有状态副本集

在这里插入图片描述
点击下一步。
选择镜像:选择DockerHub上的mysql:5.7的镜像。
在这里插入图片描述
往下: 选择限制1核cpu 和 2000M 的内存。
在这里插入图片描述
往下:
勾选 环境变量MYSQL_ROOT_PASSWORD 密码:123456
勾选同步主机时区。
在这里插入图片描述
点击下一步:
选择存储卷 挂载目录:/var/lib/mysql 选择读写
选择配置集 挂载目录:/etc/mysql/conf.d 选择只读
在这里插入图片描述

点击下一步:
在这里插入图片描述

点击创建。
创建完成之后,我们发现:Pod无法调度。

在这里插入图片描述

kubectl get pod -n his
# 查看部署
kubectl describe pod -n his  mysql-his-0

在这里插入图片描述
在这里插入图片描述
原因是内存不足。

在页面也直接有提示:
在这里插入图片描述

服务器配置升级4核8G后部署成功:
在这里插入图片描述

查看描述事件:kubectl describe pod -n ruoyi-cloud ry-cloud-mysql-0

在这里插入图片描述
部署成功后,会自动创建service
在这里插入图片描述
在集群内部进行访问mysql:
查看服务(Service):
在这里插入图片描述
进入容器内部,使用域名连接:mysql -uroot -hry-cloud-mysel-i41g.ruoyi-cloud -p
在这里插入图片描述

创建网络

我们也可以把自动生成的service删除,自己创建Service服务:
集群内部访问:
在这里插入图片描述
使用集群内部访问无法在选择暴露外网。
在这里插入图片描述
此时创建服务的域名就是我们自己定义的不是随机生成的:
在这里插入图片描述

创建集群外部访问:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

通过主机的公网IP加暴露的端口即可连接:
(注意开放安全组端口)
在这里插入图片描述

在这里插入图片描述

三、部署Redis

创建配置集

appendonly yes
port 6379
bind 0.0.0.0

在这里插入图片描述

创建有状态副本集

在这里插入图片描述
选择镜像
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
新建存储卷:
在这里插入图片描述
在这里插入图片描述
挂载配置集
在这里插入图片描述
在这里插入图片描述

创建成功
在这里插入图片描述
在这里插入图片描述

创建网络

创建集群外访问:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
连接成功!
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

我们发现三个副本的Redis的数据是独立存储的。

四、部署Elasticsearch

首先使用Docker方式启动Es

创建数据目录:mkdir -p /mydata/es-01 && chmod 777 -R /mydata/es-01

拉取Es镜像:docker pull elasticsearch:7.13.4

在这里插入图片描述

创建并启动容器:

docker run --restart=always -d -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v es-config:/usr/share/elasticsearch/config \
-v /mydata/es-01/data:/usr/share/elasticsearch/data \
--name es-01 \
elasticsearch:7.13.4

在这里插入图片描述
如果容器启动失败可以使用docker logs 1db61ae4c711命令查看容器日志。
(注意 如果有报错,原因可能是 /mydata/es-01 目录 没有权限)

需要挂载的文件有两个在/usr/share/elasticsearch/config目录下的:jvm.optionselasticsearch.yml文件。
在这里插入图片描述

创建Es配置集(ConfgiMap)

elasticsearch.yml

cluster.name: "docker-cluster"
network.host: "0.0.0.0"

在这里插入图片描述

jvm.options

将我们之前使用Docker启动的Es的配置拷过来:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

创建有状态副本集

选择镜像:
在这里插入图片描述

配置环境变量:
discovery.type single-node
ES_JAVA_OPTS -Xms512m -Xmx512m
在这里插入图片描述
创建存储卷:
挂载目录:/usr/share/elasticsearch/data
在这里插入图片描述

指定配置集:

(注意:如果一个文件夹是有多个的,但是只挂载几个文件不是全部的,则需要映射子路径,否则会全部覆盖!)

在这里插入图片描述

点击创建后发现无法调度,原因是因为:2核CPU不足
在这里插入图片描述
我们修改配置后重新部署:
在这里插入图片描述

五、从应用商店部署RabbitMQ

六、从应用仓库部署Zookeeper

应用仓库:https://artifacthub.io/
搜索Redis
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在 企业空间 – 应用管理 – 应用仓库:
点击添加仓库:https://charts.bitnami.com/bitnami

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
云原生Kubernetes全栈架构师实战下载是指提供一个具有云原生架构设计和Kubernetes技术实践的全栈架构师学习材料的下载资源。 Kubernetes作为一个开源的容器编排引擎,在云原生架构中扮演着重要的角色。全栈架构师需要了解Kubernetes的核心概念、架构原理以及其在实践中的应用。 该资源的下载内容主要包括以下方面: 1. 云原生架构设计:介绍云原生架构的核心思想、原则和设计模式,帮助全栈架构师理解如何构建弹性、灵活和可扩展的应用架构。 2. Kubernetes基础知识:详细介绍Kubernetes的核心组件、架构、工作原理和常用功能,包括Pod、Deployment、Service等概念的讲解和实践。 3. Kubernetes部署和管理:指导全栈架构师在实践中如何部署和管理Kubernetes群,包括安装配置、网络设置、存储管理等内容。 4. 云原生应用开发:介绍云原生应用的开发模式和最佳实践,帮助全栈架构师了解如何使用Kubernetes进行应用的容器化并进行弹性伸缩和自动部署等操作。 5. 持续成和持续交付:介绍使用Kubernetes进行持续成和持续交付的方法和工具,帮助全栈架构师实现应用的自动化构建、测试和部署。 通过下载并学习这个资源,全栈架构师可以进一步提升对云原生架构和Kubernetes的理解和实践能力,为企业的应用容器化和云原生转型提供支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu_Shihao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值