K8S三 K8S部署微服务应用

一 用k8s部署微服务应用

以我们之前用docker部署过的eureka应用为例,首先添加配置文件eureka-app-deployment.yaml用于创建Deployment

apiVersion: apps/v1
kind: Deployment
metadata:name: eureka-app-deployment # deployment名字labels:app: eureka-app
spec:replicas: 1 #副本个数selector:matchLabels:app: eureka-app template:metadata:labels:app: eureka-appspec:containers:- name: eureka-app #pod名字# 指定Docker Hub中的镜像地址image: zhuge666/microservice-eureka-server:0.0.1ports:- containerPort: 8761 # 容器内部端口

通过应用配置文件来创建一个Deployment部署

kubectl apply -f eureka-app-deployment.yaml

查看下deploy和pod信息

kubectl get deploy,pod

在这里插入图片描述
我们可以通过kubectl logs命令来查看应用的启动日志

kubectl logs -f  pod/eureka-app-deployment-7cd4b6f4d4-lkzs4

在这里插入图片描述
如果想要从外部访问应用,需要创建Service,添加配置文件eureka-app-service.yaml用于创建Service

apiVersion: v1
kind: Service
metadata:name: eureka-app-service
spec:type: NodePortselector:app: eureka-app #选择有该标签的pod容器ports:- name: httpprotocol: TCPport: 8761  #service的端口targetPort: 8761  #pod的端口,一般与pod内部容器的服务端口一致

通过应用配置文件来创建Service

kubectl apply -f eureka-app-service.yaml

查看服务Service信息

[macro@linux-local k8s]$ kubectl get services

在这里插入图片描述
此时就可以通过外网来访问了:http://192.168.65.160:30558/
在这里插入图片描述

二 用k8s部署电商项目微服务

以电商微服务里的product服务为例,我们来创建对应的deployment和service,做之前需要把商品服务做成镜像推到docker镜像仓库里去,参考之前的docker章节。

docker login
docker tag mall/tulingmall-product:0.0.1 zhuge666/tulingmall-product:0.0.1
docker push zhuge666/tulingmall-product:0.0.1

新增文件tulingmall-product-deployment.yaml,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:name: tulingmall-product-deploymentlabels:app: tulingmall-product
spec:replicas: 1selector:matchLabels:app: tulingmall-producttemplate:metadata:labels:app: tulingmall-productspec:containers:- name: tulingmall-productimage: zhuge666/tulingmall-product:0.0.1#imagePullPolicy: Always  # 1)Always 总是拉取镜像, 2)IfNotPresent(默认该值) 本地有则使用本地镜像,3)Never 只使用本地镜像,从不拉取,即使本地没有镜像ports:- containerPort: 8866env: # 环境- name: TZvalue: Asia/Shanghai- name: spring.cloud.nacos.config.server-addr # 指定配置中心nacosvalue: 192.168.65.42:8848- name: LOG_FILEvalue: /var/logsvolumeMounts:- mountPath: /var/logs #容器日志目录(挂载到下边的宿主机目录)name: log-volumevolumes:- name: log-volumehostPath:path: /mydata/k8s-app/tulingmall-product/logs #宿主机目录type: DirectoryOrCreatednsPolicy: Default  #继承Pod所在宿主机的DNS设置,使pod能访问外网

配置环境变量
在这里插入图片描述

执行如下命令创建商品服务的deployment:

kubectl apply -f tulingmall-product-deployment.yaml
# 查看
kubectl get all

新增文件tulingmall-product-service.yaml,内容如下:
(其实我们实际部署时不需要写这个文件,因为微服务里有fegin或Ribbion这种内部调用框架去互相调用服务;但是部署gateway时一定要配置对应的service.yaml文件,因为gateway项目是需要外网访问的)

apiVersion: v1
kind: Service
metadata:name: tulingmall-product-service
spec:type: NodePortselector:app: tulingmall-productports:- name: httpprotocol: TCPport: 8866targetPort: 8866

执行如下命令创建商品服务的service:

kubectl apply -f tulingmall-product-service.yaml

查看商品服务的对外暴露端口:
在这里插入图片描述
访问下查询商品的接口,如果有json数据返回,代表服务正常:

http://192.168.65.210:30911/pms/productInfo/1

在这里插入图片描述
用相同的方法部署下电商里的order,member,gateway,authcenter等服务,这里不一一详述了,附上每个服务k8s部署的yaml文件供大家参考。

authcenter服务
tulingmall-authcenter-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: tulingmall-authcenter-deploymentlabels:app: tulingmall-authcenter
spec:replicas: 1selector:matchLabels:app: tulingmall-authcentertemplate:metadata:labels:app: tulingmall-authcenterspec:containers:- name: tulingmall-authcenterimage: zhuge666/tulingmall-authcenter:0.0.1imagePullPolicy: Alwaysports:- containerPort: 9999env: - name: TZvalue: Asia/Shanghai- name: spring.cloud.nacos.config.server-addrvalue: 192.168.65.42:8848- name: LOG_FILEvalue: /var/logsvolumeMounts:- mountPath: /var/logsname: log-volumevolumes:- name: log-volumehostPath:path: /mydata/k8s-app/tulingmall-authcenter/logstype: DirectoryOrCreatednsPolicy: Default  #继承Pod所在宿主机的DNS设置,使pod能访问外网

tulingmall-authcenter-service.yaml

apiVersion: v1
kind: Service
metadata:name: tulingmall-authcenter-service
spec:type: NodePortselector:app: tulingmall-authcenterports:- name: httpprotocol: TCPport: 9999targetPort: 9999

gateway服务
tulingmall-gateway-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: tulingmall-gateway-deploymentlabels:app: tulingmall-gateway
spec:replicas: 1selector:matchLabels:app: tulingmall-gatewaytemplate:metadata:labels:app: tulingmall-gatewayspec:containers:- name: tulingmall-gatewayimage: zhuge666/tulingmall-gateway:0.0.1imagePullPolicy: Alwaysports:- containerPort: 8888env:- name: TZvalue: Asia/Shanghai- name: spring.cloud.nacos.config.server-addrvalue: 192.168.65.42:8848- name: LOG_FILEvalue: /var/logsvolumeMounts:- mountPath: /var/logsname: log-volumevolumes:- name: log-volumehostPath:path: /mydata/k8s-app/tulingmall-gateway/logstype: DirectoryOrCreatednsPolicy: Default  #继承Pod所在宿主机的DNS设置,使pod能访问外网

tulingmall-gateway-service.yaml
(其他模块可以不写自己的service.yaml,gateway需要外网访问,所以一定要写service.yaml)

apiVersion: v1
kind: Service
metadata:name: tulingmall-gateway-service
spec:type: NodePortselector:app: tulingmall-gatewayports:- name: httpprotocol: TCPport: 8888targetPort: 8888

order服务
tulingmall-order-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: tulingmall-order-deploymentlabels:app: tulingmall-order
spec:replicas: 1selector:matchLabels:app: tulingmall-ordertemplate:metadata:labels:app: tulingmall-orderspec:containers:- name: tulingmall-orderimage: zhuge666/tulingmall-order:0.0.1imagePullPolicy: Alwaysports:- containerPort: 8844env:- name: TZvalue: Asia/Shanghai- name: spring.cloud.nacos.config.server-addrvalue: 192.168.65.42:8848- name: LOG_FILEvalue: /var/logs- name: JAVA_TOOL_OPTIONSvalue: -Xms1G -Xmx1G -Xmn512M -Xss512K -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -javaagent:/agent/skywalking-agent.jar -DSW_AGENT_NAME=tulingmall-order -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.65.204:11800volumeMounts:- mountPath: /var/logsname: log-volumevolumes:- name: log-volumehostPath:path: /mydata/k8s-app/tulingmall-order/logstype: DirectoryOrCreatednsPolicy: Default  #继承Pod所在宿主机的DNS设置,使pod能访问外网   

tulingmall-order-service.yaml

apiVersion: v1
kind: Service
metadata:name: tulingmall-order-service
spec:type: NodePortselector:app: tulingmall-orderports:- name: httpprotocol: TCPport: 8844targetPort: 8844

member服务
tulingmall-member-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: tulingmall-member-deploymentlabels:app: tulingmall-member
spec:replicas: 1selector:matchLabels:app: tulingmall-membertemplate:metadata:labels:app: tulingmall-memberspec:containers:- name: tulingmall-memberimage: zhuge666/tulingmall-member:0.0.1imagePullPolicy: Alwaysports:- containerPort: 8877env:- name: TZvalue: Asia/Shanghai- name: spring.cloud.nacos.config.server-addrvalue: 192.168.65.42:8848- name: LOG_FILEvalue: /var/logs- name: JAVA_TOOL_OPTIONSvalue: -Xmx1g -Xms1g -XX:MaxMetaspaceSize=256m -javaagent:/agent/skywalking-agent.jar -DSW_AGENT_NAME=tulingmall-member -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.65.204:11800volumeMounts:- mountPath: /var/logsname: log-volumevolumes:- name: log-volumehostPath:path: /mydata/k8s-app/tulingmall-member/logstype: DirectoryOrCreatednsPolicy: Default  #继承Pod所在宿主机的DNS设置,使pod能访问外网

tulingmall-member-service.yaml

apiVersion: v1
kind: Service
metadata:name: tulingmall-member-service
spec:type: NodePortselector:app: tulingmall-memberports:- name: httpprotocol: TCPport: 8877targetPort: 8877

创建网关的Ingress(相当于Nginx)
最后,我们来创建网关服务的Ingress,创建文件tulingmall-gateway-ingress.yaml,内容如下:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:name: tulingmall-gateway-ingress
spec:rules:- host: gateway.tuling.com  #转发域名http:paths:- path: /backend:serviceName: tulingmall-gateway-serviceservicePort: 8888  #service的端口

执行如下命令生效规则:

kubectl apply -f tulingmall-gateway-ingress.yaml

查看生效的ingress规则:

kubectl get ing

在这里插入图片描述
在访问机器配置host,win10客户机在目录:C:\Windows\System32\drivers\etc,在host里增加如下host(ingress部署的机器ip对应访问的域名)

192.168.65.203  gateway.tuling.com
或者
192.168.65.210  gateway.tuling.com

配置完后直接在客户机用域名请求下网关:
在这里插入图片描述

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

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

相关文章

【C++】CentOS环境搭建-升级CMAKE

【C】CentOS环境搭建-升级CMAKE CMAKE报错CMake 3.12 or higher is required. You are running version 2.8.12.2升级步骤1.移除当前的cmake2.安装必要的构建工具和库3.下载最新的cmake源码并解压5.编译和安装6.验证安装 CMAKE报错CMake 3.12 or higher is required. You are r…

oraclesql中删除表中重复行的方法

在Oracle SQL中,删除表中的重复行有几种常见的方法。以下是其中的三种: 使用ROWID: 通过比较ROWID,你可以找到并删除重复的行。这是因为ROWID是Oracle数据库为每一行数据分配的唯一标识符。 sql DELETE FROM persons p1 WHERE ROWID NOT…

MySQL存储引擎详解

存储引擎 MySQL体系结构 连接层:与客户端连接,权限校验、连接池服务层:SQL接口和解析、查询优化、缓存、函数引擎层:索引、存储引擎存储层:系统文件、日志(Redo、Undo等) 存储引擎介绍 不同的…

SSH:安全远程访问的基石

SSH:安全远程访问的基石 一、引言 在当今这个数字化、网络化的时代,远程访问和管理计算机资源已成为日常工作的重要组成部分。然而,如何在不安全的网络环境中确保数据传输的机密性、完整性和可靠性,成为了一个亟待解决的问题。S…

前端测试策略与实践:单元测试、E2E测试与可访问性审计

前端测试策略是确保Web应用程序质量、性能和用户体验的关键组成部分。有效的测试策略通常包括单元测试、端到端(E2E)测试以及可访问性审计等多个层面。以下是关于这三类测试的策略与实践建议: 单元测试 定义与目的: 单元测试是针…

P2622 关灯问题

小小注解: 1. vis:表示到达该状态的步数(min)1, 因为我们是从开始状态 穷举,所以每次到一个新状态(之前没有到过的状态)就是最小步数。 如何判断是否是一个新状态呢&#xff0c…

axios常用配置

Axios 是一个基于 promise 的 HTTP 库,广泛用于浏览器和 node.js 中。以下是一些 Axios 常用的配置选项: url: 字符串,请求的服务器URL,是必填项。method: 请求方法,如 ‘get’, ‘post’, ‘put’, ‘delete’ 等&am…

免费远程控制软件哪个好用

免费远程控制软件哪个好用 在现今高度信息化的社会,远程控制软件已成为许多用户进行远程办公、技术支持和教育培训的重要工具。市面上有许多免费的远程控制软件,但哪款才是最好用的呢?本文将为您介绍几款热门的免费远程控制软件,…

Tab菜单与下拉式菜单

Tab菜单 利用CSS隐藏或显示栏目中的部分内容&#xff0c;实际Tab面板包含的全部内容都已下载到客户端浏览器当中。一般Tab面板仅显示一个Tab菜单项&#xff0c;当用户点选对应的菜单选项之后&#xff0c;才会显示对应的内容。 <!DOCTYPE html> <html><head>…

Matlab: ode45解微分方程——以弹簧振子模型为例

简介&#xff1a; 在科学和工程中&#xff0c;我们经常遇到描述事物变化的微分方程。这些方程可以帮助我们理解从行星运动到药物在体内的扩散等各种现象。但是&#xff0c;很多微分方程非常复杂&#xff0c;手动求解几乎不可能。这时&#xff0c;我们就可以使用像 ode45这样的…

【DL】FocalLoss的PyTorch实现

【DL】FocalLoss的PyTorch实现 此篇不介绍FocalLoss的原理&#xff0c;仅展示PyTorch实现FocalLoss的两种方式。个人认为相关原理已在文章《FocalLoss原理通俗解释及其二分类和多分类场景下的原理与实现》中讲得很清晰&#xff0c;故此篇不再介绍。 方式一 同时计算一个batc…

【iOS】frame与bounds区别

文章目录 前言framebounds两者区别size的区别总结 前言 在学习响应者链的过程中用到了frame与bounds的混用&#xff0c;这两个属性经常出现在我们的开发中&#xff0c;特别撰写一篇博客分析区别 首先&#xff0c;我们来看一下iOS特有的坐标系&#xff0c;在iOS坐标系中以左上…

C语言如何查看进程中环境变量中所有的值

示例代码&#xff1a;查看进程中环境变量中所有的值。 #include <stdio.h>int main(){extern char** environ;for (char** pp environ; *pp; pp){printf("%s\n", *pp);}return 0; }输出结果&#xff1a; SHELL/bin/bash WSL2_GUI_APPS_ENABLED1 WSL_DISTRO_…

【debug】如何使用pycharm对代码调试

后续会将所有debug中遇到的知识放入&#xff0c;建议关注收藏 本站友情链接&#xff1a; 基本理论专栏&#xff08;当前更新好的debug所有内容都在这里&#xff09; 【debug】报错解决方法&#xff08;CondaHTTPError&#xff1a;HTTP 000 connection failed for url&#xff…

【回溯 状态压缩 深度优先】37. 解数独

本文涉及知识点 回溯 状态压缩 深度优先 LeetCode37. 解数独 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只…

leetCode刷题记录4-面试经典150题-2

文章目录 不要摆&#xff0c;没事干就刷题&#xff0c;只有好处&#xff0c;没有坏处&#xff0c;实在不行&#xff0c;看看竞赛题面试经典 150 题 - 2210. 课程表 II 不要摆&#xff0c;没事干就刷题&#xff0c;只有好处&#xff0c;没有坏处&#xff0c;实在不行&#xff0c…

[C++核心编程-06]----C++类和对象之对象模型和this指针

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

Microsoft 365 for Mac v16.84 office365全套办公软件

Microsoft 365 for Mac是一款功能丰富的办公软件套件&#xff0c;为Mac用户提供了丰富的功能和工具&#xff0c;提高了工作效率和协作能力。Microsoft 365 for Mac是一款专为Mac用户设计的订阅式办公软件套件&#xff0c;旨在提高生产力和效率。 Microsoft 365 for Mac v16.84正…

数据赋能(83)——数据要素:数据要素管理与数据管理

数据要素管理则更关注数据作为生产性资源在创造经济价值中的作用&#xff1b;数据管理更侧重于数据在整个生命周期中的控制、保护和价值提升。 数据要素管理是对数据作为关键生产要素进行系统性管理的过程。它聚焦于数据在经济和社会活动中的价值创造和贡献&#xff0c;将数据…

ubantu安装docker以及docker-compose

ubantu安装docker以及docker-compose 安装docker1、从官方存储库中安装Docker2、启动Docker服务3、验证 安装docker compose使用docker部署服务1、需要再opt文件夹下创建以下文件夹&#xff0c;/opt文件夹目录说明2、可将已备份对应文件夹拷至对应文件夹下3、在/opt/compose目录…