1. 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。
    2. kind: Deployment # 指定创建资源的类型
    3. metadata: # 资源的元数据/属性
    4. name: nginx-deployment # 资源名称,在同一个namespace中唯一
    5. namespace: demo # 指定namespace
    6. spec: # 资源规格定义
    7. revisionHistoryLimit: 10 # 保存最近的10个历史版本
    8. replicas: 1 # 指定pod副本数量
    9. strategy: # 滚动升级策略
    10. type: RollingUpdate # 滚动更新。策略:重建(recreate):停止旧版本部署新版本;滚动更新(rolling-update):一个接一个地以滚动更新方式发布新版本;蓝绿(blue/green):新版本与旧版本一起存在,然后切换流量;金丝雀(canary):将新版本面向一部分用户发布,然后继续全量发布
    11. rollingUpdate:
    12. maxSurge: 1 # 一次可以添加多少个Pod
    13. maxUnavailable: 0 # 滚动更新期间最大多少个Pod不可用
    14. selector: # 定义标签选择器
    15. matchLabels: # 标签匹配
    16. app: nginx-server # 这里选择需要管理的pod的标签名
    17. template: # pod模版定义
    18. metadata: # 资源的元数据/属性
    19. labels: # 定义pod标签
    20. app: nginx-server # pod标签名(自定义)
    21. spec: # 指定该资源的内容
    22. restartPolicy: Always # 容器重启策略。只要退出就重启(Always),失败退出(exit code不等于0)时重启(OnFailure),只要退出就不再重启(Never)
    23. imagePullSecrets: # 私有仓库镜像密钥
    24. - name: registry-secret # 密钥名称,需提前创建好
    25. nodeSelector: # 节点标签选择器
    26. disktype: "ssd" # 分配Pod到具有SSD硬盘的节点,需提前给节点打上标签kubectl label nodes node1 disktype=ssd
    27. containers: # 定义一个容器
    28. - name: nginx-container # 容器名称
    29. image: nginx:1.22.0 # 镜像名称
    30. imagePullPolicy: IfNotPresent # 镜像拉取策略。 不管镜像是否存在都会进行一次拉取。(Always),只有镜像不存在时,才会进行镜像拉取。(IfNotPresent),只使用本地镜像,从不拉取(Never)
    31. ports: # 端口定义
    32. - name: nginx-port # 端口名称
    33. containerPort: 80 # 容器对外暴露的端口
    34. protocol: TCP # 端口通讯协议
    35. resources: # 容器资源管理
    36. requests: # 容器的请求资源
    37. memory: "256Mi" # 请求内存资源:2G
    38. cpu: "0.1" # 请求CPU资源:1v
    39. limits: # 容器的限制资源
    40. memory: "512Mi" # 容器的限制内存:4G
    41. cpu: "1" # 容器的限制CPU:2v
    42. volumeMounts: # 挂载数据卷
    43. - name: nginx-cm
    44. mountPath: /etc/nginx/nginx.conf
    45. subPath: nginx.conf
    46. startupProbe: # 启动探针,根据规则检测容器内程序启动情况,启动探针结束后,其他探针才会开始工作。
    47. httpGet: # HTTP探测。向指定路径发送http请求,返回值为200-400之间则为测试通过。
    48. path: /index.html # HTTP的探测路径。
    49. port: 80 # HTTP请求的端口。
    50. initialDelaySeconds: 5 # 在执行第一次探测前应该等待5秒。
    51. failureThreshold: 10 # 最少连续探测失败多少次才被认定为失败,即重试探测次数。默认是3。最小值是1。
    52. periodSeconds: 5 # 探测失败后,进行下一次探测等待的时间。
    53. readinessProbe: # 就绪探针。用于判断容器是否启动完成(ready状态)
    54. httpGet: # HTTP探测。向指定路径发送http请求,返回值为200-400之间则为测试通过。
    55. path: /index.html # HTTP的探测路径。
    56. port: 80 # HTTP请求的端口。
    57. failureThreshold: 3 # 最少连续探测失败多少次才被认定为失败,即重试探测次数。默认是3。最小值是1。
    58. periodSeconds: 5 # 探测失败后,进行下一次探测等待的时间。
    59. livenessProbe: # 存活探针。用于判断容器是否存活(running状态),则kubelet杀掉该容器,并根据容器的重启策略做相应的处理。
    60. httpGet: # HTTP探测。向指定路径发送http请求,返回值为200-400之间则为测试通过。
    61. path: /index.html # HTTP的探测路径。
    62. port: 80 # HTTP请求的端口。
    63. failureThreshold: 1 # 最少连续探测失败多少次才被认定为失败,即重试探测次数。默认是3。最小值是1。
    64. periodSeconds: 10 # 探测失败后,进行下一次探测等待的时间。
    65. lifecycle: # Pod 生命周期控制,有postStart、PreStop两个函数
    66. preStop: # 在容器被终止前执行的任务
    67. exec: # 在容器内执行命令
    68. command: ["/bin/bash", "-c", "sleep 40"] # 沉睡40秒命令
    69. volumes: # 创建数据卷
    70. - name: nginx-cm # 数据卷名称
    71. configMap: # 从confimap读取数据
    72. name: nginx-configmap # configmap名称,需提前创建
    73. items:
    74. - key: nginx_conf
    75. path: nginx.conf
    76. ---
    77. apiVersion: v1 # api版本声明
    78. kind: Service # 指定创建资源的类型
    79. metadata: # 资源的元数据/属性
    80. name: nginx-service # service名称
    81. namespace: demo # service的命名空间
    82. labels: # 定义标签
    83. name: nginx-service # service的标签名称
    84. spec: # 资源规格定义
    85. type: NodePort # 类型是NodePort。Service有四种type: ClusterIP(默认)、NodePort、LoadBalancer、ExternalName. 其中NodePort和LoadBalancer两类型的Services可以对外提供服务。
    86. selector: # 定义标签选择器
    87. app: nginx-server # 这里选择需要管理的pod的标签名
    88. ports: # 端口定义
    89. - protocol: TCP # 端口通讯协议
    90. port: 8081 # 集群内部通讯端口(自定义)
    91. targetPort: 80 # 容器对外暴露的端口,即containerPort
    92. nodePort: 32334 # 所有的节点都会开放此端口,此端口供外部调用
    93. ---
    94. apiVersion: networking.k8s.io/v1 # api版本声明
    95. kind: Ingress # 指定创建资源的类型
    96. metadata: # 资源的元数据/属性
    97. name: nginx-ingress # ingress名称
    98. namespace: demo # ingress的命名空间
    99. spec: # 资源规格定义
    100. ingressClassName: nginx # IngressClass名称
    101. rules: # 路由规则
    102. - host: demo.lechuang.com # 域名,填写IP无效
    103. http: # 类型,目前只支持http/tls
    104. paths: # 路由路径
    105. - backend: # 代理的后端配置
    106. service:
    107. name: nginx-service # Service的名称
    108. port:
    109. number: 8081 # Service的端口,非nodePort端口
    110. path: /
    111. pathType: ImplementationSpecific
    112. tls: # tls配置
    113. - hosts:
    114. - demo.lechuang.com
    115. secretName: lechuang-com-tls-secret