1.金丝雀发布(Canary Release)
Deployment控制器支持自定义控制更新过程中的滚动节奏,如"暂停(pause)"或"继续(resume)"更新操作。 比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。 然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。 确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。
1.1具体操作
1.先创建一个1.18版本的nginx pod
sql
kubectl create deployment nginx-1.18 --image=nginx:1.18 --port=80 --replicas=3
kubectl get all

2.创建一个service资源
css
kubectl expose deployment nginx-1.18 --name nginx-66 --port=9000 --target-port=80 --type=NodePort

3.更新deployment的版本,并配置暂停deployment
arduino
kubectl set image deployment nginx-1.18 nginx=nginx:1.22 && kubectl rollout pause deployment nginx-1.18

4.当这边发布后检测没问题就可以继续更新
lua
kubectl rollout resume deployment nginx-1.18

sql
kubectl describe deployments.apps nginx-1.18

2.声明式管理方式:
- 适合于对资源的修改操作
- 声明式资源管理方法依赖于资源配置清单文件对资源进行管理
- 资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)
- 对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里
- 语法格式:kubectl create/apply/delete -f xxxx.yaml
csharp
#查看到我们这个pod的yaml资源的配置并重定向一个文件里
kubectl get pod nginx-1.18-78658df449-l27l6 -o yaml > daemon.yaml

xml
#获取资源的详细解释
kubectl explain <资源类型>.<一级字段>.<二级字段>...

2.1 离线修改:
1.我们先获取一个yaml配置然后用声明式来进行资源管理
arduino
kubectl get svc nginx-66 -o yaml > nginx-66.yaml

- 先删除这个资源
css
kubectl delete svc nginx-66 --force --grace-period=0

3.然后使用命令进行加入配置
kubectl apply -f nginx-66.yaml

4.如果我们想要修改资源,我们可以直接修改配置文件然后再输入这个命令就可以完成更新


5.如果出现更新配置出错我们直接将之前的那个资源删除然后再重新载入我们的yaml配置文件
2.2 在线修改
kubectl edit svc nginx-66

有些配置能改但是有些配置改不掉,但会帮我们保存到一个文件夹下

3.如何获取资源配置清单文件模板
3.1 自己手撕yaml配置文件
yaml
vim nginx-deployment.yaml
apiVersion: apps/v1 #指定api版本标签
kind: Deployment #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata: #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
name: nginx-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
labels: #定义Deployment资源标签
app: nginx
spec: #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
replicas: 3 #定义副本数量
selector: #定义标签选择器
matchLabels: #定义匹配标签
app: nginx #需与 .spec.template.metadata.labels 定义的标签保持一致
template: #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
metadata:
labels: #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
app: nginx
spec:
containers: #定义容器属性
- name: nginx #定义一个容器名,一个 - name: 定义一个容器
image: nginx:1.15.4 #定义容器使用的镜像以及版本
ports:
- containerPort: 80 #定义容器的对外的端口

yaml
vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-lzq
namespace: ky31
labels:
name: lzq
spec:
containers:
- name: myapp
image: nginx:1.22
ports:
- containerPort: 80
name: http
protocol: TCP

kubectl apply -f pod.yaml

3.2 通过已存在的资源配置的方式来获取配置文件
csharp
#查询现有的pod资源来导出配置文件
kubectl get pods nginx-1.18-78658df449-zxws9 -o yaml > demon02.yaml

3.3 通过无中生有的方式来导出资源配置
css
#创建新的pod控制器,然后使用试运行再导出yaml格式
kubectl create deployment deploy-yhy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml

ini
#创建新的service资源配置
kubectl create svc nodeport svc-lzq --tcp=8080:80 --dry-run=client -o yaml > demo03.yaml
