HashMap源碼 目錄 1.1 包含的屬性 1.2 構造器 1.3 hash方法源碼 1.4 put源碼 1.5 resize源碼 1.6 table 變數為什麼用transient 修飾 1.1 包含的屬性 public class HashMap<K,V> extends AbstractMa ...
K8S 及docker使用指北
文章目錄 1
一、Docker常用命令總結 5
1、Docker容器常用操作 6
(1)鏡像的查看與刪除 6
(2)容器的啟動與進入 6
(3)通過容器提交鏡像 7
(4)鏡像的保存與載入 7
(5)容器與主機之間進行數據拷貝 7
(6)鏡像重命名 8
(7)使用GPU運行容器 8
(8)容器的保存與導入 8
(9)鏡像的拉取與上傳 9
2、註意事項 9
二、k8s常用命令總結 10
1、kubectl用法概述 10
2、kubectl輸出格式 13
3、kubectl常用操作 14
(1)創建資源對象 14
(2)查看資源對象 15
(3)描述資源對象 15
(4)刪除資源對象 15
(5)執行容器命令 16
(6)查看容器日誌 16
(7)查看集群信息 16
三、nvidia-smi常用命令總結 16
1、顯示所有GPU的當前信息狀態 16
2、實時查看GPU使用情況 18
四、k8s陳述式管理 18
- 陳述式資源管理方法 18
- k8s相關信息查看 18
2.1 查看版本信息 18
2.2 查看資源對象簡寫 18
2.3 查看集群信息 21
2.4 配置kubectl自動補全 21
2.5 查看日誌 21
2.6 基本信息查看 21
2.6.1 查看master節點狀態 21
2.6.2 查看命名空間 22
2.7 命名空間操作 22
2.7.1 查看default命名空間的所有資源 22
2.7.2 創建命名空間app 22
2.7.3 刪除命名空間app 23
2.8 deployment/pod操作 23
2.8.1 在命名空間kube-public創建副本控制器(deployment)來啟動Pod(nginx-test) 23
2.8.2 描述某個資源的詳細信息 23
2.8.3 查看命名空間kube-public中pod信息 24
2.8.4 登錄容器 24
2.8.5 刪除(重啟)pod資源 24
2.8.6 若無法刪除,總是處於terminate狀態,則要強行刪除pod 25
2.8.7 擴縮容 25
2.8.8 刪除副本控制器 26
2.9 增加/刪除label 26
2.9.1 增加label 26
2.9.2 刪除label 26 - K8S模擬項目 26
3.1 項目的生命周期 26
3.2 創建kubectl run命令 26
3.3 發佈kubectl expose命令 27
3.3.1 Service的作用 27
3.3.2 Service的類型 28
3.3.3 查看Pod網路狀態詳細信息和Service暴露的埠 28
3.3.4 查看關聯後端的節點 29
3.3.5 查看service的描述信息 29
3.3.6 查看負載均衡埠 29
3.3.7 訪問查看 30
3.3.8 查看訪問日誌 31
3.4 更新kubectl set 32
3.4.1 獲取修改模板 32
3.4.2 查看當前nginx的版本號 32
3.4.3 將nginx版本更新為1.15 32
3.4.4 監聽pod狀態 32
3.4.5 查看pod的ip變化 33
3.4.6 重新查看nginx版本號 33
3.5 回滾kubectl rollout 34
3.5.1 查看歷史版本 34
3.5.2 執行回滾到上一個版本 34
3.5.3 執行回滾到指定版本 35
3.5.4 檢查回滾狀態 35
3.6 刪除kubectl delete 36
3.6.1 刪除副本控制器 36
3.6.2 刪除service 36 - 金絲雀發佈/灰度發佈(Canary Release) 36
4.1 金絲雀發佈簡介 36
4.2 更新deployment的版本,並配置暫停deployment 36
4.2.1 創建pods 36
4.2.2 發佈服務 37
4.2.3 查看nginx版本 37
4.2.4 定義版本CHANGE-CAUSE 37
4.2.5 更新nginx版本為1.15並配置暫停 38
4.2.6 觀察更新狀態 38
4.2.7 監控更新的過程 38
4.2.8 查看nginx版本 39
4.2.9 查看並更新曆史版本change-cause 40
4.2.10 resume繼續更新 41
4.2.11 查看最後的更新情況 41
五、聲明式管理 41 - 聲明式管理方法 41
- 查看資源配置清單 42
- 解釋資源配置清單 44
- 修改資源配置清單並應用 45
4.1 離線修改 45
4.2 線上修改 46 - 刪除資源配置清單 46
5.1 陳述式刪除 46
5.2 聲明式刪除 46
一、Docker常用命令總結
1、Docker容器常用操作
(1)鏡像的查看與刪除
• 查看鏡像:docker images 或 docke image ls
• 刪除容器:docker rm 容器ID //註意刪除容器前先停止容器
• 刪除鏡像:docker rmi 鏡像名 //註意刪除鏡像前先刪除容器
(2)容器的啟動與進入
• 運行容器:docker run -it 鏡像名 /bin/bash
• 退出容器:exit 或者 Ctrl+P+Q
• 查看容器:docker ps -a
• 查看運行的容器:docker ps
• 容器停止:docker stop 容器ID
• 啟動容器:docker start 容器ID
• 重啟容器:docker restart 容器ID
• 重啟容器後進入互動式:docker start -i 5c6ce895b979
• 進入容器:docker attach 容器ID docker exec -it 容器ID /bin/bash
• 舉例:將nginx鏡像運行為一個容器:docker run -d -p 81:80 -it nginx /bin/bash //其中-d是保持後臺運行,-p 是埠映射,將內部的埠80向外部的埠81映射,/bin/bash就表示啟動容器後啟動bash。
(3)通過容器提交鏡像
• 提交鏡像:docker commit 容器ID 鏡像名[:tag] 舉例:docker commit f7507396068a vehicle_detect:v1
(4)鏡像的保存與載入
• 保存鏡像:docker save m2>m2.tar //保存m2鏡像到m2.tar文件
docker save m2 -o /home/m2.tar
• 鏡像載入:docker load<m2.tar
docker load -i m2.tar
(5)容器與主機之間進行數據拷貝
• 主機目錄拷貝到容器目錄:docker cp /data/test 96f7f14e99ab:/data/ # 將主機/data/test目錄拷貝到容器96f7f14e99ab的/data目錄下
• 主機目錄拷貝到容器目錄,目錄重命名:docker cp /data/test 96f7f14e99ab:/data # 將主機/data/test目錄拷貝到容器96f7f14e99ab中,目錄重命名為data
• 容器目錄拷貝到主機目錄:docker cp 96f7f14e99ab:/data /tmp/ # 將容器96f7f14e99ab的/data目錄拷貝到主機的/tmp目錄中
(6)鏡像重命名
• 重命名鏡像:docker tag ubuntu:15.10 asialee/ubuntu:v3 #將鏡像ubuntu:15.10標記為 asialee/ubuntu:v3 鏡像
(7)使用GPU運行容器
• 容器使用所有GPU:docker run -it --gpus all vehicle_detect:v1 /bin/bash
• 容器使用兩個GPU:docker run -it --gpus 2 vehicle_detect:v1 /bin/bash
• 容器指定GPU運行:docker run -it --gpus ' "device=1,2" ' vehicle_detect:v1 /bin/bash
• docker run -it --gpus ' "device=UUID-ABCDEF,1" ' vehicle_detect:v1 /bin/bash
(8)容器的保存與導入
• 將容器保存為tar文件:docker export -o m2.tar 容器ID
• 舉例:將id為a404c6c174a2的容器按日期保存為m2-20201016.tar文件
docker export -o m2-date +%Y%m%d
.tar a404c6c174a2
• 從歸檔文件中創建鏡像:docker import m2.tar m3:v1
• 舉例:從鏡像歸檔文件m2.tar創建鏡像,命名為asialee/m3:v1
docker import m2.tar asialee/m3:v1
區別:
• - docker save 保存的是鏡像(image),docker export 保存的是容器(container);
• - docker load 用來載入鏡像包,docker import 用來載入容器包,但兩者都會恢復為鏡像;
• - docker load 不能對載入的鏡像重命名,而 docker import 可以為鏡像指定新名稱。
(9)鏡像的拉取與上傳
• 從鏡像倉庫中拉取或者更新指定鏡像:docker pull
• 舉例:從Docker Hub下載ubuntu最新版鏡像:docker pull ubuntu
• 從Docker Hub下載REPOSITORY為ubuntu的所有鏡像:docker pull -a ubuntu
• 將本地的鏡像上傳到鏡像倉庫:docker push #要先登陸到鏡像倉庫
• 舉例:上傳本地鏡像m2:v1到鏡像倉庫中:docker push m2:v1
• 登錄鏡像倉庫:docker login local.harbor.com 用戶名/密碼
• docker login -u asialee -p root12345 local.harbor.com
• 鏡像上傳:docker push local.harbor.com/library/ai-detect
(10)查看docker容器內的IP
• 進入容器後,查看docker容器內的IP:cat /etc/hosts
2、註意事項
鏡像轉文件的命令是: docker save image > /root/image.tar
文件轉鏡像的命令是: docker load < /root/image.tar 或者 docker load -i /root/image.tar
錯誤 1 是: requested load from stdin, but stdin is empty
結論 : docker load 的時候, < 誤寫成 >, 會出現這個錯誤,並且原 tar 包會被修改,修改後就不可用了
錯誤 2 是: open /var/lib/docker/tmp/docker-import-054903443/repositories: no such file or directory
結論 : 如果你使用過錯誤1 中的命令,那麼即使之後的命令都是正確的,也會遇到上述錯誤,避免的辦法是不要輸錯命令。倘若已經輸錯了,那麼唯一可用的方法是刪除當前的 tar 包,並且重新獲取 tar 包。
二、k8s常用命令總結
kubectl是Kubernetes的命令行工具,可以讓用戶通過命令行的方式對Kubernetes集群進行操作,通過它與Kubernetes進行交互。通過kubectl能夠對集群本身進行管理,並能夠在集群上進行容器化應用的安裝部署。
1、kubectl用法概述
(1)kubectl命令行的語法如下
$ kubectl [command] [TYPE] [NAME] [flags]
• command:子命令,用於操作Kubernetes集群資源對象的命令,例如create、delete、describe、get、apply等。
• TYPE:資源對象的類型,區分大小寫,能以單數形式、複數形式或者簡寫形式表示。例如以下3種TYPE是等價的 (1) kubectl get pod pod1 ,(2)kubectl get pods pod1,(3)kubectl get po pod1。
• NAME:資源對象的名稱,區分大小寫。如果不指定名稱,則系統將返回屬於TYPE的全部對象的列表,例如$ kubectl get pods將返回所有Pod的列表。
• flags:kubectl子命令的可選參數,例如使用“-s”指定apiserver的URL地址而不用預設值。
kubectl可操作的資源對象類型如下所示:
資源對象的名稱 縮寫
cluster
componentstatuses cs
configmaps cm
daemonsets ds
deployments deploy
endpoints ep
events ev
horizontalpodautoscalers hpa
ingresses ing
Jobs
limitranges limits
nodes no
namespace ns
networkpolicies
statefulsets
persistentvolumeclaims pvc
persistentvolumes pvc
pods po
podsecuritypolicies psp
podtemplate
replicasets rs
replicationcontrollers rc
resourcequotas quota
cronjob
secrets
serviceaccounts
services svc
storageclasses sc
thirdpartyresources
(2)同時對多個資源對象進行操作
在一個命令行中也可以同時對多個資源對象進行操作,以多個TYPE和NAME的組合表示,示例如下。
• 獲取多個Pod的信息:kubectl get pods pod1 pod2
• 同時應用多個yaml文件,以多個-f file參數表示:kubectl create -f pod1.yaml -f rc1.yaml -f service1.yaml
2、kubectl輸出格式
kubectl 命令可以用多種格式對結果進行顯示,輸出的格式通過-o參數指定:
$ kubectl [command] [TYPE] [NAME] -o=<output_format>
根據不同子命令的輸出結果,可選的輸出格式如下:
常用的輸出格式示例如下:
• 顯示Pod的更多信息:kubectl get pod
• 以yaml格式顯示Pod的詳細信息:kubectl get pod
• 以JSON格式顯示Pod的詳細信息:kubectl get pod
• 以自定義列名顯示Pod的信息:kubectl get pod
3、kubectl常用操作
(1)創建資源對象
• 根據yaml配置文件創建資源對象:kubectl create -f ***.yaml
(2)查看資源對象
• 查看資源版本標簽:kubectl api-versions
• 查看集群狀態:kubectl get cs
• 查看集群節點信息:kubectl get nodes
• 查看所有Pod列表:kubectl get pods
• 查看deployment:kubectl get deploy
• 查看埠映射:kubectl get svc
• 查看指定命名空間的服務:kubectl get svc -n kubectl-system
• 顯示運行中的Pod、Service、Deployment以及ReplicaSet的關鍵信息:kubectl get all
• 查看所有的命名空間:kubectl get all --all-namespace
(3)描述資源對象
• 顯示Node的詳細信息:kubectl describe nodes
• 顯示Pod的詳細信息:kubectl describe pods
• 顯示由RC管理的Pod的信息:kubectl describe pods
(4)刪除資源對象
• 基於pod.yaml定義的名稱刪除Pod:kubectl delete -f pod.yaml
• 刪除所有Pod:kubectl delete pods --all
• 於刪除名稱為my_pod的Pod:kubectl delete pod my_pod
(5)執行容器命令
• 執行Pod的date命令:kubectl exec
• 指定Pod中某個容器執行date命令:kubectl exec
• 通過bash進入容器:kubectl exec -it
• kubectl exec -it container-name /bin/bash
(6)查看容器日誌
• 查看容器輸出到stdout的日誌:kubectl logs
• 跟蹤查看容器的日誌,相當於tail -f命令的結果:kubectl logs -f
(7)查看集群信息
• 查看集群狀態信息:kubectl cluster-info
三、nvidia-smi常用命令總結
nvidia-smi提供監控GPU使用情況和更改GPU狀態的功能,是一個跨平臺工具,它支持所有標準的NVIDIA驅動程式。
1、顯示所有GPU的當前信息狀態
命令:nvidia-smi
• Fan:風扇轉速,從0到100%之間變動,N/A表示沒有風扇
• Temp: GPU溫度,單位攝氏度(GPU溫度過高會導致GPU頻率下降)
• Perf:性能狀態,從P0到P12,P0表示最大性能,P12表示狀態最小性能
• Pwr: GPU功耗,上方的Persistence-M:是持續模式的狀態,持續模式雖然耗能大,但是在新的GPU應用啟動時,花費的時間更少,這裡顯示的是off的狀態。
• Bus-Id:GPU匯流排,domain