之前用docker-compose部署微服务项目,但是只能单节点的(那你用微服务架构干啥?),所以想搞一下k8s集群,网上找了下资料没有视频专门讲这一块,自己找了很多资料,搞了蛮长时间的,所以记录一下
1.安装k8s和管理界面kuboard

高版本的k8s已经抛弃了docker,容器使用的话要安装1.19版本的 链接地址
安装好之后执行命令查看所有node节点

kubectl get nodes

访问ip:30080 进入kuboard管理界面 登录进去

2.概念

namespace:命名空间,所有操作都要先选择一个命名空间
ingress:nginx做了一层封装,用域名代替ip访问
service:暴露给外网访问的端口(Nodeport),因为创建的应用只能集群内访问到
deployment:应用负载,下面有多个pod,一个pod宕机了,可以立马创建新的pod,也可以扩缩容
pod:容器组,里面可以创建多个容器

3.命令
kubectl 动词 类别 名称

例如 创建命名空间 kubectl create namespace namespace名

后面的操作部署都是指定yml文件运行 kubectl apply -f yml文件名 (用的最多的命令,项目部署都是用yml文件)

4.部署应用
三个简单服务 nginx gateway , order , product 注册中心nacos 数据库mysql,redis
mysql ,nacos,redis这些有状态的应用放到k8s外部 ,gateway , order , product这三个服务放k8s中部署

4.1 将jar包打成镜像传到harbor仓库中(可以在idea中使用docker-maven-plugin插件打包上传镜像),Dockerfile以gateway为例

FROM moxm/java:1.8-fullMAINTAINER leviEXPOSE 38080ARG JAR_FILE=target/k8s-gateway.jarCOPY $JAR_FILE app.jarENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"CMD java -jar app.jar $JAVA_OPTS

三个镜像都上传上去之后,开始编写三个服务的yml文件进行部署

gateway.yml gateway创建了service,可以被外网访问到

apiVersion: apps/v1
kind: Deployment
metadata:namespace: testname: gateway-dplabels:app: gateway-dp
spec:replicas: 3selector:matchLabels:app: gateway-dptemplate:metadata:labels:app: gateway-dpspec:containers:- name: gatewayimage: 192.168.3.152/test/k8s-gateway:1.0.0---
#暴露service
apiVersion: v1
kind: Service
metadata:namespace: testname: gateway-dp    #service的名称labels:app: gateway-dp   #标签
spec:selector:app: gateway-dp   #选择的deployports:- nodePort: 30008   #配置可以外网访问的端口port: 38080       #集群内访问的端口  protocol: TCPtargetPort: 38080 #pod容器内的端口type: NodePort

order.yml

apiVersion: apps/v1
kind: Deployment
metadata:namespace: testname: order-dplabels:app: order            #为该Deployment设置key为app,value为order的标签
spec:replicas: 2             #指定集群数,即pod的数量selector:               #标签选择器,与上面的标签共同作用matchLabels:          #选择包含标签app:order的资源app: ordertemplate:               #这是选择或创建的Pod的模板metadata:             #Pod的元数据labels:             #Pod的标签,上面的selector即选择包含标签app:order的Podapp: orderspec:                 #期望Pod实现的功能(即在pod中部署)containers:         #如果要创建多个容器,继续往下面加-name- name: k8s-order   #容器名称image: 192.168.3.152/test/k8s-order:1.0.0    #镜像

product.yml

apiVersion: apps/v1
kind: Deployment
metadata:namespace: testname: product-dplabels:app: product            #为该Deployment设置key为app,value为product的标签
spec:replicas: 2             #指定集群数,即pod的数量selector:               #标签选择器,与上面的标签共同作用matchLabels:          #选择包含标签app:product的资源app: producttemplate:               #这是选择或创建的Pod的模板metadata:             #Pod的元数据labels:             #Pod的标签,上面的selector即选择包含标签app:product的Podapp: productspec:                 #期望Pod实现的功能(即在pod中部署)containers:         #如果要创建多个容器,继续往下面加-name- name: k8s-product   #容器名称image: 192.168.3.152/test/k8s-product:1.0.0    #镜像

nginx.yml nginx创建deployment ,service和ingress

注意nginx挂载的目录和文件要在worker节点上提前创建好,因为到时候容器会运行在worker节点上

目录如下

idnex.html里面随便写点内容
nginx.conf配置文件内容如下

server {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html;try_files $uri $uri/ /index.html;index  index.html index.htm;}location /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://gateway-dp:38080/;   #gateway-dp是网关的deployment名称}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
#创建应用负载
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx #为该Deployment设置key为app,value为nginx的标签name: k8s-nginx-dpnamespace: test
spec:replicas: 2 #副本数量selector: #标签选择器,与上面的标签共同作用matchLabels: #选择包含标签app:nginx的资源app: nginxtemplate: #这是选择或创建的Pod的模板metadata: #Pod的元数据labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Podapp: nginxspec: #期望Pod实现的功能(即在pod中部署)containers: #生成container,与docker中的container是同一种- name: k8s-nginximage: nginx:latest #使用镜像nginx: 创建container,该container默认80端口可访问ports:- containerPort: 80  # 开启本容器的80端口可访问volumeMounts:  #挂载持久存储卷- name: html #挂载设备的名字,与volumes[*].name 需要对应 mountPath: /usr/share/nginx/html #挂载到容器的某个路径下  - name: conf #挂载设备的名字,与volumes[*].name 需要对应 mountPath: /etc/nginx/conf.d #挂载到容器的某个路径下volumes:- name: html #和上面保持一致 这是本地的文件路径,上面是容器内部的路径hostPath:path: /home/nginx/html #此路径需要实现创建- name: conf #和上面保持一致 这是本地的文件路径,上面是容器内部的路径hostPath:path: /home/nginx/conf #此路径需要实现创建
---
#创建service
apiVersion: v1
kind: Service
metadata:namespace: testname: k8s-nginx-dplabels:app: k8s-nginx-dp
spec:selector:app: nginxports:- nodePort: 30010   #配置可以外网访问的端口port: 8888       #集群内访问的端口  protocol: TCPtargetPort: 80 #pod容器内的端口type: NodePort
---
#创建ingress
apiVersion: networking.k8s.io/v1  #固定写法
kind: Ingress
metadata:namespace: testname: nginx-ingress           #ingress的名称
spec:ingressClassName: ingress     #kuboard上配置的ingress的名称,这个要先在kuboard上配置好rules:- host: levi.nginx.com        #自己配置的域名http:paths:- path: /pathType: Prefixbackend:service:name: k8s-nginx-dp   #上面service上配置的nameport:number: 8888       #上面配置的port

使用 kubectl apply -f yml文件名称 启动所有的yml,可以在kuboard界面上看到

点k8s-nginx-dp进去,选择服务,黄色的就是对外暴露的端口号

查看容器组

把levi.nginx.com 配到电脑hosts里面

使用apifox访问

k8s部署微服务项目相关推荐

  1. K8s部署微服务(springboot+vue)

    文章目录 前言 一.使用到的K8s资源 1.1 Deployment 1.2 Service 二.Springboot基础服务部署 2.1 网关gateway 2.2 鉴权auth 2.3 文件fil ...

  2. 高可用集群篇(五)-- K8S部署微服务

    高可用集群篇(五)-- K8S部署微服务 一.K8S有状态服务 1.1 什么是有状态服务 1.2 k8s部署MySQL 1.2.1 创建MySQL主从服务 1.2.2 测试主从配置 1.2.3 k8s ...

  3. 从运维角度看微服务 k8s部署微服务【偏理论】【AL】

    从运维角度看微服务 & 部署微服务[偏理论] 1.微服务的特点 服务组件化: 每个服务独立开发.部署,有效避免一个服务的修改引起整个系统重新部署. 技术栈灵活: 约定通信方式,使得服务本身功能 ...

  4. IDEA集成Docker插件实现一键自动打包部署微服务项目

    一. 前言 大家在自己玩微服务项目的时候,动辄十几个服务,每次修改逐一部署繁琐不说也会浪费越来越多时间,所以本篇整理通过一次性配置实现一键部署微服务,实现真正所谓的一劳永逸. 二. 配置服务器 1. ...

  5. docker部署微服务项目

    上次有人说部署单个springboot项目和ssm写的非常的简单可以写一篇docker部署微服务的结构的文章的吗 安排 什么是微服务? 微服务架构是一种将单个应用程序作为一套小型服务开发的方法,每种应 ...

  6. k8s部署微服务组件eureka

    本文是在CentOS7环境上,搭建微服务集群系统简单样例. 架构描述: k8s集群:2台master node,1台slave node,均安装maven.docker.k8s环境:k8s集群系统用来 ...

  7. jenkins部署微服务项目

    新手上路,对着视频做了一个谷粒的在线教育项目.测试跑通之后,想要自己试着部署到自己的云服务器上,闲着也是闲着不是.言归正传 简介 在微服务架构中,随着服务越来越多,服务的打包部署就会成为一个相当麻烦的 ...

  8. Docker 部署微服务项目

    目录 一.前言 二.环境准备 1.安装 Docker 2.Docker 安装 MySQL 3.Docker 安装 Redis 4.Docker 安装 Nacos 5.Docker 安装 Nginx 三 ...

  9. Java学习 --- docker部署微服务项目

    目录​​​​​​​ 一.创建一个springboot项目 1.1.修改pom.xml文件 1.2.修改application.properties配置文件 1.3.创建controller层和类 1. ...

最新文章

  1. R语言进行dataframe数据左连接(Left join):使用R原生方法、data.table、dplyr等方案
  2. Android入门第八篇之GridView(九宫图)
  3. 创建表名作为参数的mysq存储过程【procedure】
  4. 干货 | 27 个问题,告诉你 Python 为什么如此设计?
  5. oracle自带split函数_Pandas 基本使用(三) — DataFrame.to_dict() 函数基本使用
  6. 自动生成网络拓扑图开源_为视频自动生成字幕,一款神奇的开源工具!
  7. MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解
  8. 摩托车午夜飙车撞进公交车下 肇事车主当场死亡
  9. java中常见的包类接口_Java中一些常用的类,包,接口
  10. FastDFS(提升磁盘IO性能的几个技巧 FastDFS 5.04之IO读事件)
  11. 【BZOJ-18532393】幸运数字Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝
  12. java 生成txt日志方法,java定向输出程序日志(输出到txt文件中)
  13. 千万数据去重_如何在 1 秒内做到大数据精准去重?
  14. 【转】使用C语言实现MD5消息摘要算法
  15. MVP架构实例讲解-登录界面
  16. PBI Report Builder 报表设计与可视化
  17. 【安装教程】——widows_pycharm远程连接Linux服务器
  18. 实现编辑网页document.body.contentEditable
  19. 黑客丛林之旅通关攻略(共14关)
  20. JAVA实现:居民电费阶梯式计价器

热门文章

  1. php输出世界时转北京时,php中把美国时间转为北京时间的自定义函数分享
  2. 使用VCS 仿真后,通过DVE 观察波形,多维数据显示not load问题及解决方案
  3. Merge碰到ORA-30926 无法在源表中获得一组稳定的行
  4. 联想Y400 拆光驱加装固态硬盘
  5. php中表格标记是,HTML标记语言——表格标记_HTML/Xhtml_网页制作
  6. commit节点号 git_Git调整commit之间顺序
  7. cursor: not-allowed; readonly的升级版,鼠标经过时,显示为禁止图标
  8. 2022年江西省建筑三类人员(企业主要负责人A证)练习题及答案
  9. 【你觉得这些技术值多少钱?】
  10. 数学与计算机学院校友会,忆青春成长路 话数计奋斗情——数学与计算机学院校友会...