2.基础资源管理
一、資源的管理方式
1.命令式對象管理
直接使用命令行去操作K8S資源
Kubectl run nginx-pod --image=nginx-1.17.1 --port=802.命令式對象配置
通過命令配置和配置文件去操作K8S資源。命令可以式增刪改查
kubctl create/patch -f nginx-pod.yaml3.聲明式對象配置
kubctl apply -f nginx-pod.yamlapply:如果pod存在就更新如果pod不存在就創建聲明式對象配置只有apply一個命令,并且只能新增和更新pod| 命令式對象管理 | 對象 | 測試 | 簡單 | 只能操作活動對象,無法審計、跟蹤 |
| 命令式對象配置 | 文件 | 開發 | 可以審計、跟蹤 | 項目大時,配置文件多,操作麻煩 |
| 聲明式對象配置 | 目錄 | 開發 | 支持目錄操作 | 意外情況下難以調試 |
二、命令式對象管理
kubctl是K8S集群的命令行工具,通過kubctl能對集群本身進行管理,并能夠在集群上進行容器化應用的安裝部署,查看幫助信息
kubctl --help kubctl 命令 ——help1.語法
kubctl [command] [type] [name] [flags](1)command:指定要對資源執行的操作,例如 create、get、describe 和 delete
(2)type:指定資源類型,資源類型是大小寫敏感的,開發者能夠以單數、復數和縮略的 形式。例如:
(3)name:指定資源的名稱,名稱也大小寫敏感的。如果省略名稱,則會顯示所有的資源.
(4)flags:指定可選的參數。例如,可用-s 或者–server 參數指定 Kubernetes API server 的地址和端口。
2.常用操作
| 基本命令 | create | 創建一個資源 |
| edit | 編輯一個資源 | |
| get | 獲取一個資源 | |
| patch | 更新一個資源 | |
| delete | 刪除一個資源 | |
| explain | 展示資源文檔 | |
| 運行和調試 | run | 在集群中運行一個指定的鏡像 |
| expose | 暴漏資源為service | |
| describe | 顯示資源內部信息 | |
| logs | 輸出容器在pod中的日志 | |
| attach | 進入運行中的容器 | |
| exec | 執行容器中的一個命令 | |
| cp | 在Pod內外復制文件 | |
| rollout | 管理資源的發布 | |
| scale | 擴容pod的數量 | |
| autoscale | 自動調整pod的數量 | |
| 高級命令 | apply | 通過文件對資源進行配置 |
| label | 更新資源上的標簽 | |
| 其它命令 | cluseter-info | 顯示集群信息 |
| version | 顯示當前server和client的版本 |
簡單的演示
#查看所有podkubctl get pod#查看某個podkubctl get pod pod的名字#查看命名空間kubectl get ns#查看K8S中支持的所有資源kubectl api-resources3.實例
3.1 創建一個命名空間(namespace)
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl create ns pangbb namespace/pangbb created#查看創建好的命名空間 [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get ns |grep pangbb pangbb Active 65s3.2 在指定的命名空間下創建一個nginx pod
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl run pangbb-nginx --image=nginx -n pangbb pod/pangbb-nginx created#查看pangbb命名空間下 名字為pangbb-nginx的pod [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod -n pangbb NAME READY STATUS RESTARTS AGE pangbb-nginx 1/1 Running 0 51s3.3 刪除pod
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl delete pod pangbb-nginx -n pangbb pod "pangbb-nginx" deleted3.4 刪除命名空間
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl delete ns pangbb namespace "pangbb" deleted三、命名空間
命名空間的作用主要是用來實現"多套環境的資源隔離"或者"多租戶的資源隔離"
1.集群默認的命名空間
#K8S集群創建好有默認的4個命名空間 [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get ns NAME STATUS AGE default Active 385d 所有沒有指定空間的pod都會被分配到這個默認的空間中 kube-node-lease Active 385d 集群節點之間的心態維護 kube-public Active 385d 此命名空間下的資源可以被所有人訪問 kube-system Active 385d K8S系統創建的資源都在這個命名空間2.查看某個命名空間
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get ns mall500 NAME STATUS AGE mall500 Active 361d3.管理命名空間
3.1 創建命名空間
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl create ns zhangsan namespace/zhangsan created [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get ns zhangsan NAME STATUS AGE zhangsan Active 7s3.2 刪除命名空間
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl delete ns zhangsan namespace "zhangsan" deleted [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get ns zhangsan Error from server (NotFound): namespaces "zhangsan" not found3.3 使用yaml文件管理命名空間
[root@t3-tkhijbs-jcsszy-app09 ymal]# cat test.yaml apiVersion: v1 kind: Namespace metadata:name: zhangsan[root@t3-tkhijbs-jcsszy-app09 ymal]# kubectl apply -f test.yaml namespace/zhangsan created[root@t3-tkhijbs-jcsszy-app09 ymal]# kubectl get ns zhangsan NAME STATUS AGE zhangsan Active 52s #利用yaml文件刪除命名空間 [root@t3-tkhijbs-jcsszy-app09 ymal]# kubectl delete -f test.yaml namespace "zhangsan" deleted[root@t3-tkhijbs-jcsszy-app09 ymal]# kubectl get ns |grep zhangsan四、pod
1.創建并運行pod
基本格式:
kubectl run pod的名字 --image=pod使用的鏡像名稱 --port=端口 --namespace=命名空間創建一個pod
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl run nginx01 --image=nginx --port=80 pod/nginx01 created查看pod信息
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod nginx01 NAME READY STATUS RESTARTS AGE nginx01 1/1 Running 0 2m48s#查看額外的信息 [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod nginx01 -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx01 1/1 Running 0 6m48s 10.244.2.85 node03 <none> <none>查看pod的詳細信息
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl describe pod nginx012.訪問pod
查看pod的IP地址
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod nginx01 -o wide |awk '{print $6}' IP 10.244.2.85根據pod的IP地址訪問pod
[root@t3-tkhijbs-jcsszy-app09 ~]# curl -I 10.244.2.85 HTTP/1.1 200 OK Server: nginx/1.21.6 Date: Thu, 03 Feb 2022 07:54:23 GMT Content-Type: text/html Content-Length: 615 Last-Modified: Tue, 25 Jan 2022 15:03:52 GMT Connection: keep-alive ETag: "61f01158-267" Accept-Ranges: bytes3.刪除pod
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl delete pod nginx01 pod "nginx01" deleted五、Label
它的作用就是在資源上添加標識,用來對他們進行區分和選擇
創建一個測試pod
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl run nginx01 --image=nginx --port=80 pod/nginx01 created1.查看某個pod的label
#這里有個默認的標簽: run=nginx01 [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod nginx01 --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx01 1/1 Running 0 117s run=nginx012.在命令行給pod打標簽
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl label pod nginx01 version=1.0 pod/nginx01 labeled[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod nginx01 --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx01 1/1 Running 0 8m run=nginx01,version=1.03.更新標簽
–overwrite
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl label pod nginx01 version=2.0 --overwrite pod/nginx01 labeled [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod nginx01 --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx01 1/1 Running 0 10m run=nginx01,version=2.04.根據標簽篩選pod
-l: -l參數根據標簽進行篩選
#這里有兩個不同的pod 并且標簽不同 [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx01 1/1 Running 0 12m run=nginx01,version=2.0 nginx02 1/1 Running 0 47s run=nginx02,version=1.0 [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pods -l version=1.0 --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx02 1/1 Running 0 2m58s run=nginx02,version=1.05.刪除標簽
刪除標簽就是在標簽的后邊加一個"減號"
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod nginx01 --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx01 1/1 Running 0 17m run=nginx01,version=2.0#刪除了version標簽 [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl label pod nginx01 version- pod/nginx01 labeled[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get pod nginx01 --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx01 1/1 Running 0 18m run=nginx01六、控制器deployment
pod控制器用于pod管理,確保pod資源符合預期的狀態,當pod的資源出現故障時,會嘗試進行重啟或重建pod
deployment只是眾多控制器中的一種
使用yaml文件創建deployment控制器
[root@t3-tkhijbs-jcsszy-app09 yaml]# cat nginx-pod.yaml apiVersion: apps/v1 kind: Deployment metadata:name: nginx-testlabels:app: nginxspec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginx-containerimage: nginxports:- containerPort: 80protocol: TCP [root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl apply -f nginx-pod.yaml deployment.apps/nginx-test created [root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-test-574b9fcb9-2xg27 1/1 Running 0 89s nginx-test-574b9fcb9-5ktdp 1/1 Running 0 89s七、service
先看一個例子:
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP nginx-test-96577bc6d-9ztgc 1/1 Running 0 7m55s 10.244.2.95 nginx-test-96577bc6d-q8zz4 1/1 Running 0 7m55s 10.244.2.94刪除第一個pod
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl delete pod nginx-test-96577bc6d-9ztgc由于控制器會自動在創建新的pod,也會給新的pod新的IP地址.如下:2.95變成了96
[root@t3-tkhijbs-jcsszy-app09 yaml]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP nginx-test-96577bc6d-gvv4n 1/1 Running 0 37s 10.244.2.96 nginx-test-96577bc6d-q8zz4 1/1 Running 0 10m 10.244.2.94雖然每一個pod都會分配一個單獨的IP,然而卻有以下問題:
pod ip 會隨著pod的重建產生變化
pod ip 僅僅是集群內可見的虛擬IP,外部無法訪問
此時service就解決了這個問題。
service可以看作是一組同類pod對外的訪問接口。借助service,應用可以方便的實現服務發現和負載均衡
1.集群IP
這種類型的service只能適用于集群內部訪問,不在K8S集群中是訪問不到的
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl expose deployment nginx-test \ --name=svc-nginx --type=ClusterIP --port=80 --target-port=80 #顯示結果如下: service/svc-nginx exposed#查看服務 [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get svc |grep nginx svc-nginx ClusterIP 10.0.0.47 <none> 80/TCP #訪問集群IP curl 10.0.0.472.nodeport
這種類型的service集群外部也可以訪問
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl expose deployment nginx-test \ > --name=svc-nginx --type=NodePort --port=80 --target-port=80[root@t3-tkhijbs-jcsszy-app09 ~]# [root@t3-tkhijbs-jcsszy-app09 ~]# kubectl get svc |grep nginx svc-nginx NodePort 10.0.0.238 <none> 80:32383/TCP3.刪除service
[root@t3-tkhijbs-jcsszy-app09 ~]# kubectl delete svc svc-nginx service "svc-nginx" deleted總結
- 上一篇: [book]《巅峰表现》
- 下一篇: 《从0到1》读书笔记第2章像1999 年