k8s应用部署(自己的应用)

一、yaml文件内容解析

--- #这个---代表的通常是一个资源(pod或者配置)
apiVersion: apps/v1
kind: Deployment #部署类型
metadata:
  name: test
  namespace: default # 部署的命名空间
  labels:
    app: test
spec:  
  replicas: 1 # 启动1个pod实列
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      imagePullSecrets:
      - name: tencent-docker-secret # 镜像拉取密钥
      restartPolicy: Always # 当pod出现故障的策略,重启策略 always:总是重启,nerver:容器退出从不重启,onfailure:当容器异常退出时重启
      hostAliases: # 功能与hosts文件映射一样
        - ip: "127.0.0.1"
          hostnames:
            - "hello.google.com"
      dnsPolicy: Default
      containers: # 容器的信息
        - name: test # 容器的名称
          image: ccr.ccs.tencentyun.com/zflzqy/test:latest # 容器的镜像地址
          imagePullPolicy: Always # 镜像拉取策略
          ports:
            - containerPort: 8080 #容器的端口
          readinessProbe: #就绪策略,通常用于让k8s集群判断该pod是否正常启动了
            httpGet: #http检查策略
              port: 8080
              path: /
            initialDelaySeconds: 60 # 在容器部署多少秒之后执行检查策略
            periodSeconds: 30 #  每次容器就绪检测间隔,默认3
            successThreshold: 1 # 检测失败后,再次连续成功多少次视为成功,默认1
            failureThreshold: 10 # 允许失败次数,
          livenessProbe: # 配置与就绪一样,不过这里代表的是容器是否存活(容器是否正常)
            httpGet:
              path: /
              port: 8080
            initialDelaySeconds: 60
            periodSeconds: 20
          resources: # 容器资源限制
            limits:
              cpu: 1 # cpu 最大1个
              memory: 400Mi # 内存限制策略最大
            requests:
              memory: 100Mi
              cpu: 0.5 # 请求0.5个,一般这个要比最大小
          volumeMounts:
          - mountPath: /config  #容器内部目录
            name: config          #与下边的名字一致
          - mountPath: /logs  #容器内部目录
            name: log          #与下边的名字一致
      volumes:
      - name: config             #卷名称
        nfs:                        #使用NFS网络存储卷
          server: 10.0.4.11    #NFS服务器地址
          path: /opt/project/nfs/test/config         #NFS服务器共享的目录
          readOnly: true          #是否为只读
      - name: log             #卷名称
        nfs:                        #使用NFS网络存储卷
          server: 10.0.4.11    #NFS服务器地址
          path: /opt/project/nfs/test/logs         #NFS服务器共享的目录
          readOnly: false          #是否为只读
---
apiVersion: v1
kind: Service # 这里代表的是一个service,通常一个service下会有多个pod
metadata:
  name: test-service # service的名字
spec:
  selector:
    app: test # 选择的pod的名称
  ports:
    - protocol: TCP
      port: 8080 # pod端口
      targetPort: 8080 # service端口
      # nodePort: 30081  # 绑定节点的端口
---
apiVersion: networking.k8s.io/v1 # nginx负载均衡,用于对service的负载均衡,可以根据域名或后缀将流量转发到不同的service上,
kind: Ingress
metadata:
  name: ingress-test-service
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  tls: # https的证书配置,需要配合k8s命令中的证书导入
    - hosts:
        - test.zflzqy.cn
      secretName: test-zflzqy-cn-tls
  rules:
  - host: test.zflzqy.cn #当访问的域名是这个的时候,讲流量转发到下边的services
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: test-service
            port:
              number: 8080
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler # hpa动态伸缩
metadata:
  name: test
spec:
  scaleTargetRef: # 指定选择的容器
    apiVersion: apps/v1
    kind: Deployment # 容器部署形式
    name: test # 部署的名称
  minReplicas: 1 # 最小多少个pod,kind: Deployment的metadata的name属性
  maxReplicas: 10 # 最大多少个pod
  targetCPUUtilizationPercentage: 80 # 机器cpu占用到多少百分比进行扩容

1.2、使用裸ip进行访问配置:

---
apiVersion: networking.k8s.io/v1 # nginx负载均衡,用于对service的负载均衡,可以根据域名或后缀将流量转发到不同的service上,
kind: Ingress
metadata:
  name: ingress-test-service
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  #tls: # https的证书配置,需要配合k8s命令中的证书导入
  #  - hosts:
  #      - test.zflzqy.cn
  #    secretName: test-zflzqy-cn-tls
  rules:
  #- host: test.zflzqy.cn #当访问的域名是这个的时候,讲流量转发到下边的services
   - http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: test-service
            port:
              number: 8080

1.3、前缀重定向(移除匹配的前缀)
下边的例子当使用ip/aa这样进行访问的时候就会定向test-service服务,并且移除aa前缀,这样我们的项目就不需要加后缀

---
apiVersion: networking.k8s.io/v1 # nginx负载均衡,用于对service的负载均衡,可以根据域名或后缀将流量转发到不同的service上,
kind: Ingress
metadata:
  name: ingress-test-service
  annotations:
    kubernetes.io/ingress.class: "nginx"
    inginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  #tls: # https的证书配置,需要配合k8s命令中的证书导入
  #  - hosts:
  #      - test.zflzqy.cn
  #    secretName: test-zflzqy-cn-tls
  rules:
  #- host: test.zflzqy.cn #当访问的域名是这个的时候,讲流量转发到下边的services
   - http:
      paths:
      - pathType: Prefix
        path: /aa
        backend:
          service:
            name: test-service
            port:
              number: 8080

二、应用访问
2.1、在java应用中如何让k8s中启动的应用与jar启动的应用进行通信(通常为了解决nacos这种注册中心下的远程过程服务调用的网络问题)

---
apiVersion: v1
kind: Service # 这里代表的是一个service,通常一个service下会有多个pod
metadata:
  name: test-service # service的名字
spec:
  selector:
    app: test # 选择的pod的名称
  ports:
    - protocol: TCP
      port: 8080 # pod端口
      targetPort: 8080 # service端口
      # nodePort: 30081  # 绑定节点的端口

使用nodePort暴露服务的端口,在注册到nacos的时候ip填写集群内任意节点的ip,端口为当前nodePort的值。这样其他以jar形式部署的应用就可以通过服务暴露的ip进行访问pod
2.2、集群内机器可以通过k8s提供的dns服务进行相互通信 ..svc.cluster.local:8080这种形式做到访问,其中 serviceNamed的值为Kind等于Service配置中的name属性,namespace是容器运行在k8s空间的名称,svc.cluster.local是固定后缀,targetPort 是容器的名称或者容器的端口。port为服务暴漏的端口。
在这里插入图片描述

注:Ingres是七层代理,Service是4层代理
2.3、dnsPolicy策略说明

说明
Default默认策略,Pod 从运行所在的节点继承名称解析配置
ClusterFirst与配置的集群域后缀不匹配的任何 DNS 查询(例如 “www.kubernetes.io”) 都会由 DNS 服务器转发到上游名称服务器。集群管理员可能配置了额外的存根域和上游 DNS 服务器
ClusterFirstWithHostNet对于以 hostNetwork 方式运行的 Pod,应将其 DNS 策略显式设置为 “ClusterFirstWithHostNet”。否则,以 hostNetwork 方式和 “ClusterFirst” 策略运行的 Pod 将会做出回退至 “Default” 策略的行为
None此设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置

2.4、ingress配置前缀去除,以下代码在应用重定向到pod时候不会携带appServer

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-im-app-server-service
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/proxy-body-size: 6000m
    # URL重定向。
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  tls:
    - hosts:
        - zflzqy.cn
      secretName: zflzqy-cn-tls
  rules:
  - host: zflzqy.cn
    http:
      paths:
      - pathType: Prefix
        path: /appServer(/|$)(.*)
        backend:
          service:
            name: zflzqy-server-service
            port:
              number: 8888```

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值