k8s声明式资源管理方式

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.声明式管理方式:

  1. 适合于对资源的修改操作
  2. 声明式资源管理方法依赖于资源配置清单文件对资源进行管理
  3. 资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)
  4. 对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里
  5. 语法格式: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
  1. 先删除这个资源
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

3.4 可以直接到k8s的官网中查找资源配置案例

相关推荐
郝同学的测开笔记12 小时前
一次业务投诉引发的思考:如何优雅地将K8s服务暴露给外部?
后端·kubernetes
白露与泡影13 小时前
springboot + nacos + k8s 优雅停机
spring boot·后端·kubernetes
_板栗_13 小时前
k8s 中 cpu 核数的理解
云原生·容器·kubernetes
小李飞刀李寻欢13 小时前
使用kubeadm部署Kubernetes(k8s)集群的步骤
linux·服务器·ubuntu·kubernetes·k8s
藥瓿锻14 小时前
2024 CKS题库+详尽解析| 1. kube-bench 修复不安全项
运维·安全·docker·云原生·容器·kubernetes·cks
程序员阿超的博客18 小时前
云原生核心技术 (10/12): K8s 终极实战:从零部署一个 Spring Boot + MySQL + Redis 应用
spring boot·云原生·kubernetes
互联网搬砖老肖20 小时前
Web 架构之 Kubernetes 弹性伸缩策略设计
前端·架构·kubernetes
Akamai中国21 小时前
什么是云计算的边缘原生应用?
人工智能·kubernetes·云计算·边缘计算
昌sit!1 天前
K8S多维度问题排查
云原生·容器·kubernetes