apiVersion: apps/v1 # api版本声明:1、extensions/v1beta1 是用于kubernetes版本在1.6之前 2、apps/v1beta1 是用于1.6-1.9版本之间 3、apps/v1 是1.9版本以后使用。目前使用的Kubernetes版本: v1.17.4。kind: Deployment # 指定创建资源的类型metadata: # 资源的元数据/属性 name: nginx-deployment # 资源名称,在同一个namespace中唯一 namespace: demo # 指定namespacespec: # 资源规格定义 revisionHistoryLimit: 10 # 保存最近的10个历史版本 replicas: 1 # 指定pod副本数量 strategy: # 滚动升级策略 type: RollingUpdate # 滚动更新。策略:重建(recreate):停止旧版本部署新版本;滚动更新(rolling-update):一个接一个地以滚动更新方式发布新版本;蓝绿(blue/green):新版本与旧版本一起存在,然后切换流量;金丝雀(canary):将新版本面向一部分用户发布,然后继续全量发布 rollingUpdate: maxSurge: 1 # 一次可以添加多少个Pod maxUnavailable: 0 # 滚动更新期间最大多少个Pod不可用 selector: # 定义标签选择器 matchLabels: # 标签匹配 app: nginx-server # 这里选择需要管理的pod的标签名 template: # pod模版定义 metadata: # 资源的元数据/属性 labels: # 定义pod标签 app: nginx-server # pod标签名(自定义) spec: # 指定该资源的内容 restartPolicy: Always # 容器重启策略。只要退出就重启(Always),失败退出(exit code不等于0)时重启(OnFailure),只要退出就不再重启(Never) imagePullSecrets: # 私有仓库镜像密钥 - name: registry-secret # 密钥名称,需提前创建好 nodeSelector: # 节点标签选择器 disktype: "ssd" # 分配Pod到具有SSD硬盘的节点,需提前给节点打上标签kubectl label nodes node1 disktype=ssd containers: # 定义一个容器 - name: nginx-container # 容器名称 image: nginx:1.22.0 # 镜像名称 imagePullPolicy: IfNotPresent # 镜像拉取策略。 不管镜像是否存在都会进行一次拉取。(Always),只有镜像不存在时,才会进行镜像拉取。(IfNotPresent),只使用本地镜像,从不拉取(Never) ports: # 端口定义 - name: nginx-port # 端口名称 containerPort: 80 # 容器对外暴露的端口 protocol: TCP # 端口通讯协议 resources: # 容器资源管理 requests: # 容器的请求资源 memory: "256Mi" # 请求内存资源:2G cpu: "0.1" # 请求CPU资源:1v limits: # 容器的限制资源 memory: "512Mi" # 容器的限制内存:4G cpu: "1" # 容器的限制CPU:2v volumeMounts: # 挂载数据卷 - name: nginx-cm mountPath: /etc/nginx/nginx.conf subPath: nginx.conf startupProbe: # 启动探针,根据规则检测容器内程序启动情况,启动探针结束后,其他探针才会开始工作。 httpGet: # HTTP探测。向指定路径发送http请求,返回值为200-400之间则为测试通过。 path: /index.html # HTTP的探测路径。 port: 80 # HTTP请求的端口。 initialDelaySeconds: 5 # 在执行第一次探测前应该等待5秒。 failureThreshold: 10 # 最少连续探测失败多少次才被认定为失败,即重试探测次数。默认是3。最小值是1。 periodSeconds: 5 # 探测失败后,进行下一次探测等待的时间。 readinessProbe: # 就绪探针。用于判断容器是否启动完成(ready状态) httpGet: # HTTP探测。向指定路径发送http请求,返回值为200-400之间则为测试通过。 path: /index.html # HTTP的探测路径。 port: 80 # HTTP请求的端口。 failureThreshold: 3 # 最少连续探测失败多少次才被认定为失败,即重试探测次数。默认是3。最小值是1。 periodSeconds: 5 # 探测失败后,进行下一次探测等待的时间。 livenessProbe: # 存活探针。用于判断容器是否存活(running状态),则kubelet杀掉该容器,并根据容器的重启策略做相应的处理。 httpGet: # HTTP探测。向指定路径发送http请求,返回值为200-400之间则为测试通过。 path: /index.html # HTTP的探测路径。 port: 80 # HTTP请求的端口。 failureThreshold: 1 # 最少连续探测失败多少次才被认定为失败,即重试探测次数。默认是3。最小值是1。 periodSeconds: 10 # 探测失败后,进行下一次探测等待的时间。 lifecycle: # Pod 生命周期控制,有postStart、PreStop两个函数 preStop: # 在容器被终止前执行的任务 exec: # 在容器内执行命令 command: ["/bin/bash", "-c", "sleep 40"] # 沉睡40秒命令 volumes: # 创建数据卷 - name: nginx-cm # 数据卷名称 configMap: # 从confimap读取数据 name: nginx-configmap # configmap名称,需提前创建 items: - key: nginx_conf path: nginx.conf---apiVersion: v1 # api版本声明kind: Service # 指定创建资源的类型metadata: # 资源的元数据/属性 name: nginx-service # service名称 namespace: demo # service的命名空间 labels: # 定义标签 name: nginx-service # service的标签名称spec: # 资源规格定义 type: NodePort # 类型是NodePort。Service有四种type: ClusterIP(默认)、NodePort、LoadBalancer、ExternalName. 其中NodePort和LoadBalancer两类型的Services可以对外提供服务。 selector: # 定义标签选择器 app: nginx-server # 这里选择需要管理的pod的标签名 ports: # 端口定义 - protocol: TCP # 端口通讯协议 port: 8081 # 集群内部通讯端口(自定义) targetPort: 80 # 容器对外暴露的端口,即containerPort nodePort: 32334 # 所有的节点都会开放此端口,此端口供外部调用---apiVersion: networking.k8s.io/v1 # api版本声明kind: Ingress # 指定创建资源的类型metadata: # 资源的元数据/属性 name: nginx-ingress # ingress名称 namespace: demo # ingress的命名空间spec: # 资源规格定义 ingressClassName: nginx # IngressClass名称 rules: # 路由规则 - host: demo.lechuang.com # 域名,填写IP无效 http: # 类型,目前只支持http/tls paths: # 路由路径 - backend: # 代理的后端配置 service: name: nginx-service # Service的名称 port: number: 8081 # Service的端口,非nodePort端口 path: / pathType: ImplementationSpecific tls: # tls配置 - hosts: - demo.lechuang.com secretName: lechuang-com-tls-secret