需求:
在搭建好k8s 后搭建对应的服务
在搭建服务之前需要对每个模板有一个基本的认知不然搭起来感觉莫名其妙的
进程:
初始搭建服务最基础的单位是pod
pod 就相当于是 Docker 的一个容器,可以认为这是一个微服务比如:mysql,redis 等
daemonSet 是pod 上的一个守护进程,正常流程下我们可以忽略这个东西都存在,因为他是自动的,但如果你要进行日志收集等行为,可以通过这个来实现
pod 可以通过 Deployment 直接创建,也可以通过 Service 来创建,Deployment 和 Service有不一样的权能
Deployment 可以进行弹性伸缩,动态部署服务,回滚等服务
kind: Deployment
apiVersion: apps/v1
metadata:name: JavaApp #selector 关联的lable
spec: #pod 相关的配置replicas: 1 #pod 的个数selector:matchLabels:test: JavaApp #查找pod 匹配的标签template: #pod 的模板信息metadata:labels:test: JavaApp #pod 的标签要和上面保持一致spec: #容器信息strategy: type: RollingUpdaterollingUpdate: # 滚动更新策略maxUnavailable: 2 # 先下线两个maxSurge: 0containers:- image: nginxname: JavaAppports: - containerPort: 8080 #容器暴露的端口readinessProbe:httpGet:port: 80path: /initialDelaySeconds: 60 #容器启动后第一次执行探测是需要等待多少秒periodSeconds: 10 #执行探测的频率。默认是 10 秒,最小 1 秒timeoutSeconds: 10 #探测超时时间。默认 1 秒,最小 1 秒。failureThreshold: 10 #探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3。最小值是 1。
正常更新修改yaml 文件里的镜像地址, 然后 重新 apply 一下就会动态更新
service 只要是提供一个负载均衡的作用并作为一个服务的唯一入口
apiVersion: v1
kind: Service
metadata:name: myappnamespace: default
spec:selector:app: myapprel: stableports:- name: httpport: 80 #service的端口targetPort: 80 #pod 容器的端口nodePort: 30008 #NodeIP联合使用的端口
以上的都是对集群内部的服务,顶多service 暴露一个nodePort 可以让外部访问一下,但也不是什么优解
ingress 对外提供的服务
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: ingress-myappnamespace: defaultannotations:kubernetes.io/ingress.class: "nginx"
spec:rules:- host: www.myapp.com # 主机名,只能是域名,修改为项目域名http:paths:- path: /backend:serviceName: myapp # 后台部署的 Service NameservicePort: 80 # 后台部署的 Service Port