【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.pswp.cn/bicheng/14541.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14541.shtml
英文地址,請注明出處:http://en.pswp.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;使用所需的功能。 一、取消單元格…

leetcode刷題記錄:前綴和

https://labuladong.online/algo/problem-set/perfix-sum/#%E8%A7%A3%E6%B3%95%E4%BB%A3%E7%A0%81-3 適用范圍&#xff1a;快速、頻繁地計算一個索引區間內的元素之和 303 區域和檢索&#xff1a;數組不可變 https://leetcode.cn/problems/range-sum-query-immutable/ class …

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

如何制作正方形,給 placeholder 換顏色,多行省略號,純css小三角,清除浮動,清除 margin,隱藏滾動條,隱藏 number 小圖標

https://www.npmjs.com/package/sass-runtime-tool yarn add sass-runtime-tool -D # or npm i -D sass-runtime-tool use "sass-runtime-tool/all.scss" as *;// 改變 placeholder 的顏色和大小 .input {include placeholder(red) {font-size: 12px;} } /* 或者 *…

一個模板元函數來檢查一個類是否有一個特定的成員

通過創建一個模板元函數來檢查一個類是否有一個特定的成員。以下是一個例子&#xff1a; #include <type_traits>template<typename T, typename void> struct has_type_member : std::false_type {};template<typename T> struct has_type_member<T, s…

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…

OSPF原理(1)

一、OSPF介紹 OSPF&#xff08;Open Shortest Path First&#xff0c;開放最短路徑優先&#xff09;協議作為一種基于鏈路狀態的路由協議&#xff0c;它為網絡中的路由器提供了一種高效、可靠的方式來共享路由信息&#xff0c;并計算出最短路徑。 特點&#xff1a; 收斂速度快…

踩坑——紀實

開發踩坑紀實 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;那什么是遞歸呢…

【算法刷題day56】 Leetcode:647. 回文子串、516. 最長回文子序列

文章目錄 Leetcode 647. 回文子串解題思路代碼總結 Leetcode 516. 最長回文子序列解題思路代碼總結 草稿圖網站 java的Deque Leetcode 647. 回文子串 題目&#xff1a;647. 回文子串 解析&#xff1a;代碼隨想錄解析 解題思路 斜上三角&#xff0c;從左下往上遍歷&#xff0c…

【代碼隨想錄】動態規劃之完全背包問題與打家劫舍問題

前言 更詳細的在大佬的代碼隨想錄 (programmercarl.com) 本系列僅是簡潔版筆記&#xff0c;為了之后方便觀看 完全背包 for(int i 0; i < weight.size(); i) { // 遍歷物品for(int j weight[i]; j < bagWeight; j) { // 遍歷背包容量dp[j] max(dp[j], dp[j - weigh…

ElementPlus Steps步驟條插槽 v-slot:title

<el-steps finish-status"success"><el-stepv-for"item in uniqueReverseArr":status"item.status 2? success: item.status 3? error: item.status 1? finish: process"click.native"stepClick(item)"><templat…

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.找到適合你項目…