文章目录
- kubectl详解
- 一、陈述式管理
- 1、陈述式资源管理方法
- 2、k8s相关信息查看
- 2.1 查看版本信息
- 2.1.1 查看资源对象简写
- 2.1.2 查看集群信息
- 2.1.3 配置kubectl自动补全
- 2.1.4 查看日志
- 2.2 基本信息查看
- 2.2.1 查看集群状态
- 2.2.2 查看命名空间
- 2.3 命名空间操作
- 2.3.1 查看default命名空间的所有资源
- 2.3.2 创建命名空间luck
- 2.3.3 删除命名空间luck
- 2.4 deployment/pod操作
- 2.4.1 在命名空间kube-public创建副本控制器(deployment)来启动Pod(nginx-xx)
- 2.4.2 显示某个资源的详细信息
- 2.4.3 查看命名空间kube-public中pod信息
- 2.4.4 登录容器
- 2.4.5 删除(重启)pod资源
- 2.4.6 若无法删除,总是处于terminate状态,则要强行删除pod
- 2.4.7 扩缩容
- 2.4.7.1 扩容
- 2.4.7.2 缩容
- 2.4.8 删除副本控制器
- 2.5 增加/删除label
- 2.5.1 增加label
- 2.5.2 删除label
- 3、K8S模拟项目
- 3.1 项目的生命周期
- 3.2 创建kubectl run命令
- 3.3 发布kubectl expose命令
- 3.3.1 Service的作用
- 3.3.2 Service的类型
- 3.3.3 查看Pod网络状态详细信息和Service暴露的端口
- 3.3.4 查看关联后端的节点
- 3.3.5 查看service的描述信息
- 3.3.6 查看负载均衡端口
- 3.3.7 访问查看
- 3.3.8 自定义访问页面,查看访问结果
- 3.3.9 查看访问日志
- 3.4 更新kubectl set
- 3.4.1 获取修改模板
- 3.4.2 查看版本更新策略
- 3.4.3 查看当前nginx版本并更新
- 3.4.4 监听pod状态
- 3.4.5 查看pod的ip变化
- 3.4.6 重新查看nginx版本信息
- 3.5 回滚kubectl rollout
- 3.5.1 查看历史版本
- 3.5.2 执行回滚到上一个版本
- 3.5.3 执行回滚到指定版本
- 3.5.4 检查回滚状态
- 3.6 删除kubectl delete
- 3.6.1 删除副本控制器
- 3.6.2 删除service
- 4、金丝雀发布/灰度发布(Canary Release)
- 4.1 金丝雀发布简介
- 4.2 更新deployment的版本,并配置暂停deployment
- 4.2.1 创建pods
- 4.2.2 发布服务
- 4.2.3 查看nginx版本
- 4.2.4 更新nginx版本并配置暂停
- 4.2.5 观察更新状态
- 4.2.6 监控更新的过程
- 4.2.7 查看nginx版本
- 4.2.8 resume继续更新
- 4.2.9 查看最后的更新情况
- 二、声明式管理
- 1、声明式管理方法
- 2、查看资源配置清单
- 3、解释资源配置清单
- 4、修改资源配置清单并应用
- 4.1 离线修改
- 4.2 在线修改
- 5、删除资源配置清单
- 5.1 陈述式删除
- 5.2 声明式删除
kubectl详解
一、陈述式管理
1、陈述式资源管理方法
-
通过命令额方式语句来实现对资源的管理,即通过一条命令来实现
-
kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口
-
kubectl是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径
-
kubectl的命令大全
- kubectl --help
- k8s官方中文文档:http://docs.kubernetes.org.cn/683.html
-
对资源的增、删、查操作比较容易,但对改的操作就不容易了
2、k8s相关信息查看
2.1 查看版本信息
kubectl version #查看版本信息 kubectl get nodes #查看集群节点信息
2.1.1 查看资源对象简写
kubectl api-resources #查看资源对象简写
2.1.2 查看集群信息
kubectl cluster-info #查看集群信息
2.1.3 配置kubectl自动补全
source <(kubectl completion bash) #配置kubectl自动补全(只在当前生效,可以放在~/.bashrc文件中) [root@master ~]# source <(kubectl completion bash)
2.1.4 查看日志
journalctl -u kubelet -f #查看日志
2.2 基本信息查看
kubectl get
[-o wide|json|yaml] [-n namespace] -------------------------------------------------------------------------------------------------------- 获取资源的相关信息, -n指定命名空间 -o指定输出格式 resource可以是具体资源名称,如"pod nhinx-xxx";也可以是资源类型,如“pod,node,svc,deploy”多种资源使用逗号间隔;或者all(仅展示几种核心资源,并不完整) --all-namespaces或-A:表示显示所有命名空间 --show-labels:显示所有标签 -l app:仅显示标签为app的资源 -l app=nginx:仅显示包含app标签,且值为nginx的资源 -------------------------------------------------------------------------------------------------------- 2.2.1 查看集群状态
kubectl get componentstatuses kubectl get cs #查看集群状态
2.2.2 查看命名空间
kubectl get namespace kubectl get ns #查看命名空间
2.3 命名空间操作
2.3.1 查看default命名空间的所有资源
kubectl get all [-n default] #由于deafult为缺省空间,当不指定命名空间时默认查看default命名空间 kubectl get all #查看空间的所有资源
2.3.2 创建命名空间luck
kubectl create ns luck #创建命名空间luck kubectl get ns #显示所有命名空间
2.3.3 删除命名空间luck
kubectl delete ns luck #删除命名空间luck(谨慎使用,会清空luck命名空间下的所有资源) kubectl get ns #显示所有命名空间信息
2.4 deployment/pod操作
2.4.1 在命名空间kube-public创建副本控制器(deployment)来启动Pod(nginx-xx)
kubectl create deployment nginx-xx --image=nginx -n kube-public #在 kube-public 命名空间中创建一个名为 nginx-xx 的 Deployment,该 Deployment 将运行 nginx 镜像 -------------------------------------------------------------------------------------------------------- deployment:要创建的资源类型是 Deployment。Deployment 是 Kubernetes 中用于管理无状态应用(如 web 服务器)的资源。 nginx-xx:为新的 Deployment 指定的名称。 --image:指定要在 Deployment 中运行的容器镜像。 -n 或 --namespace:指定要在哪个 Kubernetes 命名空间中创建 Deployment。 kube-public:这是 Kubernetes 中的一个预定义命名空间,通常用于存储可以由集群中所有用户访问的公共对象。 -------------------------------------------------------------------------------------------------------- kubectl get deploy -n kube-public #显示Deployment 资源的列表
2.4.2 显示某个资源的详细信息
kubectl describe <资源类型> <资源名称> [-n 命名空间] #显示某个资源的详细信息 -------------------------------------------------------------------------------------------------------- <资源类型> #描述的资源的类型,比如 pod、service、deployment、statefulset 等。 <资源名称> #你想要描述的资源的名称。 [-n 命名空间] #可选参数,指定资源所在的命名空间。不指定则为当前默认命名空间,通常是default。 -------------------------------------------------------------------------------------------------------- kubectl describe deployment nginx-xx -n kube-public #显示nginx-xx的deployment资源的详细信息(显示副本信息) kubectl describe pod nginx-xx -n kube-public #显示nginx-xx的pod资源的详细信息(可以详细显示某个pod调度失败的原因)
2.4.3 查看命名空间kube-public中pod信息
kubectl get pods -n kube-public #显示命名空间kube-public中pod信息
2.4.4 登录容器
#kubectl exec可以跨主机登录容器,docker exec只能在容器所在主机登录 kubectl exec -it nginx-xx-55f6c96849-vjsnm bash -n kube-public #登录容器
2.4.5 删除(重启)pod资源
#由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来kubectl delete pod nginx-test-65c98cd596-nq9cq -n kube-public kubectl delete pod nginx-xx-55f6c96849-vjsnm -n kube-public #删除pod资源 kubectl get pods -n kube-public #显示命名空间kube-public中pod信息(使用delpoyment启动的pod实例,直接去删除pod是无法删除的) 这是因为delpoyment控制器,是一种pod控制器,它建立在ReplicaSet之上的控制器,用于管理无状态应用,同时管理和控制Pod与ReplicaSet,确保pod实例,一直保持在replicaset设置的预期值上,想要删除pod实例,只能通过删除控制器来删除它管理的pod实例
2.4.6 若无法删除,总是处于terminate状态,则要强行删除pod
#kubectl delete pod -n --force --grace-period=0 #grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅的退出,0表示立即终止pod #在删除命名空间之前,请确保该命名空间中没有正在运行的重要应用程序,以免影响集群的稳定性和可用性。 #有些命名空间可能是由Kubernetes系统自动生成的,不允许被删除。在删除之前,请确认命名空间是否允许被删除。 #在执行删除操作之前,请确保已经备份了必要的数据和配置
2.4.7 扩缩容
kubectl scale <资源类型> <资源名称> --replicas=num [-n ns]
2.4.7.1 扩容
kubectl scale deployment nginx-xx --replicas=3 -n kube-public #创建3个副本 kubectl get pods -n kube-public #显示pod资源信息
2.4.7.2 缩容
kubectl scale deployment nginx-xx --replicas=1 -n kube-public #缩容,只留一个副本 kubectl get pods -n kube-public #显示pod资源信息
2.4.8 删除副本控制器
kubectl delete deployment/nginx-xx -n kube-public #删除副本控制器 kubectl get deployment -n kube-public #显示deployment资源信息
2.5 增加/删除label
kubectl get <资源类型> [-n 命名空间] --show-labels #查看指定的某个资源的标签
2.5.1 增加label
kubectl get deploy --show-labels #获取集群中所有 Deployment 资源的列表,并显示它们的标签(labels)。 kubectl label deploy nginx-deployment version=nginx1.15 #添加标签 kubectl get deploy --show-labels #显示deploy资源列表,并显示标签
2.5.2 删除label
kubectl get deploy --show-labels #显示deploy资源列表,并显示标签 kubectl label deploy nginx-deployment version- #删除标签 kubectl get deploy --show-labels #显示deploy资源列表,并显示标签
3、K8S模拟项目
3.1 项目的生命周期
- 创建–>发布–>更新–>回滚–>删除
3.2 创建kubectl run命令
- 创建并运行一个或多个容器镜像
- 创建一个deployment或job来管理容器
kubectl run --help查看使用帮助
kubectl run nginx --image=nginx --port=80 --replicas=3 #启动nginx实例,暴露容器端口80,设置副本数3 kubectl get pods #显示pods信息 kubectl get all #显示空间所有资源
3.3 发布kubectl expose命令
- 将资源暴露为新的Service
kubectl expose --help查看使用帮助 kubectl expose deployment nginx-deployment --port=80 --target-port=80 --name=nginx-service --type=NodePort #为Deployment的nginx创建Service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort -------------------------------------------------------------------------------------------------------- --port=80 #指定了Service的端口,即集群内部其他Pods可以通过这个端口访问Service --target-port=80 #指定了Service将流量转发到的目标端口,即Pods上实际运行的服务的端口。 #--target-port和--port可以是相同的,但也可以不同,具体取决于部署配置。 --name=nginx-service #指定了新创建的Service的名称 --type=NodePort #指定了Service 的类型。NodePort类型意味着Service会在集群的每个节点上打开一个特定的端口(称为 NodePort,端口范围为30000-32767之间的一个随机数),这样外部流量就可以通过该端口访问Service。这是将服务暴露给集群外部的一种方式。 --------------------------------------------------------------------------------------------------------
3.3.1 Service的作用
- Kubernetes之所以需要Service,一方面是因为Pod的IP不是固定的(Pod可能会重建),另一方面是因为一组Pod实例之间总会有负载均衡的需求。
- Service通过Label Selector实现的对一组的Pod的访问。
- 对于容器应用而言,Kubernetes提供了基于VIP(虚拟IP)的网桥的方式访问Service,再由Service重定向到相应的Pod。
3.3.2 Service的类型
- ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(Service默认类型)
- NodePort:在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过NodeIP:NodePort的方式
- LoadBalancer:通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。
3.3.3 查看Pod网络状态详细信息和Service暴露的端口
kubectl get pods,svc -o wide #查看Pod网络状态详细信息和Service暴露的端口
3.3.4 查看关联后端的节点
kubectl get endpoints #查看失联后端的节点
3.3.5 查看service的描述信息
kubectl describe svc nginx #查看service的描述信息
curl 192.168.10.11:32056 curl 192.168.10.12:32056 curl 192.168.10.13:32056 #使用任意节点ip访问
3.3.6 查看负载均衡端口
- 在node01节点上操作
yum install -y ipvsadm.x86_64 #安装服务 ipvsadm -Ln #显示当前的 IPVS 表(查看已配置的虚拟服务和后端服务器)
- 在node02节点上操作
yum install -y ipvsadm.x86_64 #安装服务 ipvsadm -Ln #显示当前的 IPVS 表(查看已配置的虚拟服务和后端服务器)
3.3.7 访问查看
curl 10.96.18.173 curl 192.168.10.12:32056 curl 192.168.10.13:32056 #访问查看
3.3.8 自定义访问页面,查看访问结果
kubectl exec -it nginx-deployment-6975c5dffc-h228n bash kubectl exec -it nginx-deployment-6975c5dffc-mdn4g bash kubectl exec -it nginx-deployment-6975c5dffc-mhc6m bash #登录容器,自定义访问页面 curl 10.96.18.173 #验证访问
3.3.9 查看访问日志
kubectl logs nginx-deployment-6975c5dffc-mhc6m #查看访问日志
3.4 更新kubectl set
- 更改现有应用资源一些信息。
kubectl set --help #查看使用帮助
3.4.1 获取修改模板
kubectl set image --help #查看修改模板
3.4.2 查看版本更新策略
kubectl describe deployments.apps nginx #查看版本更新策略 -------------------------------------------------------------------------------------------------------- RollingUpdateStrategy #Deployment资源的一个字段,它用于定义滚动更新的策略。 #滚动更新允许你逐步替换Pod,以确保在更新过程中服务的高可用性 maxUnavailable #这是一个可选字段,用于指定在滚动更新过程中可以有多少个Pod处于不可用状态。 #这个值可以是一个整数(表示具体的Pod数量)或者一个百分比 #例如,25%的maxUnavailable意味着在更新过程中,可以有最多25%的Pod处于不可用状态。 maxSurge #这也是一个可选字段,用于指定在滚动更新过程中可以有多少个额外的Pod同时运行。 #这个值也可以是一个整数或百分比。例如25%的maxSurge意味着在更新过程中, #可以比期望的Pod数量多运行最多25%的Pod。
3.4.3 查看当前nginx版本并更新
kubectl get pod,svc -owide -n luck #查看指定命名空间(luck)资源类型(pod,svc)的详细信息 curl -I 10.244.2.37 #查看当前nginx版本 kubectl set image deployment/nginx nginx=nginx:1.22 -n luck #将nginx版本更新为1.22版本
3.4.4 监听pod状态
kubectl get pods -w #监听pod状态 #处于动态监听pod状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后以此类推 #更新规则可通过“kubetl describe deployment nginx”的“RollingUpdateStrategy”查看,默认配置为“25% max unavailable, 25% max surge”,即按照25%的比例进行滚动更新。
3.4.5 查看pod的ip变化
kubectl get pod -owide -n luck #查看pod详细信息ip变化 #pod更新后,ip改变
3.4.6 重新查看nginx版本信息
curl -I 10.244.2.47 curl -I 10.96.131.20 curl -I 192.168.10.13:31808 #查看nginx版本信息
3.5 回滚kubectl rollout
- 对资源进行回滚管理
kubectl rollout --help #查看使用帮助
3.5.1 查看历史版本
kubectl rollout history deployment/nginx -n luck #查看历史版本 ---------------------------------------------------------------------------------------------------------- REVISION #显示历史中的每个版本,最多记录三次 CHANGE-CAUSE #显示触发该版本变更的原因。显示为
,表示没有明确的变更原因被记录 ---------------------------------------------------------------------------------------------------------- 3.5.2 执行回滚到上一个版本
kubectl rollout undo deployment/nginx -n luck #回滚到上一个版本 kubectl get pod -owide -n luck #查看pod的ip变化(回滚后ip再次改变) curl -I 10.244.1.52 #查看当前nginx版本
3.5.3 执行回滚到指定版本
kubectl rollout history deployment/nginx -n luck #查看历史版本 kubectl rollout undo deployment/nginx --to-revision=5 -n luck #回到revision5版本 kubectl get pod -owide -n luck #查看pod的ip变化,回滚后ip发生改变 curl -I 10.244.1.56 #查看当前nginx版本
3.5.4 检查回滚状态
kubectl rollout status deployment/nginx -n luck #检查回滚状态
3.6 删除kubectl delete
3.6.1 删除副本控制器
kubectl get deploy #显示副本控制器 kubectl delete deployment/nginx #删除deploy副本控制器 kubectl get deploy #显示副本控制器
3.6.2 删除service
kubectl get svc #显示svc资源类型信息 kubectl delete svc/nginx-service #删除svc kubectl get svc #显示svc资源类型信息 kubectl get all #显示所有信息
4、金丝雀发布/灰度发布(Canary Release)
4.1 金丝雀发布简介
- Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,在筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。
4.2 更新deployment的版本,并配置暂停deployment
4.2.1 创建pods
kubectl create deployment nginx-xx --image=nginx:1.18 --replicas=3 #创建pod资源信息 kubectl get pod #显示pod信息
4.2.2 发布服务
kubectl expose deployment nginx-xx --port=80 --target-port=80 --name=nginx-svc --type=NodePort #暴露端口,对外提供服务 kubectl get svc -owide #查看svc详细信息
4.2.3 查看nginx版本
curl -I 192.168.10.12:30555 #查看nginx版本信息
4.2.4 更新nginx版本并配置暂停
kubectl set image deploy/nginx-xx nginx-xx=nginx:1.20 && kubectl rollout pause deploy/nginx-xx #更新nginx版本为1.20版本,并暂停更新
4.2.5 观察更新状态
kubectl rollout status deploy/nginx-xx #查看更新状态
4.2.6 监控更新的过程
- 可以看到已经新增了一个pod,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令
kubectl get pod #显示pod信息
4.2.7 查看nginx版本
kubectl get svc -owide #显示svc详细信息 curl -I 192.168.10.12:32056 #查看nginx版本
4.2.8 resume继续更新
- 测试新版本没问题继续更新
kubectl rollout resume deploy/nginx-xx #新版本没问题之后继续更新
4.2.9 查看最后的更新情况
kubectl get pods #显示pod信息 curl -I 192.168.10.12:32056 #查看nginx版本信息
二、声明式管理
1、声明式管理方法
- 适合于对资源的修改操作
- 声明式资源管理方法依赖于资源配置清明文件对资源进行管理
- 资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)
- 对资源的观念里,是通过实现定义在同一资源配置清单内,再通过陈述式命令应用到k8s集群里
- 语法格式:kubectl create/apply/delete -f -o yaml
2、查看资源配置清单
#以yaml格式查看 nginx-xx 的 Deployment 资源的详细信息 [root@master ~]#kubectl get deployment/nginx-xx -o yaml apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "2" creationTimestamp: "2024-05-21T18:16:27Z" generation: 4 labels: app: nginx-xx managedFields: - apiVersion: apps/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:labels: .: {} f:app: {} f:spec: f:progressDeadlineSeconds: {} f:replicas: {} f:revisionHistoryLimit: {} f:selector: {} f:strategy: f:rollingUpdate: .: {} f:maxSurge: {} f:maxUnavailable: {} f:type: {} f:template: f:metadata: f:labels: .: {} f:app: {} f:spec: f:containers: k:{"name":"nginx"}: .: {} f:imagePullPolicy: {} f:name: {} f:resources: {} f:terminationMessagePath: {} f:terminationMessagePolicy: {} f:dnsPolicy: {} f:restartPolicy: {} f:schedulerName: {} f:securityContext: {} f:terminationGracePeriodSeconds: {} manager: kubectl-create operation: Update time: "2024-05-21T18:16:27Z" - apiVersion: apps/v1 fieldsType: FieldsV1 fieldsV1: f:spec: f:template: f:spec: f:containers: k:{"name":"nginx"}: f:image: {} manager: kubectl-set operation: Update time: "2024-05-21T18:32:26Z" - apiVersion: apps/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:annotations: .: {} f:deployment.kubernetes.io/revision: {} f:status: f:availableReplicas: {} f:conditions: .: {} k:{"type":"Available"}: .: {} f:lastTransitionTime: {} f:lastUpdateTime: {} f:message: {} f:reason: {} f:status: {} f:type: {} k:{"type":"Progressing"}: .: {} f:lastTransitionTime: {} f:lastUpdateTime: {} f:message: {} f:reason: {} f:status: {} f:type: {} f:observedGeneration: {} f:readyReplicas: {} f:replicas: {} f:updatedReplicas: {} manager: kube-controller-manager operation: Update time: "2024-05-21T18:42:13Z" name: nginx-xx namespace: default resourceVersion: "22223" uid: b59db034-330c-4b1b-b032-8e47d821538a spec: progressDeadlineSeconds: 600 replicas: 3 revisionHistoryLimit: 10 selector: matchLabels: app: nginx-xx strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: creationTimestamp: null labels: app: nginx-xx spec: containers: - image: nginx:1.20 imagePullPolicy: IfNotPresent name: nginx resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 status: availableReplicas: 3 conditions: - lastTransitionTime: "2024-05-21T18:16:29Z" lastUpdateTime: "2024-05-21T18:16:29Z" message: Deployment has minimum availability. reason: MinimumReplicasAvailable status: "True" type: Available - lastTransitionTime: "2024-05-21T18:41:29Z" lastUpdateTime: "2024-05-21T18:42:13Z" message: ReplicaSet "nginx-xx-857b968668" has successfully progressed. reason: NewReplicaSetAvailable status: "True" type: Progressing observedGeneration: 4 readyReplicas: 3 replicas: 3 updatedReplicas: 3
#以yaml格式查看 nginx-svc 的 service 资源的详细信息 [root@master ~]#kubectl get service/nginx-svc -o yaml apiVersion: v1 kind: Service metadata: creationTimestamp: "2024-05-21T18:17:54Z" labels: app: nginx-xx managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:labels: .: {} f:app: {} f:spec: f:externalTrafficPolicy: {} f:ports: .: {} k:{"port":80,"protocol":"TCP"}: .: {} f:port: {} f:protocol: {} f:targetPort: {} f:selector: .: {} f:app: {} f:sessionAffinity: {} f:type: {} manager: kubectl-expose operation: Update time: "2024-05-21T18:17:54Z" name: nginx-svc namespace: default resourceVersion: "20089" uid: ff2ed757-d49d-4436-b2b9-8666d70935e5 spec: clusterIP: 10.96.137.140 clusterIPs: - 10.96.137.140 externalTrafficPolicy: Cluster ports: - nodePort: 32056 port: 80 protocol: TCP targetPort: 80 selector: app: nginx-xx sessionAffinity: None type: NodePort status: loadBalancer: {}
3、解释资源配置清单
kubectl explain deployment.metadata #解释资源配置清单 kubectl explain service.metadata #解释资源配置清单
4、修改资源配置清单并应用
4.1 离线修改
- 修改yaml文件:并用kubectl apply -f xxxx.yaml文件使之生效
- 注意:当apply不生效时,先使用delete清除资源,再apply创建资源
kubectl get service nginx-svc -o yaml > nginx-svc.yaml #将查询的yaml结果输出到nginx-svc.yaml文件中 vim nginx-svc.yaml #编辑修改yaml文件 kubectl delete -f nginx-svc.yaml #删除资源 kubectl apply -f nginx-svc.yaml #新建资源 kubectl get svc #查看service资源
4.2 在线修改
-
直接使用kubectl edit service nginx-service在线编辑配置资源清单并保存退出即时生效(如port: 888)
-
此修改方式不会对yaml文件内容修改
kubectl edit service nginx-service #修改配置资源清单 kubectl get svc #查看service资源
5、删除资源配置清单
5.1 陈述式删除
kubectl delete service/nginx #陈述式删除 kubectl get svc #查看service资源
5.2 声明式删除
kubectl delete -f nginx-svc.yaml #声明式删除 kubectl get svc #查看service资源
-
- 测试新版本没问题继续更新
- 可以看到已经新增了一个pod,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令
- Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,在筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。
- 对资源进行回滚管理
- 更改现有应用资源一些信息。
- 在node02节点上操作
- 在node01节点上操作
- 将资源暴露为新的Service
- 创建–>发布–>更新–>回滚–>删除
-
还没有评论,来说两句吧...