【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-public

kubectl 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=3

kubectl -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 endpoints

kubectl 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-service

kubectl 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 test

kubectl 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

 # 获取指定名称空间的pod
 kubectl get pod -n kube-system
 

 # 获取所有名称空间的pod
 kubectl get pod -A 

 # 查看pod的详细信息,以yaml格式或json格式显示
 kubectl get pods -o yaml
 kubectl get pods -o json
 
 # 查看pod的标签信息
 kubectl get pod -A --show-labels 
 # 根据Selector(label query)来查询pod
  kubectl 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

​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于QEMU-aarch64学习UEFI(EDK2)-7Print打印函数

1 基于QEMU-aarch64学习UEFI(EDK2)-7Print打印函数 文章目录 1 基于QEMU-aarch64学习UEFI(EDK2)-7Print打印函数1.1 Print打印函数输出字符串1.2 Print打印函数其他用法程序开发我们以 edk2-stable202302版本为准。 1.1 Print打印函数输出字符串 我们把edk2/MdeModulePkg/App…

利用 MongoDB Atlas 进行大模型语义搜索和RAG

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

基于JAVA的Dubbo 实现的各种限流算法

在基于 Java 的 Dubbo 实现中&#xff0c;限流&#xff08;Rate Limiting&#xff09;同样是一个关键的需求。Dubbo 是阿里巴巴开源的一款高性能 Java RPC 框架&#xff0c;广泛应用于分布式服务架构中。实现限流可以帮助服务在高并发场景下保持稳定性和可靠性。以下是几种常见…

PostgresSQL开启归档模式

文章目录 一、查询数据库归档是否开启1、查看数据目录(找出conf文件位置)2、查看归档是否开启 二、开启归档模式&#xff08;开启后有一定的性能损耗&#xff09;1、创建归档目录2、修改postgresql.conf配置文件3、重启pg 三、验证归档情况1、查看归档是否开启2、检查点 , 刷新…

04-Json/Ajax/Vue的知识

1. Json结构 1.1 Json概述 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;实现数据前后端交互。 它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。 JSON采用完全独立于程序语言的文本格式。这些特性使JSON成为理想的数据交换…

前端 CSS 经典:好看的标题动画

前言&#xff1a;好看的标题动画实现。 效果&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><…

注意力机制篇 | MSFE:即插即用的多尺度滑窗注意力(附源码实现)

前言:Hello大家好,我是小哥谈。多尺度滑窗注意力(Multi-Scale Sliding Window Attention,MSFE)是一种用于处理图像的深度学习模型。它通过引入多尺度特征提取和滑窗注意力机制来提高图像识别的准确性。在MSFE中,模型采用多尺度卷积神经网络来提取图像的特征,然后使用滑窗…

3d数字化虚拟交互展厅让您紧跟时代的步伐

虚实融合打破边界&#xff0c;北京VR虚拟数字展厅搭建让体验者彷如置身于一部三维电影中&#xff0c;可以对场景中的物体、角色、模型进行自由参观和体验&#xff0c;并且系统支持随时更新&#xff0c;让您紧跟时代的步伐&#xff0c;领略更新的展览风采。 除了常见的科普培训&…

服务端Web资源缓存

1.前言 虽然客户端缓存效果很好&#xff0c;但它有一个核心问题&#xff1a;要在本地提供资源&#xff0c;必须先将其存储在缓存中。因此&#xff0c;每个客户端都需要其缓存的资源。如果请求的资源需要大量计算&#xff0c;则无法扩展。服务器端缓存背后的理念是计算一次资源…

Eclipse下载安装教程(包含JDK安装)【保姆级教学】【2024.4已更新】

目录 文章最后附下载链接 第一步&#xff1a;下载Eclipse&#xff0c;并安装 第二步&#xff1a;下载JDK&#xff0c;并安装 第三步&#xff1a;Java运行环境配置 安装Eclipse必须同时安装JDK &#xff01;&#xff01;&#xff01; 文章最后附下载链接 第一步&#xf…

高校多云资源统一管理和监控解决方案

项目背景与业务场景 随着云计算技术不断发展更新&#xff0c;高校科研用户对云服务需求不断提高&#xff0c;科研又是基础创新的来源&#xff0c;但算力少、共享难、不好用一直是科研的突出问题。小的科研团队经费少设备少&#xff0c;中型的科研团队设备有限&#xff0c;高峰…

【企业动态】东胜物联成为AWS硬件合作伙伴,助力实现边缘智能

近日&#xff0c;AIoT硬件设备供应商东胜物联与全球领先的云计算服务提供商亚马逊云&#xff08;AWS&#xff09;达成合作关系&#xff0c;共同致力于推动物联网技术的发展&#xff0c;为企业客户提供更智能、灵活的硬件解决方案&#xff0c;助力智能化升级和数字化转型。 作为…

Vue3刷新页面后404,需要配置IIS的URL重写

Vue3刷新页面后404&#xff0c;需要配置IIS的URL重写 1.下载IIS重写工具 https://download.csdn.net/download/cplvfx/89331452 2.IIS的Url配置 安装后IIS会显示《URL重写》 选中你的站点 点击重写 点击《增加规则》 点击-空白规则 2.1匹配URL 请求的URL&#xff1a; 选择…

ArcGIS批量更改所有符号的格式

这期谈一下&#xff0c;如何修改所有符号的样式。 比如&#xff0c;我们需要更改下图的面符号位无轮廓的 该如何批量修改的呢&#xff1f; 视频教学吧&#xff1a; ArcGIS批量更改所有符号的格式 ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放-CSDN博客文章浏览阅…

MavLinK协议

由于在公司需要使用这个&#xff0c;我就写一个文章用于入门级别 简单介绍 MAVSDK是PX4开源团队贡献的基于mavlink通信协议的用于无人机应用开发的SDK&#xff0c;其可以部署在Windows、Linux、Android等多种平台&#xff0c;并且支持多种语言如c/c、python、Java等。 在官网…

Docker-数据卷的挂载

文章目录 数据卷概念数据卷实现机制数据卷特性数据卷操作数据卷挂载通用命令匿名挂载具名挂载数据卷继承容器数据卷只读容器数据卷读写-默认 总结 数据卷概念 为了很好的实现数据保存和数据共享&#xff0c;Docker提出了Volume这个概念&#xff0c;简单的说就是绕过默认的联合文…

【手写大跟堆详解】

文章目录 大跟堆介绍大跟堆的结构大跟堆的应用场景大跟堆的代码实现 大跟堆介绍 大根堆&#xff08;Max Heap&#xff09;是一种特殊的二叉树结构&#xff0c;它满足以下两个条件&#xff1a; 1.完全二叉树&#xff1a;大根堆是一棵完全二叉树&#xff0c;即除了最后一层外&am…

ORACLE 资源管理参数与等待事件resmgr:cpu quantum

RESOURCE_MANAGER_PLAN 先来看下参数的含义 官网链接&#xff1a;RESOURCE_MANAGER_PLAN (oracle.com) 意思翻译过来这个参数用于资源计划。后边的看完也不是很明白具体的作用 于是参考了以下文章 Oracle 参数 RESOURCE_MANAGER_PLAN 官方解释&#xff0c;作用&#xff0c;…

Kubernetes——Pod详解

目录 一、Pod基础概念 1.概念 2.使用方式 3.Pause容器 3.1网络 3.2存储 4.Pod容器分类 4.1自主式Pod 4.2控制器管理的Pod 二、Pod的分类 1.基础容器&#xff08;infrastructure container&#xff09; 2.初始化容器&#xff08;initcontainers&#xff09; 2.1Ini…

前端vue用el-table如何实现表头内容过长换行处理,实现换行效果

前端vue用el-table如何实现表头内容过长换行处理&#xff0c;实现换行效果 这是效果图 有两种方法&#xff0c;一种简易版本&#xff0c;一种万能方法,都是el-table&#xff0c;先看文档 表头标题是可以自定义的 方法一 label的解释写在代码里面了&#xff0c;这里会自动形成换…