k8s部署微服务项目

1 篇文章 0 订阅
1 篇文章 0 订阅

之前用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-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访问
在这里插入图片描述

  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值