【kubernetes】探索k8s集群中kubectl的陈述式资源管理

目录

一、k8s集群资源管理方式分类

1.1陈述式资源管理方式:增删查比较方便,但是改非常不方便

1.2声明式资源管理方式:yaml文件管理

二、陈述式资源管理方法

2.1查看版本信息

2.2查看资源对象简写

2.3配置kubectl自动补全

2.4node节点查看日志

三、基本信息查看

3.1查看 master 节点状态

3.2查看命名空间

3.3查看default命名空间的所有资源

3.4创建命名空间

3.5删除命名空间

3.6在命名空间kube-public 创建副本控制器(deployment)来启动Pod(nginx-aa)

3.6.1用于创建deployment 控制器管理的pod

3.6.2run:用于创建一个自主式/静态 Pod

3.7描述某个资源的详细信息

3.8查看命名空间kube-public 中的pod 信息

3.9kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录

3.10删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来

3.11扩缩容

3.11.1扩容

3.11.2缩容

3.12删除副本控制器

3.13查看标签

四、项目的生命周期

4.1创建    kubectl create命令

4.2发布    kubectl expose命令

4.2.1 Kubernetes 之所以需要 Service

4.2.2service 的 type 类型

4.2.3端口类型

4.2.3.1port

4.2.3.2nodePort

4.2.3.3targetPort

4.2.3.4containerPort

4.3更新    kubectl set命令

4.4回滚    kubectl rollout命令

4.5删除    kubectl delete命令

五、金丝雀发布(Canary Release)

5.1金丝雀发布介绍

5.2金丝雀发布图解

5.3金丝雀发布部署

5.4金丝雀发布优缺点

5.4.1金丝雀发布的优点

5.4.2金丝雀发布的缺点

5.5写累了吧浅休息下

六、详解service资源

6.1service的端口分类

6.2service的四大基础类型

6.3查看service关联的端点的方式


一、k8s集群资源管理方式分类

1.1陈述式资源管理方式:增删查比较方便,但是改非常不方便

使用一条kubectl命令和参数选项来实现资源对象管理操作

即通过命令的方式来实现对资源的管理

1.2声明式资源管理方式:yaml文件管理

使用yaml配置文件或者json配置文件来定义配置,实现资源对象的管理操作

二、陈述式资源管理方法

  • kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
  • kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
  • kubectl 的命令大全    kubectl --help
  • k8s中的文档:http://docs.kubernetes.org.cn/683.html
  • 对资源的增、删、查操作比较方便,但对改的操作就不容易了
#查看版本信息
kubectl version#查看资源对象简写
kubectl api-resources#查看集群信息 
kubectl cluster-info#配置kubectl自动补全   只是当前生效,永久生效加入 ~/.bashrc中
source <(kubectl completion bash)#node节点查看日志
journalctl -u kubelet -f

2.1查看版本信息

kubectl version

2.2查看资源对象简写

kubectl api-resources

2.3配置kubectl自动补全

source <(kubectl completion bash)

2.4node节点查看日志

journalctl -u kubelet -f

三、基本信息查看

kubectl get <resource> [-o wide|json|yaml] [-n namespace]
获取资源的相关信息,-n 指定命令空间,-o 指定输出格式
resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)
--all-namespaces 或 -A :表示显示所有命令空间,
--show-labels :显示所有标签
-l app :仅显示标签为app的资源
-l app=nginx :仅显示包含app标签,且值为nginx的资源//查看 master 节点状态
kubectl get componentstatuses
kubectl get cs//查看命令空间
kubectl get namespace
kubectl get ns
//命令空间的作用:用于允许不同 命令空间 的 相同类型 的资源 重名的//查看default命名空间的所有资源
kubectl get all [-n default]//创建命名空间app
kubectl create ns app
kubectl get ns//删除命名空间app
kubectl delete namespace app
kubectl get ns			//在命名空间kube-public 创建副本控制器(deployment)来启动Pod(nginx-wl)
kubectl create deployment nginx-wl --image=nginx  -n kube-public //描述某个资源的详细信息
kubectl describe deployment nginx-wl -n kube-public
kubectl describe pod nginx-wl-d47f99cb6-hv6gz -n kube-public//查看命名空间kube-public 中的pod 信息
kubectl get pods -n kube-public
NAME                       READY   STATUS    RESTARTS   AGE
nginx-wl-d47f99cb6-hv6gz   1/1     Running   0          24m//kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录
kubectl exec -it nginx-wl-d47f99cb6-hv6gz bash -n kube-public//删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来
kubectl delete pod nginx-wl-d47f99cb6-hv6gz -n kube-public//若pod无法删除,总是处于terminate状态,则要强行删除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许POD慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod//扩缩容
kubectl scale deployment nginx-wl --replicas=2 -n kube-public	# 扩容
kubectl scale deployment nginx-wl --replicas=1 -n kube-public	# 缩容//删除副本控制器
kubectl delete deployment nginx-wl -n kube-public
kubectl delete deployment/nginx-wl -n kube-public

3.1查看 master 节点状态

kubectl get componentstatuses
kubectl get cs

3.2查看命名空间

kubectl get namespace
kubectl get ns
命名空间的作用:用于允许不同 命名空间 的 相同类型 的资源 可以重名

获取所有命名空间中的 Pod 列表

kubectl get pod --all-namespaces
kubectl get pod -A#获取所有命名空间中的 Pod 列表

3.3查看default命名空间的所有资源

kubectl get all [-n default]#这个命令 kubectl get all -n default 用于获取命名空间为 default 的所有资源,包括 Pod、Service、Deployment 等。具体来说,该命令包含以下部分:
kubectl:Kubernetes 命令行工具,用于与 Kubernetes 集群进行交互。
get all:表示要获取指定命名空间中的所有资源,包括 Pod、Service、Deployment 等。
-n default:指定要获取资源的命名空间为 default

3.4创建命名空间

kubectl create ns hah
kubectl get ns

同一命名空间不能有相同的名字,不同命名空间可以有相同的名字

3.5删除命名空间

kubectl delete namespaces hah
kubectl get ns

可以删除,但是如果这个命名空间下面有资源,资源就都会被删除,再三考虑哦

3.6在命名空间kube-public 创建副本控制器(deployment)来启动Pod(nginx-aa)

 kubectl create deployment nginx-aa --image=nginx -n kube-public#这个命令 kubectl create deployment nginx-aa --image=nginx -n kube-public 用于在命名空间 kube-public 中创建一个名为 nginx-aa 的 Deployment,并使用 nginx 镜像作为 Deployment 中的容器。kubectl:Kubernetes 命令行工具,用于与 Kubernetes 集群进行交互。
create deployment nginx-aa:创建一个名为 nginx-aa 的 Deployment。
--image=nginx:指定 Deployment 中要使用的容器镜像为 nginx。
-n kube-public:指定要将 Deployment 创建在 kube-public 命名空间中。

kubectl create <pod控制器名> <pod名称> --image=镜像名

                          Deployment:无状态应用部署

                          Statefulset:有状态应用部署

                          Replicaset:副本数量控制器

                          Daemonset:确保所有节点运行同一类 Pod

                          Cronjob:计划性任务

示例二:

用kubectl create 创建

3.6.1用于创建deployment 控制器管理的pod

 用run直接创建

3.6.2run:用于创建一个自主式/静态 Pod

3.7描述某个资源的详细信息

kubectl describe deployment nginx-aa -n kube-publickubectl describe pod nginx-aa-66b8d4497f-cdj44 -n kube-public

3.8查看命名空间kube-public 中的pod 信息

kubectl get pods -n kube-public

3.9kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录

kubectl exec -it nginx-aa-66b8d4497f-cdj44 bash -n kube-public

示例二:

kubectl get pods -n kube-public -owide#用于获取在 kube-public 命名空间中运行的所有 Pods 的详细信息,包括它们的名称、状态、IP 地址等。 -n kube-public 参数指定了命名空间为 kube-public,而 -owide 参数指定了输出的格式为 wide,这样可以显示更多的列。#将会列出在 kube-public 命名空间中运行的所有 Pods,并显示它们的详细信息。

3.10删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来

kubectl delete pod nginx-aa-66b8d4497f-cdj44 -n kube-public

若pod无法删除,总是处于terminate状态,则要强行删除pod

kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许POD慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod

3.11扩缩容

​kubectl scale deployment nginx-bb --replicas=5 -n kube-public   # 扩容kubectl scale deployment nginx-bb --replicas=2 -n kube-public   # 缩容kubectl  scale pod控制器类型 资源名称 --replicas=副本数  -n 命名空间
##副本数决定扩容还是缩容
3.11.1扩容

3.11.2缩容

3.12删除副本控制器

kubectl delete deployment nginx-bb -n kube-public
kubectl delete deployment/nginx-aa -n kube-public

3.13查看标签

kubectl get pod --show-labels  #查看所有资源的标签
kubectl get pod -l app         #指定标签的键查看,只显示标签为app的资源
kubectl get pod -l app -A
kubectl get pod -l app=nginx-deployment #显示包含app标签且值为nginx的资源

kubectl get pod -l app=nginx-deployment

四、项目的生命周期

项目的生命周期:创建-->发布-->更新-->回滚-->删除

4.1创建    kubectl create命令

  • 创建并运行一个或多个容器镜像。
  • 创建一个deployment 或job 来管理容器。

kubectl create --help


kubectl -n 命名空间 create deployment 资源名称 --image=镜像 --port=容器的端口 --
replicas=副本数

​
启动 nginx 实例,暴露容器端口 80,设置副本数 3
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3kubectl -n 命名空间 create deployment 资源名称 --image=镜像 --port=容器的端口 --replicas=副本数kubectl get pods
kubectl get all

可以指定命名空间,也可不指定,此处指定命名空间为test

查看命名空间,刚才创建的nginx=test有3个副本

4.2发布    kubectl expose命令

  • 将资源暴露为新的 Service
  • kubectl expose --help

kubectl expose deployment 控制器名称 --name=服务名称 --port=服务端口 --target-port=pod端口

为deployment的nginx创建service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

示例:

kubectl expose deployment nginx-test --port=8082 --target-port=80 --name=nginx-svc --type=NodePort -n test#用于在 test 命名空间中,为名为 nginx-test 的 Deployment 创建一个 Service,并将其暴露为 NodePort 类型的服务。具体来说,该命令包含以下部分:kubectl:Kubernetes 命令行工具,用于与 Kubernetes 集群进行交互。
expose deployment nginx-test:为名为 nginx-test 的 Deployment 创建一个 Service。
--port=8082:指定 Service 使用的端口为 8082。
--target-port=80:指定 Service 要将流量转发到 Deployment 中的容器的端口 80。
--name=nginx-svc:指定 Service 的名称为 nginx-svc。
--type=NodePort:指定 Service 的类型为 NodePort,这将在每个节点上随机选择一个端口,并将该端口映射到 Service 的目标端口上。
-n test:指定 Service 创建在 test 命名空间中。
通过执行这个命令,您为名为 nginx-test 的 Deployment 创建了一个 NodePort 类型的 Service,并将其暴露在节点的随机端口上,从而允许外部流量访问该服务

8082这个端口是随意定的哦

使用node的IP地址进行检测,node是运行服务的、master是用来管理的

浏览器检测

xhell也可以直接检测

---------------------------------------------------------------------------------------------------------------------------------

4.2.1 Kubernetes 之所以需要 Service

Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的(Pod可能会重建),另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求。
Service 通过 Label Selector 实现的对一组的 Pod 的访问。
对于容器应用而言,Kubernetes 提供了基于 VIP(虚拟IP) 的网桥的方式访问 Service,再由 Service 重定向到相应的 Pod。

4.2.2service 的 type 类型

  • ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(service默认类型)
  • NodePort:在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过 NodeIp:NodePort 的方式Kubernetes集群外部的程序可以访问Service。

每个端口只能是一种服务,端口范围只能是 30000-32767。

  • LoadBalancer:通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。

在service提交后,Kubernetes就会调用CloudProvider在公有云上为你创建一个负载均衡服务,并且把被代理的Pod的IP地址配置给负载均衡服务做后端。

  • externalName:将service名称映射到一个DNS域名上,相当于DNS服务的CNAME记录,用于让Pod去访问集群外部的资源,它本身没有绑定任何的资源。 tgc.benet.com   www.benet.com 

headless clusterIP  无头模式   名称

  • 是Kubernetes中一种特殊类型的服务,它不会为服务创建ClusterIP,而是直接将DNS解析指向服务的每个Pod的IP地址。这种模式适用于需要直接与每个Pod进行通信的场景,而不需要负载均衡或代理。

4.2.3端口类型

4.2.3.1port

port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service(四层)

4.2.3.2nodePort

nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。

4.2.3.3targetPort

targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。

4.2.3.4containerPort

containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。

port: 为service 在 cluster Ip 暴露的端口
targetport: 对应容器映射在pod 上的端口
nodeport:可以通过k8s集群外部使用的 NodeIp +Nodeport 访问service

containerPort: 容器内部进程使用的端口
k8s集群内部 客户端 ---> clusterip:port ---->  通过targetport ----> pod:ip containerport
k8s集群外部 客户端 ---> nodeip:nodeport ---->  通过targetport ----> pod:ip containerport

查看pod网络状态详细信息和 Service暴露的端口
kubectl get pods,svc -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE
pod/nginx-cdb6b5b95-fjm2x   1/1     Running   0          44s   172.17.26.3   192.168.80.11   <none>
pod/nginx-cdb6b5b95-g28wz   1/1     Running   0          44s   172.17.36.3   192.168.80.12   <none>
pod/nginx-cdb6b5b95-x4m24   1/1     Running   0          44s   172.17.36.2   192.168.80.12   <none>NAME                    TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE   SELECTOR
service/kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        14d   <none>
service/nginx-service   NodePort    10.0.0.189   <none>        80:44847/TCP   18s   run=nginx//查看关联后端的节点
kubectl get endpoints//查看 service 的描述信息
kubectl describe svc nginx//在 node01 节点上操作,查看负载均衡端口
yum install ipvsadm -y
ipvsadm -Ln
//外部访问的IP和端口
TCP  192.168.80.11:44847 rr-> 172.17.26.3:80               Masq    1      0          0         -> 172.17.36.2:80               Masq    1      0          0         -> 172.17.36.3:80               Masq    1      0          0     
//pod集群组内部访问的IP和端口
TCP  10.0.0.189:80 rr-> 172.17.26.3:80               Masq    1      0          0         -> 172.17.36.2:80               Masq    1      0          0         -> 172.17.36.3:80               Masq    1      0          0         //在 node02 节点上操作,同样方式查看负载均衡端口
yum install ipvsadm -y
ipvsadm -Ln
TCP  192.168.80.12:44847 rr-> 172.17.26.3:80               Masq    1      0          0         -> 172.17.36.2:80               Masq    1      0          0         -> 172.17.36.3:80               Masq    1      0          0         TCP  10.0.0.189:80 rr-> 172.17.26.3:80               Masq    1      0          0         -> 172.17.36.2:80               Masq    1      0          0         -> 172.17.36.3:80               Masq    1      0          0         curl 10.0.0.189
curl 192.168.80.11:44847
//在master01操作 查看访问日志
kubectl logs nginx-cdb6b5b95-fjm2x
kubectl logs nginx-cdb6b5b95-g28wz
kubectl logs nginx-cdb6b5b95-x4m24

---------------------------------------------------------------------------------------------------------------------------------

查看pod网络状态详细信息和 Service暴露的端口
[root@master01 ~]#kubectl get pods,svc -o wide -n test
NAME                              READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
pod/nginx-test-7b97cf7f78-dztsx   1/1     Running   0          13m   10.244.1.60   node01   <none>           <none>
pod/nginx-test-7b97cf7f78-rg7bx   1/1     Running   0          40m   10.244.1.54   node01   <none>           <none>
pod/nginx-test-7b97cf7f78-sx9q5   1/1     Running   0          40m   10.244.1.56   node01   <none>           <none>NAME                TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE   SELECTOR
service/nginx-svc   NodePort   10.96.253.185   <none>        8082:31385/TCP   86m   app=nginx-test#查看关联后端的节点
kubectl get endpoints#查看 service 的描述信息
kubectl describe svc nginx#在 node 节点上操作,查看负载均衡端口
yum install ipvsadm -y
ipvsadm -Ln

查看pod网络状态详细信息和 Service暴露的端口

kubectl get pods,svc -o wide -n test

​查看关联后端的节点
kubectl get endpointskubectl get endpoints nginx-zzz  #进行查看#用于获取当前 Kubernetes 集群中所有 Service 的端点信息。端点是 Service 后面的实际 Pod 的 IP 地址和端口。#查看 service 的描述信息
kubectl describe svc nginx​kubectl describe svc nginx-zzz

在 node01 节点上操作,查看负载均衡端口


  

  在 node02 节点上操作,同样方式查看负载均衡端口

4.3更新    kubectl set命令

  • 更改现有应用资源一些信息。

kubectl set --help

#查看当前 nginx 的版本号
curl -I http://192.168.246.11:31385
curl -I http://192.168.246.12:31385#将nginx 版本更新为 1.18 版本
kubectl set image deployment/nginx nginx=nginx:1.18#处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推
kubectl get pods -w#再看更新好后的 Pod 的 ip 会改变
kubectl get pods -o wide#再看 nginx 的版本号
curl -I http://192.168.246.11:31385
curl -I http://192.168.246.12:31385

查看当前 nginx 的版本号

​#查看当前 nginx 的版本号
curl -I http://192.168.246.11:31385  #node的ip地址
curl -I http://192.168.246.12:31385

将nginx 版本更新为 1.18版本

kubectl set image deployment/nginx-test nginx=nginx:1.18 -n test

处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推

kubectl get pods -w

#再看更新好后的 Pod 的 ip 会改变

​kubectl get pods -o wide​
kubectl get pods -o wide -n test #指定命名空间test​

#再看更新好后的 Pod 的 ip 会发生改变,如上图

再看 nginx 的版本号

curl -I http://192.168.246.11:31385
curl -I http://192.168.246.12:31385

4.4回滚    kubectl rollout命令

  • 对资源进行回滚管理
  • kubectl rollout --help
//查看历史版本
kubectl rollout history deployment/nginx //执行回滚到上一个版本
kubectl rollout undo deployment/nginx//执行回滚到指定版本
kubectl rollout undo deployment/nginx --to-revision=1//检查回滚状态
kubectl rollout status deployment/nginx

查看历史版本

kubectl -n test rollout history deployment/nginx-test

执行回滚到上一个版本

kubectl rollout undo deployment/nginx-test -n test

执行回滚到指定版本

​
​kubectl rollout undo deployment/nginx-test --to-revision=2 -n test

检查回滚状态

kubectl rollout status deployment/nginx-test -n test

4.5删除    kubectl delete命令

//删除副本控制器
kubectl delete deployment/nginx//删除service
kubectl delete svc/nginx-servicekubectl get all

删除副本控制器

#删除控制器
​kubectl delete deployment/nginx-test -n test#删除服务
kubectl delete svc nginx-svc -n test
kubectl delete service/nginx-svc -n test

生命周期: 创建、发布、更新、回滚、删除

创建:   kubelet create  资源类型  资源名称 --image=镜像名称  --port=端口   --replicas=

发布:kubelet  expose  资源类型  资源名称 --port= --targetport= type= clusterip或NodePort

更新:kubelet set image 资源类型  资源名称 容器名=镜像名  标签版本

回滚:kubelet rollout undo 资源类型  资源名称    (默认是回滚到上一个版本)

           kubelet rollout history 或status  资源类型  资源名称 (查看回滚历史记录或者状态)

删除:kubelet delete 资源类型  资源名称

五、金丝雀发布(Canary Release)

5.1金丝雀发布介绍

Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布

金丝雀发布的思想则是将少量的请求引流到新版本上,因此部署新版本服务只需极小数的机器。验证新版本符合预期后,逐步调整流量权重比例,使得流量慢慢从老版本迁移至新版本,期间可以根据设置的流量比例,对新版本服务进行扩容,同时对老版本服务进行缩容,使得底层资源得到最大化利用

5.2金丝雀发布图解

如图,某服务当前版本为 v1,现在新版本 v2 要上线。为确保流量在服务升级过程中平稳无损,采用金丝雀发布方案,逐步将流量从老版本迁移至新版本。

5.3金丝雀发布部署

创建deployment

因为我们刚刚删除了,所有我们重新创建一个

​kubectl create deployment nginx-zzz --image=nginx:1.18 --port=80 --replicas=6 -n test

暴露服务 

kubectl expose deployment nginx-zzz --port=8083 --target-port=80 --name=nginx-service --type=NodePort -n test

查看更新之前的版本

(1)更新deployment的版本,并配置暂停deployment

​
kubectl set image deployment/nginx-zzz nginx=nginx:1.22 -n test && kubectl rollout pause deployment nginx-zzz -n testkubectl rollout status deployment nginx-zzz -n test    #观察更新状态

再开一个xhell查看,访问刚跟新的内容

(2)监控更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令

kubectl get pods -w -n test

检测看看,既有1.22版本的nginx,也有1.18版本的nginx

(3)确保更新的pod没问题了,继续更新

kubectl rollout resume deployment/nginx-zzz -n test

(4)查看最后的更新情况

​kubectl get pods -w -n test

更新成功,并且现在都是1.22版本的nginx服务了

结束

5.4金丝雀发布优缺点

5.4.1金丝雀发布的优点

  • 按比例将流量无差别地导向新版本,新版本故障影响范围小
  • 发布期间逐步对新版本扩容,同时对老版本缩容,资源利用率高

5.4.2金丝雀发布的缺点

  • 流量无差别地导向新版本,可能会影响重要用户的体验
  • 发布周期长

5.5写累了吧浅休息下

放松一下,感觉累了吗?那就停下来歇一歇吧

看看它能不能负载均衡

给它缩容到3个副本,编写方便一点,哈哈哈

编写内容,方便查看是否能够负载均衡

访问ClusterIP测试是否能负载均衡

也可以去浏览器查看哦

六、详解service资源

6.1service的端口分类

service端口

  • port:service的clusterIP使用的端口,只能在K8S集群内部被访问到。K8S集群内部的客户端可以通过clusterIP:port来访问service
  • nodePort:NodePort类型的service使用的端口,会在每个node节点上都开启相同的端口,也就是nodeIP使用的端口(默认范围为30000~32767)。K8S集群外部或内部的客户端都可以通过nodeIp:nodePort来访问service
  • targetPort:Pod容器使用的端口。service会将发送给port或nodePort的请求转发给Pod容器,配置要与containerPort一致

Pod容器的端口

containerPort:创建Pod时所指定的容器端口

6.2service的四大基础类型

  • ClusterIP:默认的service资源的类型,可提供clusterIP:port供K8S集群内部访问service及其关联的Pod
  • NodePort:会在每个node节点上都开启相同的端口,K8S集群外部或内部的用户都可以通过nodeIp:nodePort来访问service及其关联的Pod
  • LoadBalancer:使用云负载设备和service作映射,外部用户通过访问云负载设备即可将请求转发到K8S的node节点,再通过nodeIP:nodePort来访问service及其关联的Pod
  • ExternalName:相当于给一个外部地址(域名或IP)作别名,K8S集群内的Pod可以通过这个service访问相关的外部服务
  • service 是通过 标签选择器 关联Pod的标签 来自动发现Pod的端点(podIP:containerPort)

6.3查看service关联的端点的方式

查看service关联的Pod端口

kubectl  -n 命名空间  describe svc <资源名称>
kubectl   -n 命名空间  get endpoints [svc资源名称]
kubectl   -n 命名空间  describe endpoints <资源名称>

大总结:

​ # 获取节点和服务版本信息kubectl get nodes# 获取pod信息,默认是default名称空间,并查看附加信息【如:pod的IP及在哪个节点运行】kubectl get pod -o wide# 获取指定名称空间的podkubectl get pod -n kube-system# 获取所有名称空间的podkubectl get pod -A # 查看pod的详细信息,以yaml格式或json格式显示kubectl get pods -o yamlkubectl get pods -o json# 查看pod的标签信息kubectl get pod -A --show-labels # 根据Selector(label query)来查询podkubectl get pod -A --selector="k8s-app=kube-dns"# 查看所有名称空间的service信息kubectl get svc -A# 查看指定名称空间的service信息kubectl get svc -n kube-system# 查看componentstatuses信息kubectl get cs# 查看所有configmaps信息kubectl get cm -A# 查看所有serviceaccounts信息kubectl get sa -A# 查看所有daemonsets信息kubectl get ds -A# 查看所有deployments信息kubectl get deploy -A# 查看所有replicasets信息kubectl get rs -A# 查看所有statefulsets信息kubectl get sts -A# 查看所有jobs信息kubectl get jobs -A# 查看所有ingresses信息kubectl get ing -A# 查看有哪些名称空间kubectl get ns​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初始Java篇(JavaSE基础语法)—— 内部类

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaSE 目录 内部类的概念 内部类的种类 使用举例&#xff1a; 1. 静态内部类&#xff1a; 2. 实例内部类 3. 局部内部类 4. 匿名内部…

1分钟带你搞定Pandas DataFrame运算

1. DataFrame之间的运算 在运算中自动对齐不同索引的数据 如果索引不对应&#xff0c;则补NaN DataFrame没有广播机制 导包 # 导包import numpy as npimport pandas as pd 创建 DataFrame df1 不同人员的各科目成绩&#xff0c;月考一 # 创建DataFrame二维数组df1 pd.Da…

想要修改Excel表格内容,怎么移除编辑权限?

在使用Excel进行数据处理和管理时&#xff0c;我们经常会遇到需要保护工作表以防止误操作的情况。有时可能碰到“被保护单元格不支持此功能”的提示&#xff0c;本文将详细介绍这个问题的解决方案&#xff0c;帮助你取消单元格保护&#xff0c;使用所需的功能。 一、取消单元格…

【Unitydemo制作】音游制作—排行榜逻辑Json存储

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;就业…

GQL 来了!ISO/IEC 正式发布 GQL 数据库国际标准!

历时四年筹备&#xff0c;超过20个国家的标准和技术专家参与制定&#xff0c;ISO/IEC GQL &#xff08;图查询语言&#xff09;标准于2024年4月12日正式发布&#xff01; 作为国际标准化组织&#xff08;ISO&#xff09;继 1987年 发布SQL后&#xff0c;唯一发布的数据库查询语…

瑞米派Ubuntu系统移植指南-米尔RemiPi

1.概述 Linux系统平台上有许多开源的系统构建框架&#xff0c;这些框架方便了开发者进行嵌入式系统的构建和定制化开发&#xff0c;目前比较常见的有Buildroot, Yocto, OpenEmbedded等等。 同时更多的传统的桌面系统也加入到嵌入式环境体系中&#xff0c;如Ubuntu&#xff0c…

Marin说PCB之POC电路layout设计仿真案例---03

今天天中午午休的时候&#xff0c;我刚要打开手机的准备刷抖音看无忧传媒的学生们的“学习资料”的时候&#xff0c;看到CSDN -APP上有提醒&#xff0c;一看原来是一位道友发的一个问题&#xff1a; 本来小编最近由于刚刚从国外回来&#xff0c;手上的项目都已经结束了&#xf…

Matlab:音频处理

用Matlab绘制一段音频信号在时域上的波形图&#xff0c;然后用低通滤波器滤掉噪音并再次绘制 1、导入音频文件 filename X:\1.mp3; % 替换为你的音频文件路径 [x, Fs] audioread(filename); 2、获取音频信号长度 len length(x); 3、计算时间轴 t (0:len-1) / Fs; 4、…

小程序properties默认值定义及父子组件的传值

因经常写vue&#xff0c;很久没写小程序&#xff0c;容易串频道&#xff0c;现记录一下小程序的组件用法、监听传入值及父子传值方式 首先小程序中传值是没有&#xff1a;(冒号)的&#xff0c;其次properties中定义默认值不需要写default 1.自定义组件中&#xff0c;首先json…

踩坑——纪实

开发踩坑纪实 1 npm安装1.1 查看当前的npm镜像设置1.2 清空缓存1.3 修改镜像1.4 查看修改结果1.5 重新安装vue 2 VScode——NPM脚本窗口找不到3 springboot项目中updateById()失效4 前端跨域4.1 后端加个配置类4.2 CrossOrigin注解 5 路由出口6 springdoc openapi3 swagger3文件…

C语言函数递归

文章目录 一、递归1.递归的概念2.递归的思想3.递归的限制条件 二、递归的一些典型例子1.求一个数的阶乘2.顺序打印一个整数的每一位3.汉诺塔4.青蛙跳台阶5斐波那契数列递归和迭代的对比 一、递归 1.递归的概念 递归是学习C语言函数绕不开的一个话题&#xff0c;那什么是递归呢…

PyTorch中Tensor简介

PyTorch中所有的操作都是基于Tensor&#xff08;张量&#xff09;的&#xff0c;因此理解张量的含义并能够自由创建张量是十分必要的。 张量是PyTorch中最基本的操作对象。我们可以用数学中的概念来辅助理解一下张量&#xff0c;如图5-1所示。 标量&#xff08;Scalar&#x…

c#数据库的增删改查

** 安装数据库包 ** 在使用 SQLite 数据库时&#xff0c;你需要安装适当的 NuGet 包来提供与 SQLite 的集成。 1.打开 Visual Studio 中的你的项目 2.在顶部菜单栏中选择 “项目” -> “管理 NuGet 包” 3.在 NuGet 管理器中搜索 “System.Data.SQLite” 4.找到适合你项目…

【openlayers系统学习】1.1渲染GeoJSON,添加link交互

一、渲染GeoJSON 在进入编辑之前&#xff0c;我们将看一下使用矢量源和图层进行基本要素渲染。Workshop在 data​ 目录中包含一个 countries.json​ GeoJSON文件。我们首先加载该数据并将其渲染在地图上。 首先&#xff0c;编辑 index.html​ 以便向地图添加深色背景&#xf…

使用llama.cpp实现LLM大模型的格式转换、量化、推理、部署

使用llama.cpp实现LLM大模型的量化、推理、部署 大模型的格式转换、量化、推理、部署概述克隆和编译环境准备模型格式转换GGUF格式bin格式 模型量化模型加载与推理模型API服务模型API服务(第三方)GPU推理 大模型的格式转换、量化、推理、部署 概述 llama.cpp的主要目标是能够在…

【软考中级 软件设计师】数据结构

数据结构是计算机科学中一个基础且重要的概念&#xff0c;它研究数据的存储结构以及在此结构上执行的各种操作。在准备软考中级-软件设计师考试时&#xff0c;掌握好数据结构部分对于通过考试至关重要。下面是一些核心知识点概览&#xff1a; 基本概念&#xff1a; 数据结构定义…

VBA_MF系列技术资料1-615

MF系列VBA技术资料1-615 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-0…

spring-boot集成slf4j(二)logback配置详解

一、configuration 根节点&#xff1a;configuration&#xff0c;作为顶级标签&#xff0c; 可以用来配置一些lockback的全局属性&#xff0c;常见的属性如下&#xff1a; &#xff08;1&#xff09;scan“true” &#xff1a;scan是否开启自动扫描&#xff0c;监控配置文件更…

el-table 组件实现 “合并单元格 + N行数据小计” 功能

目录 需求 - 要实现的效果初始代码代码升级&#xff08;可供多个表格使用&#xff09;CommonTable.vue 子组件 使用子组件1 - 父组件 - 图1~图3使用效果展示 使用子组件2 - 父组件 - 图4使用效果展示 注意【代码优化 - 解决bug】 需求 - 要实现的效果 父组件中 info 数据示例 …

内网安全之证书服务基础知识

PKI公钥基础设施 PKI(Public Key Infrastructure)公钥基础设施&#xff0c;是提供公钥加密和数字签名服务的系统或平台&#xff0c;是一个包括硬件、软件、人员、策略和规程的集合&#xff0c;用来实现基于公钥密码体制的密钥和证书的产生、管理、存储、分发和撤销等功能。企业…