1.deployments资源
将rs资源的kind的值改为Deployment即可。
相比rs资源,升级时无须删除pod,
deployments资源不会直接控制pod,而是通过控制rs资源控制pod
strategy升级策略(与template同级)
strategy:
# 升级的类型,"Recreate" or "RollingUpdate"
# Recreate:
# 先停止所有的Pod运行,然后在批量创建更新。
# 生产环节中不推荐使用这种策略,因为升级过程中用户将无法访问服务!
# RollingUpdate:
# 滚动更新,即先实现部分更新,逐步替换原有的pod,是默认策略。
# type: Recreate
type: RollingUpdate
# 自定义滚动更新的策略
rollingUpdate:
# 在原有Pod的副本基础上,多启动Pod的数量。
# maxSurge: 2
maxSurge: 2
# 在升级过程中最大不可访问的Pod数量.
# maxUnavailable: 1
maxUnavailable: 1
2.deployments资源交互式升级和非交互式升级
交互式升级:
kubectl edit -f 01-deploy-update.yaml
kubectl edit deployments.apps
非交互式升级:
kubectl set image deploy web-deploy nginx=harbor.lxcedu.com/base-img/nginx:3
即kubectl set image deploy deploy资源名 容器名=镜像名
3.svc的type之NodePort
NodePort类型的Service允许从集群外部访问集群内部的服务,如下配置,访问宿主机的30080端口相当于访问pod的80端口
type: NodePort
# 指定端口映射相关信息
ports:
# 指定svc的端口号
- port: 80
# 指定Pod端口号
targetPort: 80
# 指定协议
protocol: TCP
# 指定访问宿主机的端口,该端口的报文会被转发后端的容器端口
# 默认svc有效端口范围是:"30000-32767"
nodePort: 30080
# 指定ClusterIP的地址
clusterIP: 10.200.100.200
访问Node节点的IP加上nodePort
(即30080)时,流量不会先到集群内部的clusterIP:port
(即10.200.100.200:80),而是直接通过Node节点的IP和指定的nodePort
(30080)进入集群,并由Kubernetes的网络组件(如kube-proxy)负责将流量转发到后端Pod的对应端口(在这个例子中是80端口)。
具体来说,当外部客户端通过Node节点的IP和nodePort
访问Service时,Kubernetes的网络组件会识别出这是一个NodePort类型的Service请求,并根据Service的配置将流量转发到后端的一组Pods中的一个(这通常是通过负载均衡算法来实现的)。
4.coreDNS
作用:将coreDNS的名称解析为ClusterIP
查看clusterDNS地址:
配置文件 /var/lib/kubelet/config.yaml
clusterDNS:
- 10.200.0.10
#集群域名
clusterDomain: lxcedu.com
解析coreDNS的A记录
方式一:
默认集群域名时:<service name>.<namespace name>.svc.cluster.local
因为我这里集群域名是lxc.edu.com,所以使用时是<service name>.<namespace name>.svc.lxcedu.com
如下图
方式二:
使用bind-utils验证
yum install -y bind-utils
5.deployment实现蓝绿发布
1.部署当前版本(旧版本)
2.部署service
3.部署新版本(使用新的deployment名称或label标签)
4.切换service标签到新的pod
缺点:浪费资源
6.deployment实现灰度发布
1.部署当前版本(旧版本)
2.部署service
3.部署新版本deployments,pod数量为一个,标签与旧版本一致
4.无异常时,逐渐减小旧版本pod数量,增大新版本pod数量,直至所有pod变为新版本
7.job控制器
job概述:一次性任务,pod完成作业后并不重启,重启策略为restartPolicy:Never
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl:5.34
# 它计算π到2000个位置并打印出来。大约需要 10 秒才能完成。
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
# 指定标记此作业失败之前的重试次数。默认值为6
backoffLimit: 4
作业完成之后,pod的状态为competed
8.CronJob
概述:周期性任务,CronJob底层逻辑是周期性创建Job控制器来实现周期性任务的。
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
# 定义调度格式,参考链接:https://en.wikipedia.org/wiki/Cron
# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 月的某天 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
# │ │ │ │ │ 或者是 sun,mon,tue,web,thu,fri,sat
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo Hello
restartPolicy: OnFailure