#定义ingress
apiVersion: extensions/v1beta1 #版本号,1.6版本时放在这个版本中,最后到app/v1中统一管理
kind: Ingress #构建ingress
metadata: #元数据
name: APPNAME-ing #对应ci脚本的项目名,流水线中被CONTAINER_NAME替换APPNAME
namespace: prod #项目所在的命名空间
labels: #打个标签
ing: APPNAME-ing
annotations: #注释
kubernetes.io/ingress.class: "nginx" #说明接下来用到的ingress controller是nginx,转换成controller对应的语句和规则。kubernetes.io前缀,ingress.class键名,对应值nginx。
spec: #ingress的详细定义
rules: #定义转发规则
- host: DOMAIN.allhome.com.cn #项目的虚拟主机名,DOMAIN会被CI流水线替换为项目域名
http: #指向后端的http选择器列表
paths: #将请求映射到后端的路径集合,下面可以用- path定义路径,不定义则默认根目录
- backend: #定义后端项目的具体信息
serviceName: APPNAME-svc #因为我们的service没有ClusterIP,而是直接调用servicename
servicePort: CONPORT #service暴露的端口
tls: #证书信息
- secretName: allhome-tls #证书信息的文件名
#定义service
---
apiVersion: v1 #固定写法
kind: Service #定义一个service
metadata: #元数据
name: APPNAME-svc #service名,同样,APPNAME会被CI流水线替换为项目的pod名称。
namespace: prod #所在命名空间
labels: #打个标签
svc: APPNAME-svc
spec: #service详细定义
clusterIP: None #因为ingress用过serviceName寻找对应的service,没设置clusterIP,
ports: #此服务公开的端口列表
- name: http #起个名字,没啥用
port: CONPORT #service对外提供服务的端口;
protocol: TCP #用什么协议,TCP/UDP ,默认TCP
selector: #标签选择器,对应下面的 matchLabels,让pod和service发生关系
app: APPNAME
type: ClusterIP #service类型为ClusterIP,集群内部通信的虚拟IP(另外两个NodePort和LoadBalancer)
#定义deployment
---
apiVersion: extensions/v1beta1 #版本号
kind: Deployment #创建一个Deployment控制器
metadata: #元数据
name: APPNAME #项目名,会被CI流水线的CONTAINER_NAME替换
namespace: prod #所在命名空间
labels: #给Deployment打个标签
deploy: APPNAME
spec: #deployment控制器的详细定义
replicas: 1 #pod数量,1个
strategy: #项目更新策略
type: RollingUpdate #滚动升级
rollingUpdate:
maxSurge: 1 #滚动升级时启动的新pod数量为1
maxUnavailable: 0 #杀死的旧pod数量为0
selector: #标签选择器,用来和containers、services等发生关系
matchLabels:
app: APPNAME
template: #模板,描述将要创建的pod
metadata: #pod元数据
name: APPNAME #pod名,同样会被替换为CI的
namespace: prod #所在命名空间
labels: #标签选择器,对应上面的matchLabels
app: APPNAME
spec: #pod的详细定义
imagePullSecrets: #pull镜像时使用的secret名称,以key:secretkey格式指定
- name: regsecret
containers: #pod中容器列表
- name: APPNAME #容器名称
image: registry-vpc.cn-beijing.aliyuncs.com/NAMESPACE/APPNAME:TAG #容器镜像的名称
imagePullPolicy: Always #获取镜像的策略,Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
env: #容器运行前需要设置的环境变量列表。
- name: SPRING_PROFILES_ACTIVE #项目中规定使用哪种环境
value: prod #prod分支
- name: eureka.client.service-url.defaultZone #配置中心里关于eureka的配置
valueFrom:
configMapKeyRef: #configmap资源,在-prod命名空间的kubectl get cm查询相关信息
name: eureka-cm #configmap资源名为eureka-cm
key: eureka_service_address #键名为eureka_service_address,对应的value在cm资源配置中,设置了eureka的地址
- name: AGENT_SERVICE_NAME #容器名,在部署脚本中有对应的变量
value: APPNAME #会被流水线替换为对应的容器名
- name: COLLECTOR_BACKEND_SERVICE #给变量起个名
valueFrom:
configMapKeyRef: #configmap资源
name: sky-cm #configmap资源名为 sky-cm
key: sky_service_address #键名为sky_service_address,对应的链路追踪服务
ports: #需要暴露的端口号列表
- name: http #端口号名称
containerPort: CONPORT #容器需要监听的端口号
- name: rpc
containerPort: RPCPORT
readinessProbe: #就绪探针,来探测容器是否已经就绪可以接受流量
successThreshold: 1 #探测失败后,最少连续探测成功多少次才被认定为成功,默认是1,对于liveness必须是1,最小值是1。
failureThreshold: 3 #探测成功后,最少连续探测失败多少次才被认定为失败。默认是3。最小值是1.
httpGet: #基于HTTP的探针,向目标容器发送一个HTTP请求,根据其响应码进行结果判定
port: http #要在容器上访问的端口名称
path: /actuator #请求的HTTP资源路径
scheme: HTTP #建立连接使用的协议
initialDelaySeconds: 30 #启动后延时30秒开始探测
periodSeconds: 10 #10秒探测一次
timeoutSeconds: 5 #超时5秒则认为探测失败
livenessProbe: #存活探针,用于判断容器是否存活。
failureThreshold: 3 #探测成功后,最少连续探测失败多少次才被为失败,默认3,最小是1
successThreshold: 1 #探测失败后,最少连续探测成功多少次才被认定为成功,默认是1,对于liveness必须是1,最小值是1。
httpGet: ##基于HTTP的探针,向目标容器发送一个HTTP请求,根据其响应码进行结果判定
port: http #要在容器上访问的端口名称
path: /actuator #请求的HTTP资源路径
scheme: HTTP #建立连接使用的协议
initialDelaySeconds: 30 #容器启动后延时30秒开始探测
periodSeconds: 10 #每10秒探测一次
timeoutSeconds: 5 #超时5秒则认为探测失败
resources: #资源限制和请求设置
requests: #资源请求设置
cpu: "100m" #CPU请求,100m表示0.1核
memory: "512Mi" #内存请求,512M,
limits: #资源限制的设置
cpu: "2000m" #CPU限制2核
memory: "4096Mi" #内存限制2G
【学习笔记】deployment加备注
最新推荐文章于 2024-04-29 19:12:57 发布