目錄
一、kubectl基本命令
1.1 基本信息查看
陳述式資源管理方法:
1.kubernetes集群管理集群資源的唯一入口是通過相應的方法調用apiserver的接口
2.kubectl是官方的CLI命令行工具,用於與apiserver進行通信,將用戶在命令行輸入的命令,組織並轉化為apiserver能識別的信息,進而實現管理k8s各種資源的一種有效途徑
3.kubectl的命令大全:kubectl --help
k8s中文文檔:http://docs.kubernetes.org.cn/683.html
4.對資源的增、刪、查操作比較方便,但對改的操作就不容易了
1.查看版本信息
kubectl version
2.查看資源對象簡寫
kubectl api-resources
3.查看集群信息
kubectl cluster-info
4.配置kubectl自動補全
source <(kubectl completion bash)
5.node節點查看日志
journalctl -u kubelet -f
1.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的資源
2.查看master節點狀態
kubectl get componentstatuses
kubectl get cs
3.查看命令空間
kubectl get name space
kubectl get ns
//命令空間的作用:用於允許不同 命令空間的相同類型的資源重名
4.查看default命名空間的所有資源
kubectl get all [-n default]
5.創建命名空間app
kubectl create ns gxd
kubectl get ns
6.刪除命名空間app
kubectl delete namespace gxd
kubectl get ns
7.在命名空間kube-public創建副本控制器(deployment) 來啟動Pod (nginx-test)
kubectl create deployment nginx-test --image=nginx -n kube-public
8.描述某個資源的詳細信息
kubectl describe deployment nginx-test -n kube-public
kubectl describe pod nginx-test-65c98cd596-jct2g -n kube-public
9.查看命名空間kube-public中的pod信息
kubectl get pods -n kube-public
10.kubectl exec可以跨主機登錄容器,docker exec只能在容器所在主機上登錄
kubectl exec -it nginx-test-65c98cd596-jct2g bash -n kube-public
11.刪除(重啟) pod資源,由於存在deployment/rc之類的副本控制器,刪除pod也會重新拉起來
kubectl delete pod nginx-test-65c98cd596-jct2g -n kube-public
12.若pod無法刪除,總是處於terminate狀態, 則要強行刪除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示過渡存活期,默認30s,在刪除pod之前允許POD慢慢終止其上的容器進程,從而優雅退出,0表示立即終u止pod
13.擴容
kubectl scale deployment nginx-test --replicas=3 -n kube-public
14.擴容
kubectl scale deployment nginx-test --replicas=1 -n kube-public
15.刪除副本控制器
kubectl delete deployment nginx-test -n kube-public
或者kubectl delete deployment/nginx-test -n kube-public
1.2 項目的生命周期:創建–>發布–>更新–>回滾–>刪除
1.2.1 創建kubectl run命令
●創建並運行一個或多個容器鏡像
●創建一個deployment或job來管理容器
kubectl run --help
//啟動nginx 實例,暴露容器端口80,設置副本數3
kubectl run nginx --image=nginx:1.14 --port=80 --replicas=3
kubectl get pods
kubectl get all
1.2.2 發布kubectl expose命令
1.將資源暴露為新的Service
kubectl expose --help
2.為deployment的nginx創建service,並通過Service的80端口轉發至容器的80端口上,Service的名稱為nginx-service,類型為NodePort
kubectl expose deployment nginx --port=8000 --target-port=80 --name=nginx-service --type=NodePort
==========================================================
Kubernetes之所以需要Service, 一方面是因為Pod的IP 不是固定的(Pod可能會重建),另一-方面則是因為- -組Pod
實例之間總會有負載均衡的需求。
Service通過label Selector實現的對一組的Pod的訪問。
對於容器應用而言,Kubernetes 提供了基於VIP (虛擬IP)的網橋的方式訪問 Service, 再由Service 重定向到相應的Pod。
service的類型:
●ClusterIP:提供一個集群內部的虛擬IP以供Pod訪問( service默認類型)
●NodePort:在每個Node.上打開一個端口以供外部訪問,Kubernetes將會在每個Node.上打開一個端口並且每個Node的端口都是一樣的,通過
NodeIp:NodePort的方式Kubernetes集群外部的程序可以訪問Service。
注:每個端口只能是一種服務,端口范圍只能是30000-32767
●LoadBalancer:通過外部的負載均衡器來訪問,通常在雲平台部署LoadBalancer還需要額外的費用。
==========================================================
3.查看pod網絡狀態詳細信息和Service暴露的端口
kubectl get pods,svc -o wide
4.查看關聯后端的節點
kubectl get endpoints
5.查看service的描述信息
kubect1 describe svc nginx
6.分半在node01和node02節點上操作,查看負載均衡端口
yum install ipvsadm -y
ipvsadm -Ln
7.在master01主節點分別在3個pod內寫入網頁文件
kubectl exec -it nginx-65fc77987d-bfckn bash
echo '111111' > /usr/share/nginx/html/index.html
kubectl exec -it nginx-65fc77987d-n6rzk bash
echo '222222' > /usr/share/nginx/html/index.html
kubectl exec -it nginx-65fc77987d-pgpfh bash
echo '333333' > /usr/share/nginx/html/index.html
8.瀏覽器訪問clusterip和nodeport
curl 10.100.72.167:8000
curl 192.168.80.11:31430
curl 192.168.80.12:31430
curl 192.168.80.13:31430
8.在master01操作 查看訪問日志
kubectl logs nginx-65fc77987d-bfckn
kubectl logs nginx-65fc77987d-n6rzk
kubectl logs nginx-65fc77987d-pgpfh
1.2.3 更新kubectl set
1.更改現有應用資源一些信息
kubectl set --help
//獲取修改模板
kubectl set image --help
Examp1es:
# Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox
container image to 'busybox'.
kubectl set image deploynent/nginx busybox=busybox nginx=nginx:1.9.1
2.查看當前nginx 的版本號
curl -I http://192.168.80.11:31430
curl -I http://192.168.80.12:31430
curl -I http://192.168.80.13:31430
3.將nginx版本更新為1.15版本
kubectl set image deployment/nginx nginx=nginx:1.15
4.處於動態監聽pod狀態,由於使用的是滾動更新方式,所以會先生成--個新的pod,然后刪除--個舊的pod,往后依次類推
kubectl get pods -w
5.再看更新好后的Pod的ip會改變
kubectl get pods -o wide
6.再看nginx 的版本號
curl -I http://192.168.80.11:31430
curl -I http://192.168.80.12:31430
curl -I http://192.168.80.13:31430
1.2.4 回滾kubect1 rollout
1.對資源進行回滾管理
kubect1 rollout --help
2.查看歷史版本
kubectl rollout history deployment/nginx
3.執行回滾到上一個版本
kubectl rollout undo deployment/nginx
4.執行回滾到指定版本
kubectl rollout undo deployment/nginx --to-revision=3
5.檢查回滾狀態
kubectl rollout status deployment/nginx
1.2.5 刪除kubectl delete
1.刪除副本控制器
kubectl delete deployment.apps/nginx
2.刪除service
kubectl delete service/nginx-service
kubectl get all
1.3 金絲雀發布(Canary Release)
Deployment控制器支持自定義控制更新過程中的滾動節奏,如“暫停(pause)”或“繼續(resume)”更新操作。比如等待第一批新的Pod資源創
建完成后立即暫停更新過程,此時,僅存在一部分新版本的應用,主體部分還是舊的版本。然后,再篩選一小部分的用戶請求路由到新版本的Pod應用,繼續觀察能否穩定地按期望的方式運行。確定沒問題之后再繼續完成余下的Pod資源滾動更新,否則立即回滾更新操作。這就是所謂的金絲雀發布
1.更新deployment的版本,並配置暫停deployment
kubectl run nginx --image=nginx:1.14 --port=80 --replicas=3
kubectl expose deployment nginx --port=8000 --target-port=80 --name=nginx-service --type=NodePort #先創建資源並創建3個副本
kubectl set image deployment nginx nginx=nginx:1.16 && kubectl rollout pause deployment nginx #更新並暫停
kubectl rollout status deployment nginx #觀察更新狀態
2.監控更新的過程,可以看到已經新增了一個資源,但是並未按照預期的狀去刪除一個舊的資源,就是因為使用了pause暫停命令
kubectl get pods,svc -o wide
kubectl get pods -w
curl [-I] 10.104.98.19:8000
curl [-I] 192.168.80.11:31034
3.確保更新的pod沒問題了,繼續更新
kubectl rollout resume deployment nginx
4.查看最后的更新情況
kubectl get pods -w
curl [-I] 10.104.98.19:8000
curl [-I] 192.168.80.11:31034
二、聲明式管理方法
1.適合於對資源的修改操作
2.聲明式資源管理方法依賴於資源配置清單文件對資源進行管理 資源配置清單文件有兩種格式: yaml (人性化,易讀),json (易於api接口解析) 3.對資源的管理,是通過事先定義在統–資源配置清單內,再通過陳述式命令應用到k8s集群里
4.語法格式: kubectl create/app1y/delete -f xxxx.yaml
1.查看資源配置清單
kubectl get deployment nginx -o yaml
2.解釋資源配置清單
kubectl explain deployment.status #資源清單里的字段
kubectl get service nginx-service -o yaml
kubectl explain service.metadata
3.修改資源配置清單並應用
1)離線修改:
修改yaml文件,並用kubectl apply -f xxxx.yaml文件使之生效
注意:當apply不生效時,先使用delete清除資源,再apply創建資源
kubectl get service nginx-service -o yaml > nginx-svc.yaml
vim nginx-svc.yaml
#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc
==========================================================
2)在線修改:
直接使用kubectl edit service nginx-service
在線編輯資源配置清單並保存退出即時生效(如port:8888)
PS:此修改方式不會對yaml文件內容修改
4.刪除資源配置清單
陳述式刪除:
kubectl delete service nginx-service
聲明式刪除:
kubectl delete -f nginx-svc.yaml