您好,登錄后才能下訂單哦!
小編給大家分享一下K8S基本使用方法有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
K8s集群的最小單位是pod,一個pod里面可以包含多的容器,通常以yaml文件去創建pod,也可以使用run命令直接創建
創建pod:命令格式: kubectl create –f [yaml文件] 使用RUN命令直接創建:命令格式:kubectl run –i –t [pod名稱] –image=[鏡像名稱]
列1:通過ymal文件創建一個Redis-master pod
redis-master-controller.yaml 文件內容: apiVersion: v1 kind: ReplicationController metadata: name: redis-master labels: name: redis-master spec: replicas: selector: name: redis-master template: metadata: labels: name: redis-master spec: containers: - name: master image: kubeguide/redis-master ports: - containerPort: 6379 kubectl create -f redis-master-controller.yaml
例2: 使用RUN命令直接創建
kubectl run -i -t busybox --image=busybox kubectl run -i -t busybox --image=busybox --replicas=5 --replicas 指定副本數 常用參數
命令格式: kubectl delete pod/po [pod名稱]
此時雖然顯示pod已經刪除,但是你再次查看pod的時候會發現還是有一個名為busybox**的pod存在,這是因為k8s的安全機制,k8s保證了定義的pod副本數的恒定,加入一個pod副本數為5那么有5個pod提供服務,pod壞掉或者刪除掉k8s的安全機制將檢查副本數量如果pod數量少于5 那么k8s將會自動創建pod使之保持在數量為5個。
徹底刪除:
第一種方式是重新編輯yaml文件 如果文件指定多個副本數將其改為0 第二種方式使用 kubectl delete –f m命令
POD 查看
總體查看
命令 kubectl get pods 進行查看
相對詳細信息查看
kubectl get pod -o wide
更加詳細的信息
命令格式: kubectl describe [po/deploy] [名稱]
Pod是k8s集群的最小單元,一個pod里面可以包含多的容器,那么所有屬于這個pod的容器都會運行在一個節點上面。Pod封裝了一個或多個應用程序的容器(比如nginx等),存儲資源,唯一的網絡IP以及管理容器的一些選項 Pod標示的是一個部署單元,可以理解為Kubernetes中的應用程序的單個實例,它可能由單個容器組成,也可能由少量緊密耦合并共享資源的容器組成。如果多個容器在同一Pod下他們公用一個IP所以不能出現重復的端口號,比如在一個Pod下運行兩個nginx就會有一個容器異常,一個Pod下的多個容器可以使用localhost來訪問對方端口應為Pod是最小的單元如果在Pod中容器出現異常終止了是不會重啟,在實際使用場景下基本不會直接使用Pod而是使用Deployment部署自己的應用
deployment 是什么
在早期版本使用Replication Controller對Pod副本數量進行管理,在新的版本中官方推薦使用Deployment來代替RC,Deployment相對RC有這些好處
特點:
Deployment擁有更加靈活強大的升級、回滾功能,并且支持滾動更新
使用Deployment升級Pod只需要定義Pod的最終狀態,k8s會為你執行必要的操作(RC要自己定義如何操作)
進入到容器內部操作
K8s進入pod指令和 docker 進入容器指定類似
Docker進入容器指令為:
docker exec –it 容器ID/name sh/bash
K8s進入到pod中容器中指令:
kubectl exec –it pod-name sh/bash
拷貝一個文件到pod指定目錄
命令:kubectl cp file/dir <some-pod>:某目錄
pod 與 service的關系
前面寫到創建了POD,但是有了POD依然不能提供服務,此時輪到了我們service上場了,專業一點講叫服務發布。服務發布是創建了POD或者deployment 然后還需要創建service發布出去。 關聯pod和service 是通過 labels 標簽實現的。為關聯的準確性可以添加多個標簽
例:我們創建一個redis-master的POD 然后在創建一個redis-master 的服務并發布
發布pod
創建pod: vim redis-master-controller.yaml apiVersion: v1 kind: ReplicationController metadata: name: redis-master labels: name: redis-master spec: replicas: selector: name: redis-master template: metadata: labels: name: redis-master spec: containers: - name: master image: kubeguide/redis-master ports: - containerPort: 6379
發布Service
vim redis-master-service.yaml apiVersion: v1 kind: Service metadata: name: redis-master labels: name: redis-master spec: ports: - port: 6379 targetPort: 6379 selector: name: redis-master
服務的創建方式與pod相同: 使用 kubectl create –f [x-service.yaml] kubectl create -f redis-master-service.yaml
查看服務
命令 kubectl get svc –o wide 服務的CLUSTER-IP 是服務的 VIP
查看詳細的描述信息:
Kubectl describe svc [service-name]
銷毀服務
service的銷毀和pod的銷毀方法相同 命令: kubectl delete –f [x-service.yaml]
注意:創建完整的容器提供服務包含 POD(Deployment)和 Services,建議Services在Pod之前創建。
方法一 使用命令操作副本數量
例:創建一個redis-slave 應用容器 副本數量指定為2 然后通過命令進行動態擴容和縮容
vim redis-slave.yaml apiVersion: v1 kind: ReplicationController metadata: name: redis-slave labels: name: redis-slave spec: replicas: 2 selector: name: redis-slave template: metadata: labels: name: redis-slave spec: containers: - name: slave image: kubeguide/guestbook-redis-slave env: - name: GET_HOSTS_FROM value: env ports: - containerPort: 6379 kubectl create -f redis-slave.yaml
上面的yaml文件是定義了2個pod副本,我們通過命令擴容到5個
使用scale命令 kubectl scale rc redis-slave --replicas=5
此時通過 kubectl get pod -o wide 命令去查看,你會發現有五個redis-slave pod了
縮容的方式一樣 在命令里面指定 --replicas 的數量即可實現
命令 :kubectl edit rc/deployment [rc/deployment-name]
例:修改應用配置 我們上一步將replicas 數量設置為5 現在將他改為6 保存退出驗證
kubectl edit rc redis-slave
重構命令:kubectl replace -f x.yaml
修改配置文件進行重構即可,這個是需要釋放已存在的pod,然后創建新的pod的過程
查看全部的包括宿主機的
命令:kubectl get endpoints
只查看rc/deploy相關的端口
kubectl get ep [rc/deploy-name]
pod的狀態
使用k8s創建pod的幾種狀態
Pending:Pod已經被系統接收,準備下載鏡像。 Running:Pod已經分配到節點,并且所有容器已創建。至少有一個容器仍在運行、正在啟動或重新啟動。 Successed:Pod中的所有容器已成功終止,不會重新啟動。 Failed:Pod中的所有容器已終止,并且至少有一個容器已經終止。也就是說,容器退出非零狀態或被系統終止。 Unknown:由于某種原因,無法獲得Pod狀態,通常是由于與Pod所在主機通信時出現錯誤。
查看所有namespace
命令:kubectl get namespace/ns(ns 為簡寫)
注:我們的在未指定namespace創建Pod 會默認使用default 這個命名空間
給pod指定namespace
在給pod指定之前我們k8s集群默認是只有default 這個命名空間,所以我們如果使用其他命名空間需要先創建命名空間
例: 創建一個名為mynamespace的命名空間
cat mynamespace.yaml apiVersion: v1 kind: Namespace metadata: name: mynamespace 創建命令與創建pod和service相同
yaml 指定namespace示子:
cat pod.yaml apiVersion: v1 kind: Pod metadata: name: busybox1 namespace: mynamespace spec: containers: - image: gcr.io/google_containers/busybox command: - sleep - "3600" name: busybox1 kubectl create -f pod.yaml
創建完pod 此時你使用 kubectl get pod -o wide 或者 kubectl get pod 查看是看不到的,因為這些pod都是在默認空間中的
所以想要查看 mynamespace 空間的pod 需要在查看命令指定namespace空間
命令:
kubectl get pods –n [namespace名稱] 或者 kubectl get pods -o wide –n [namespace名稱]
使用run 命令創建pod指定namespace
kubectl run -i -t busybox --image=busybox --namespace=mynamespace
Kubectl命令行管理對象
創建資源小技巧
當資源可以使用create 創建時,可以使用 -o yaml 和 --dry-run 查看yaml文件如何寫
-o yaml 以yaml格式輸出
--dry-run 測試創建,不會真的創建資源
例:
kubectl create serviceaccount mycount -o yaml --dry-run
另外一種方法導出摸個pod/deploy yaml文件 用于模板文件可以修改為其他的pod/deploy的yaml
kubectl get pods x-pod -o yaml --export
查看 node標簽
kubectl get nodes --show-labels
給node打標簽
kubectl label nodes node1 zone=foo zone 標簽key foo 標簽值
node設置污點
kubectl taint node node2 node-type=dev:NoExecute
node去污
kubectl taint node node2 node-type:NoExecute-
以上是“K8S基本使用方法有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。