首页 > 其他分享 >k8s部署微服务项目

k8s部署微服务项目

时间:2023-02-05 22:33:07浏览次数:65  
标签:name 部署 app 服务项目 nginx Pod k8s gateway

原文网址:https://blog.csdn.net/Erica_java/article/details/128041969

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

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

kubectl get nodes
1


访问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-full

MAINTAINER levi

EXPOSE 38080

ARG JAR_FILE=target/k8s-gateway.jar

COPY $JAR_FILE app.jar

ENV 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: test
name: gateway-dp
labels:
app: gateway-dp
spec:
replicas: 3
selector:
matchLabels:
app: gateway-dp
template:
metadata:
labels:
app: gateway-dp
spec:
containers:
- name: gateway
image: 192.168.3.152/test/k8s-gateway:1.0.0

---
#暴露service
apiVersion: v1
kind: Service
metadata:
namespace: test
name: gateway-dp #service的名称
labels:
app: gateway-dp #标签
spec:
selector:
app: gateway-dp #选择的deploy
ports:
- nodePort: 30008 #配置可以外网访问的端口
port: 38080 #集群内访问的端口
protocol: TCP
targetPort: 38080 #pod容器内的端口
type: NodePort

order.yml

apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: order-dp
labels:
app: order #为该Deployment设置key为app,value为order的标签
spec:
replicas: 2 #指定集群数,即pod的数量
selector: #标签选择器,与上面的标签共同作用
matchLabels: #选择包含标签app:order的资源
app: order
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:order的Pod
app: order
spec: #期望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: test
name: product-dp
labels:
app: product #为该Deployment设置key为app,value为product的标签
spec:
replicas: 2 #指定集群数,即pod的数量
selector: #标签选择器,与上面的标签共同作用
matchLabels: #选择包含标签app:product的资源
app: product
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:product的Pod
app: product
spec: #期望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-dp
namespace: test
spec:
replicas: 2 #副本数量
selector: #标签选择器,与上面的标签共同作用
matchLabels: #选择包含标签app:nginx的资源
app: nginx
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
app: nginx
spec: #期望Pod实现的功能(即在pod中部署)
containers: #生成container,与docker中的container是同一种
- name: k8s-nginx
image: 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: test
name: k8s-nginx-dp
labels:
app: k8s-nginx-dp
spec:
selector:
app: nginx
ports:
- nodePort: 30010 #配置可以外网访问的端口
port: 8888 #集群内访问的端口
protocol: TCP
targetPort: 80 #pod容器内的端口
type: NodePort
---
#创建ingress
apiVersion: networking.k8s.io/v1 #固定写法
kind: Ingress
metadata:
namespace: test
name: nginx-ingress #ingress的名称
spec:
ingressClassName: ingress #kuboard上配置的ingress的名称,这个要先在kuboard上配置好
rules:
- host: levi.nginx.com #自己配置的域名
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: k8s-nginx-dp #上面service上配置的name
port:
number: 8888 #上面配置的port

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

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

查看容器组


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

使用apifox访问

————————————————
版权声明:本文为CSDN博主「Erica_java」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Erica_java/article/details/128041969

标签:name,部署,app,服务项目,nginx,Pod,k8s,gateway
From: https://www.cnblogs.com/bruce1992/p/17094108.html

相关文章

  • DaemonSet方式部署nginx-ingress
    前言nginx-ingress是k8s官方维护的一个IngressController,具体使用,官方有详细的文档:https://kubernetes.github.io/ingress-nginx/deploy/直接按照官方文档进行安装,一般......
  • K8S集群安装
    1、环境准备1.1、机器环境节点CPU核数必须是:>=2核/内存要求必须是:>=2G,否则k8s无法启动DNS网络:最好设置为本地网络连通的DNS,否则网络不通,无法下载一些镜像......
  • aws云上部署vue代码+nodeJS跨域配置
    大致需求客户想要构建一个新的客户站点,前端通过Https来访问VUE界面,然后VUE跨域Https访问后端的接口服务,通过NodeJS来提供后台服务。假定是全新的服务,本文从域名申请配置、CD......
  • Linux部署-Net并配置进程守护
    Linux部署-Net并配置进程守护注册Microsoft签名密钥并添加Microsoft产品提要sudorpm--importhttps://packages.microsoft.com/keys/microsoft.ascsudosh-c'e......
  • Linux部署-Net并配置进程守护
    Linux部署-Net并配置进程守护注册Microsoft签名密钥并添加Microsoft产品提要sudorpm--importhttps://packages.microsoft.com/keys/microsoft.ascsudosh-c'e......
  • Linux部署-Net并配置进程守护
    Linux部署-Net并配置进程守护注册Microsoft签名密钥并添加Microsoft产品提要sudorpm--importhttps://packages.microsoft.com/keys/microsoft.ascsudosh-c'e......
  • 012k8s_Prometheus常见监控指标解析
    一、jvm进程cpu利用率优化#HELPprocess_cpu_usageThe"recentcpuusage"fortheJavaVirtualMachineprocess#TYPEprocess_cpu_usagegaugeprocess_cpu_usage......
  • Docker-harbor私有仓库的部署与管理
    一、Harbor简介1.1、什么是HarborHarbor是VMware公司开源的企业级DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的DockerRegistry(私有仓库)服务。......
  • 1、系统部署:开篇 - 系统部署系列文章
          今天在BOSS直聘上应聘,看到一个关于技术支持的岗位,看了下要求,里面对系统部署需要有经验,所以笔者就写了此系列的博文。      以前在学习者系列的博文中......
  • IDEA 2022 开启热部署
    POM.XML<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optiona......