一、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服务进行相互通信
注: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 设置|