apiVersion: apps/v1 # 指定api版本,此值必须在kubectl api-versions中
kind: Deployment # 指定创建资源的角色/类型
metadata: # 资源的元数据/属性
name: demo # 资源的名字,在同一个namespace中必须唯一
namespace: default # 部署在哪个namespace中
labels: # 设定资源的标签
app: demo
version: stable
spec: # 资源规范字段
replicas: 1 # 声明副本数目
revisionHistoryLimit: 3 # 保留历史版本
selector: # 选择器
matchLabels: # 匹配标签
app: demo
version: stable
strategy: # 策略
rollingUpdate: # 滚动更新
maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数
maxUnavailable: 30% # 示在更新过程中能够进入不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
type: RollingUpdate # 滚动更新策略
template: # 模版
metadata: # 资源的元数据/属性
annotations: # 自定义注解列表
sidecar.istio.io/inject: "false" # 自定义注解名字
labels: # 设定资源的标签
app: demo
version: stable
spec: # 资源规范字段
containers:
- name: demo # 容器的名字
image: demo:latest # 容器使用的镜像地址
imagePullPolicy: IfNotPresent # 每次Pod启动拉取镜像策略,三个选择 Always、Never、IfNotPresent
# Always,每次都检查;Never,每次都不检查(不管本地是否有);IfNotPresent,如果本地有就不检查,如果没有就拉取
resources: # 资源管理
limits: # 最大使用
cpu: 1000m # CPU,1核心 = 1000m
memory: 1024Mi # 内存,1G = 1024Mi
requests: # 容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
cpu: 500m
memory: 512Mi
#探针的配置,可选的开启
#livenessProbe: # pod 内部健康检查的设置
#httpGet: # 通过httpget检查健康,返回200-399之间,则认为容器正常
#path: /healthCheck # URI地址
#port: 8090 # 端口
#scheme: HTTP # 协议
# host: 127.0.0.1 # 主机地址
#initialDelaySeconds: 30 # 表明第一次检测在容器启动后多长时间后开始
#timeoutSeconds: 5 # 检测的超时时间
#periodSeconds: 30 # 检查间隔时间
#successThreshold: 1 # 成功门槛
#failureThreshold: 5 # 失败门槛,连接失败5次,pod杀掉,重启一个新的pod
#探针的配置,可选的开启
#readinessProbe: # Pod 准备服务健康检查设置
#httpGet:
#path: /healthCheck
#port: 8090
#scheme: HTTP
#initialDelaySeconds: 30
#timeoutSeconds: 5
#periodSeconds: 10
#successThreshold: 1
#failureThreshold: 5
#也可以用这种方法
#exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常
# command:
# - cat
# - /tmp/health
#也可以用这种方法
#tcpSocket: # 通过tcpSocket检查健康
# port: number
ports:
- name: demo # 名称
containerPort: 8090 # 容器开发对外的端口
protocol: TCP # 协议
imagePullSecrets: # 镜像仓库拉取密钥
- name: harbor-certification
affinity: # 亲和性调试
nodeAffinity: # 节点亲和力
requiredDuringSchedulingIgnoredDuringExecution: # pod 必须部署到满足条件的节点上
nodeSelectorTerms: # 节点满足任何一个条件就可以
- matchExpressions: # 有多个选项,则只有同时满足这些逻辑选项的节点才能运行 pod
- key: kubernetes.io/arch
operator: In
values:
- amd64
---
apiVersion: v1 # 指定api版本,此值必须在kubectl api-versions中
kind: Service # 指定创建资源的角色/类型
metadata: # 资源的元数据/属性
name: demo-service # 资源的名字,在同一个namespace中必须唯一
namespace: default # 部署在哪个namespace中
labels: # 设定资源的标签
app: demo-service
spec: # 资源规范字段
type: ClusterIP # ClusterIP 类型
ports:
- port: 8090 # service 端口
targetPort: 8090 # 容器暴露的端口
protocol: TCP # 协议
name: http # 端口名称
selector: # 选择器
app: demo
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/affinity-mode: "persistent"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
name: demo-ingress
namespace: dev
spec:
defaultBackend:
service:
name: demo-ingress
port:
number: 80
ingressClassName: nginx
rules:
- host: demo.lovely.ingress
http:
paths:
- pathType: Prefix
path: "/gin(/|$)(.*)"
backend:
service:
name: demo-service
port:
number: 8090
path: "/test(/|$)(.*)"
backend:
service:
name: demo1-service
port:
number: 8091
- host: "demo2.k8s.com"
http:
paths:
- pathType: Prefix
path: "/nginx(/|$)(.*)"
backend:
service:
name: svc-nginx
port:
number: 8000