目录
一、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 访问servicecontainerPort: 容器内部进程使用的端口
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