Kubernetes集群功能演示:deployment的管理和kubectl的使用
通過一段學習,我們的Kubernetes已經部署起來,現在就開始功能的演示。
Kubectl是管理k8s集群的命令行工具,通過生成的json格式傳遞給apiserver進行創建、查看、管理的操作。
一、kubectl幫助信息
kubectl --help [root@master01 k8s]# kubectl --help kubectl controls the Kubernetes cluster manager.(kubectl控制Kubernetes集群管理器)Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/Find more information at(更多信息請訪問): https://kubernetes.io/docs/reference/kubectl/overview/Basic Commands (Beginner):<<-----基本命令(初級)create Create a resource from a file or from stdin.(從文件或stdin創建資源)expose 使用 replication controller, service, deployment 或者 pod 并暴露它作為一個 新的 Kubernetes Servicerun 在集群中運行一個指定的鏡像set 為 objects 設置一個指定的特征Basic Commands (Intermediate):<<-----基本命令(中級)explain 查看資源的文檔get 顯示一個或更多 resourcesedit 在服務器上編輯一個資源delete Delete resources by filenames, stdin, resources and names, or by resources and label selector(按文件名、stdin、資源和名稱刪除資源,或按資源和標簽選擇器刪除資源)Deploy Commands:<<-----部署命令rollout Manage the rollout of a resourcescale Set a new size for a Deployment, ReplicaSet or Replication Controllerautoscale 自動調整一個 Deployment, ReplicaSet, 或者 ReplicationController 的副本數量Cluster Management Commands:<<-----集群管理命令certificate 修改 certificate 資源.cluster-info 顯示集群信息top Display Resource (CPU/Memory/Storage) usage.(顯示資源(CPU/內存/存儲)使用情況)cordon 標記 node 為 unschedulableuncordon 標記 node 為 schedulabledrain Drain node in preparation for maintenance(排水節點,準備維護)taint 更新一個或者多個 node 上的 taintsTroubleshooting and Debugging Commands:<<-----故障排除和調試命令describe 顯示一個指定 resource 或者 group 的 resources 詳情logs 輸出容器在 pod 中的日志attach Attach 到一個運行中的 containerexec 在一個 container 中執行一個命令port-forward Forward one or more local ports to a pod(將一個或多個本地端口轉發到一個pod)proxy 運行一個 proxy 到 Kubernetes API servercp 復制 files 和 directories 到 containers 和從容器中復制 files 和 directories.auth Inspect authorization(檢查授權)Advanced Commands:<<-----高級命令diff Diff live version against would-be applied versionapply 通過文件名或標準輸入流(stdin)對資源進行配置patch 使用 strategic merge patch 更新一個資源的 field(s)replace 通過 filename 或者 stdin替換一個資源wait Experimental: Wait for a specific condition on one or many resources.實驗性:等待一個或多個資源上的特定條件。convert 在不同的 API versions 轉換配置文件kustomize Build a kustomization target from a directory or a remote url.(從目錄或遠程url構建kustominization目標)Settings Commands:<<-----設置命令label 更新在這個資源上的 labelsannotate 更新一個資源的注解completion Output shell completion code for the specified shell (bash or zsh)為指定的shell(bash或zsh)輸出shell完成代碼Other Commands:<<-----其他命令alpha Commands for features in alphaapi-resources Print the supported API resources on the serverapi-versions Print the supported API versions on the server, in the form of "group/version"config 修改 kubeconfig 文件plugin Provides utilities for interacting with plugins.version 輸出 client 和 server 的版本信息Usage:kubectl [flags] [options]Use "kubectl <command> --help" for more information about a given command. Use "kubectl options" for a list of global command-line options (applies to all commands).二、項目的生命周期
創建–––>發布–––>更新–––>回滾–––>刪除接下來我們創建一個deployment,來供我們學習使用。我們以部署nginx-app為例
三、創建nginx的yaml文件
vim nginx-deployment.yaml復制下面的代碼到里面去,這里粘貼過程中會出現的縮進錯亂的問題。
進入vim 編輯模式前輸入:set paste解決縮進錯亂的問題。
1、創建deployment(創建)
創建nginx-app(創建)
[root@master01 k8s]# kubectl apply -f nginx-deployment.yaml deployment.apps/nginx-app created2、檢查組件運行狀態
[root@master01 k8s]# kubectl get cs NAME STATUS MESSAGE ERROR etcd-0 Healthy {"health":"true"} # 服務注冊與發現 scheduler Healthy ok # 調度服務,主要作用是將 POD 調度到 Node controller-manager Healthy ok # 自動化修復服務,主要作用是 Node 宕機后自動修復 Node 回到正常的工作狀態3、檢查 Master 狀態
[root@master01 k8s]# kubectl cluster-info # 主節點狀態 Kubernetes master is running at https://192.168.1.31:6443 # DNS 狀態 KubeDNS is running at https://192.168.1.31:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. 若要進一步調試和診斷群集問題,請使用“kubectl cluster info dump”。4、檢查 Nodes 狀態
[root@master01 k8s]# kubectl get nodes NAME STATUS ROLES AGE VERSION master01 Ready master 18h v1.18.5 work01 Ready <none> 16h v1.18.5 work02 Ready <none> 16h v1.18.55、查看全部 Pods 的狀態
[root@master01 k8s]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-app-5d85b5fb59-66wmb 1/1 Running 0 51m nginx-app-5d85b5fb59-n5hm6 1/1 Running 0 51m6、查看已部署的服務
[root@master01 k8s]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx-app 2/2 2 2 12m7、映射服務,讓用戶可以訪問(發布)
kubectl expose deployment nginx-app --port=80 --type=LoadBalancer8、查看已發布的服務
[root@master01 k8s]# kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18h nginx-app LoadBalancer 10.98.249.225 <pending> 80:32364/TCP 65s9、網絡狀態詳細信息
[root@master01 k8s]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-app-5d85b5fb59-j4fkk 1/1 Running 0 45m 10.244.1.3 work01 <none> <none> nginx-app-5d85b5fb59-tfz65 1/1 Running 0 45m 10.244.2.3 work02 <none> <none>10、查看服務詳情
[root@master01 k8s]# kubectl describe service nginx-app Name: nginx-app Namespace: default Labels: <none> Annotations: <none> Selector: app=nginx Type: LoadBalancer IP: 10.98.249.225 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 32364/TCP Endpoints: 10.244.1.2:80,10.244.2.2:80 Session Affinity: None External Traffic Policy: Cluster Events: <none>驗證是否成功
說明:我們看到映射的端口是:80:32364 我們直接訪問:http://192.168.1.31:32364/
此時 Kubernetes 會以負載均衡的方式訪問部署的 Nginx 服務,能夠正常看到 Nginx 的歡迎頁即表示成功。容器實際部署在其它 Node 節點上,通過訪問 Node 節點的 IP:Port 也是可以的。
11、查看nginx-app的日志
[root@master01 k8s]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-app-5d85b5fb59-j4fkk 1/1 Running 0 54m nginx-app-5d85b5fb59-tfz65 1/1 Running 0 54m [root@master01 k8s]# kubectl logs nginx-app-5d85b5fb59-j4fkk 10.244.0.0 - - [06/Oct/2020:09:47:35 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4209.2 Safari/537.36" "-" 2020/10/06 09:47:35 [error] 6#6: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 10.244.0.0, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.1.31:31852", referrer: "http://192.168.1.31:31852/" 10.244.0.0 - - [06/Oct/2020:09:47:35 +0000] "GET /favicon.ico HTTP/1.1" 404 556 "http://192.168.1.31:31852/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4209.2 Safari/537.36" "-" [root@master01 k8s]#在沒有訪問的情況下,是沒有日志的,你必須用瀏覽器最少打開一次。
12、更新nginx版本 (更新)
以上我們使用的版本是nginx1.17,現在我們通過命令將nginx版本更新為1.14
[root@master01 k8s]# kubectl set image deployment/nginx-app nginx=nginx:1.14 deployment.apps/nginx-app image updated監控更新[root@master01 k8s]# kubectl get pods -w NAME READY STATUS RESTARTS AGE nginx-app-5d85b5fb59-j4fkk 1/1 Running 0 56m nginx-app-5d85b5fb59-tfz65 1/1 Running 0 56m nginx-app-8548f7fc4-dqw8h 0/1 ContainerCreating 0 19s nginx-app-8548f7fc4-dqw8h 1/1 Running 0 61s nginx-app-5d85b5fb59-j4fkk 1/1 Terminating 0 57m nginx-app-8548f7fc4-bbsmk 0/1 Pending 0 0s nginx-app-8548f7fc4-bbsmk 0/1 Pending 0 0s nginx-app-8548f7fc4-bbsmk 0/1 ContainerCreating 0 0s nginx-app-5d85b5fb59-j4fkk 0/1 Terminating 0 57m nginx-app-5d85b5fb59-j4fkk 0/1 Terminating 0 57m nginx-app-5d85b5fb59-j4fkk 0/1 Terminating 0 57m nginx-app-8548f7fc4-bbsmk 1/1 Running 0 2m38s nginx-app-5d85b5fb59-tfz65 1/1 Terminating 0 60m nginx-app-5d85b5fb59-tfz65 0/1 Terminating 0 60m nginx-app-5d85b5fb59-tfz65 0/1 Terminating 0 60m nginx-app-5d85b5fb59-tfz65 0/1 Terminating 0 60m查看節點信息[root@master01 k8s]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-app-8548f7fc4-bbsmk 1/1 Running 0 3m9s nginx-app-8548f7fc4-dqw8h 1/1 Running 0 4m10s查看nginx版本[root@master01 k8s]# kubectl describe pod nginx-app-8548f7fc4-bbsmk | grep nginx Name: nginx-app-8548f7fc4-bbsmk Labels: app=nginx Controlled By: ReplicaSet/nginx-app-8548f7fc4nginx:Image: nginx:1.14Image ID: docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8dNormal Scheduled <unknown> default-scheduler Successfully assigned default/nginx-app-8548f7fc4-bbsmk to work02Normal Pulling 11m kubelet, work02 Pulling image "nginx:1.14"Normal Pulled 8m35s kubelet, work02 Successfully pulled image "nginx:1.14"Normal Created 8m35s kubelet, work02 Created container nginxNormal Started 8m35s kubelet, work02 Started container nginx13、回滾nginx版本(回滾)
現在我們將nginx1.14版本回滾到1.17
查看歷史版本
[root@master01 k8s]# kubectl rollout history deployment/nginx-app deployment.apps/nginx-app REVISION CHANGE-CAUSE 1 <none> 2 <none>執行回滾
[root@master01 k8s]# kubectl rollout undo deployment/nginx-app deployment.apps/nginx-app rolled back檢查回滾狀態
[root@master01 k8s]# kubectl rollout status deployment/nginx-app deployment "nginx-app" successfully rolled out查看版本號
[root@master01 k8s]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-app-5d85b5fb59-8mv7s 1/1 Running 0 2m6s nginx-app-5d85b5fb59-n7kgx 1/1 Running 0 2m8s [root@master01 k8s]# kubectl describe pod nginx-app-5d85b5fb59-8mv7s | grep nginx Name: nginx-app-5d85b5fb59-8mv7s Labels: app=nginx Controlled By: ReplicaSet/nginx-app-5d85b5fb59nginx:Image: nginx:1.17Image ID: docker-pullable://nginx@sha256:6fff55753e3b34e36e24e37039ee9eae1fe38a6420d8ae16ef37c92d1eb26699Normal Scheduled <unknown> default-scheduler Successfully assigned default/nginx-app-5d85b5fb59-8mv7s to work02Normal Pulled 2m30s kubelet, work02 Container image "nginx:1.17" already present on machineNormal Created 2m30s kubelet, work02 Created container nginxNormal Started 2m30s kubelet, work02 Started container nginx14、停止服務(刪除)
[root@master01 k8s]# kubectl delete deployment nginx-app deployment.apps "nginx-app" deleted [root@master01 k8s]# kubectl delete service nginx-app service "nginx-app" deleted [root@master01 k8s]# kubectl get pod No resources found in default namespace.更多的命令請查看:
https://blog.csdn.net/weixin_45409343/article/details/104321241
總結
以上是生活随笔為你收集整理的Kubernetes集群功能演示:deployment的管理和kubectl的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #Objective - C - UI-
- 下一篇: 通过计数器完成工厂可视化看板的开发