一、yaml文件内容解析
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占用到多少百分比进行扩容

二、应用访问
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为服务暴漏的端口。
4750fd35e0e9e5ce649cb064974e2c54.svg
注: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 设置|