需求:
在搭建好k8s 后搭建对应的服务
在搭建服务之前需要对每个模板有一个基本的认知不然搭起来感觉莫名其妙的
做了一个demo k8s 配置ingress 并做一个demo
进程:
初始搭建服务最基础的单位是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: RollingUpdate
rollingUpdate: # 滚动更新策略
maxUnavailable: 2 # 先下线两个
maxSurge: 0
containers:
- image: nginx
name: JavaApp
ports:
- containerPort: 8080 #容器暴露的端口
readinessProbe:
httpGet:
port: 80
path: /
initialDelaySeconds: 60 #容器启动后第一次执行探测是需要等待多少秒
periodSeconds: 10 #执行探测的频率。默认是 10 秒,最小 1 秒
timeoutSeconds: 10 #探测超时时间。默认 1 秒,最小 1 秒。
failureThreshold: 10 #探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3。最小值是 1。
正常更新修改yaml 文件里的镜像地址, 然后 重新 apply 一下就会动态更新
service 只要是提供一个负载均衡的作用并作为一个服务的唯一入口
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: default
spec:
selector:
app: myapp
rel: stable
ports:
- name: http
port: 80 #service的端口
targetPort: 80 #pod 容器的端口
nodePort: 30008 #NodeIP联合使用的端口
以上的都是对集群内部的服务,顶多service 暴露一个nodePort 可以让外部访问一下,但也不是什么优解
ingress 对外提供的服务
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-myapp
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: www.myapp.com # 主机名,只能是域名,修改为项目域名
http:
paths:
- path: /
backend:
serviceName: myapp # 后台部署的 Service Name
servicePort: 80 # 后台部署的 Service Port