文章目錄
前言
一:kubectl管理
-
kubectl是管理k8s的命令行工具,通過生成json格式傳遞給apiserver進行一些操作
-
更全的kubectl命令請查看
kubectl --help
,以下僅列出常用的命令[root@master ~]# kubectl --help kubectl controls the Kubernetes cluster manager. Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/ Basic Commands (Beginner): create Create a resource from a file or from stdin. expose 使用 replication controller, service, deployment 或者 pod 並暴露它作爲一個 新的 Kubernetes Service run 在集羣中運行一個指定的鏡像 set 爲 objects 設置一個指定的特徵 Basic Commands (Intermediate): explain 查看資源的文檔 get 顯示一個或更多 resources edit 在服務器上編輯一個資源 delete Delete resources by filenames, stdin, resources and names, or by resources and label selector Deploy Commands: rollout Manage the rollout of a resource scale 爲 Deployment, ReplicaSet, Replication Controller 或者 Job 設置一個新的副本數量 autoscale 自動調整一個 Deployment, ReplicaSet, 或者 ReplicationController 的副本數量 Cluster Management Commands: certificate 修改 certificate 資源. cluster-info 顯示集羣信息 top Display Resource (CPU/Memory/Storage) usage. cordon 標記 node 爲 unschedulable uncordon 標記 node 爲 schedulable drain Drain node in preparation for maintenance taint 更新一個或者多個 node 上的 taints Troubleshooting and Debugging Commands: describe 顯示一個指定 resource 或者 group 的 resources 詳情 logs 輸出容器在 pod 中的日誌 attach Attach 到一個運行中的 container exec 在一個 container 中執行一個命令 port-forward Forward one or more local ports to a pod proxy 運行一個 proxy 到 Kubernetes API server cp 複製 files 和 directories 到 containers 和從容器中複製 files 和 directories. auth Inspect authorization Advanced Commands: apply 通過文件名或標準輸入流(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 轉換配置文件 Settings Commands: label 更新在這個資源上的 labels annotate 更新一個資源的註解 completion Output shell completion code for the specified shell (bash or zsh) Other Commands: alpha Commands for features in alpha api-resources Print the supported API resources on the server api-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).
1.1:使用kubectl命令管理項目的生命週期
- 項目的生命週期:創建、發佈、更新、回滾、刪除
1.1.1:創建
-
創建一個nginx的pod
[root@master ~]# kubectl run nginx-test --image=nginx:latest --port=80 --replicas=3 kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead. deployment.apps/nginx-test created [root@master ~]# kubectl get pods -w '//-w:動態查看' [root@master ~]# kubectl get pods -o wide '//查看資源創建在那個節點上' [root@master ~]# kubectl get all '//查看更詳細信息:副本資源和控制器資源' [root@master ~]# kubectl get deployment,replicaset '//僅查詢pod資源的兩個項'
1.1.2、發佈
-
[root@master ~]# kubectl get svc '//查看原有的service服務' NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 92m [root@master ~]# kubectl expose deployment nginx-test --port=80 --target-port=80 --name=nginx-service --type=NodePort '//將剛剛創建的暴露出來' service/nginx-service exposed [root@master ~]# kubectl get svc '//再次查看' NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 92m nginx-service NodePort 10.0.0.176 <none> 80:36355/TCP 3s [root@master ~]# kubectl get pods -o wide '//查看pods在哪個節點上' NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE nginx-dbddb74b8-5s6h7 1/1 Running 0 7d10h 172.17.26.2 192.168.233.132 <none> nginx-test-59f87d55d6-4rvpl 1/1 Running 0 9m55s 172.17.4.3 192.168.233.133 <none> nginx-test-59f87d55d6-qwrc6 1/1 Running 0 9m55s 172.17.4.2 192.168.233.133 <none> nginx-test-59f87d55d6-xhtpb 1/1 Running 0 9m55s 172.17.26.4 192.168.233.132 <none> [root@master ~]# kubectl get endpoints '//查看pod資源的endpoint' NAME ENDPOINTS AGE kubernetes 192.168.233.130:6443,192.168.233.131:6443 93m nginx-service 172.17.26.4:80,172.17.4.2:80,172.17.4.3:80 38s
-
可以查看資源對象的縮寫
[root@master dashboard]# kubectl api-resources
-
pod資源的調度
當我們創建多個pod、service資源時,kube-proxy會做負載均衡,此時我們通過訪問任意node節點ip可以訪問所有的資源
kubernetes中kube-proxy支持三種模式,在v1.8之前我們使用的是iptables以及userspace兩種模式,在kubernetes1.8之後加入了ipvs
[root@node01 ~]# yum -y install ipvsadm [root@node01 ~]# ipvsadm -L -n '//查看調度' IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 127.0.0.1:30005 rr -> 172.17.26.3:8443 Masq 1 0 0 TCP 127.0.0.1:36355 rr '//發現可以訪問本地地址可以自動輪詢給三個pod資源,node02也是一樣的' -> 172.17.4.2:80 Masq 1 0 0 -> 172.17.4.3:80 Masq 1 0 0 -> 172.17.26.4:80 Masq 1 0 0
-
訪問網頁,查看日誌
[root@master ~]# kubectl logs nginx-test-59f87d55d6-4rvpl
[root@master ~]# kubectl logs nginx-test-59f87d55d6-qwrc6
[root@master ~]# kubectl logs nginx-test-59f87d55d6-xhtpb '//網頁只訪問了一次,所以只有一個pod資源有日誌'
...省略內容
172.17.26.1 - - [08/May/2020:04:03:06 +0000] "GET /favicon.ico HTTP/1.1" 404 556 "http://192.168.233.132:36355/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" "-"
1.1.3:更新
-
開發者模式查看版本號(我使用的是谷歌瀏覽器)
[root@master ~]# kubectl set image deployment/nginx-test nginx-test=nginx:1.13 '//更新版本' deployment.extensions/nginx-test image updated [root@master ~]# kubectl get pods -w '//動態查看' '//容器的更新:滾動更新,容器只有刪除和創建,沒有重啓的'
-
重新訪問網頁,再次查看版本
1.1.4:回滾
-
查看歷史狀態
[root@master ~]# kubectl rollout history deployment/nginx-test deployment.extensions/nginx-test REVISION CHANGE-CAUSE 1 <none> 2 <none>
-
執行回滾
[root@master ~]# kubectl rollout undo deployment/nginx-test deployment.extensions/nginx-test [root@master ~]# kubectl get pods -w '//動態查看'
-
檢查回滾狀態
1.1.5:刪除
-
刪除不僅僅是pod,還有service
[root@master ~]# kubectl delete deployment/nginx-test deployment.extensions "nginx-test" deleted [root@master ~]# kubectl get pods -w NAME READY STATUS RESTARTS AGE nginx-dbddb74b8-5s6h7 1/1 Running 0 7d10h nginx-test-59f87d55d6-xgbrd 0/1 Terminating 0 3m13s nginx-test-59f87d55d6-zs5nf 0/1 Terminating 0 2m59s nginx-test-59f87d55d6-zs5nf 0/1 Terminating 0 3m4s nginx-test-59f87d55d6-zs5nf 0/1 Terminating 0 3m4s nginx-test-59f87d55d6-xgbrd 0/1 Terminating 0 3m18s nginx-test-59f87d55d6-xgbrd 0/1 Terminating 0 3m18s ^C[root@master ~]# kubectl get pods '//再次查看pod資源' NAME READY STATUS RESTARTS AGE nginx-dbddb74b8-5s6h7 1/1 Running 0 7d10h [root@master ~]# kubectl get svc '//查看service' NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 137m nginx-service NodePort 10.0.0.176 <none> 80:36355/TCP 44m [root@master ~]# kubectl delete svc/nginx-service '//刪除service' service "nginx-service" deleted [root@master ~]# kubectl get svc '//重新查看' NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 137m
1.2:其他常規操作
-
查看資源的詳細信息
[root@master ~]# kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx-dbddb74b8-5s6h7 1/1 Running 0 7d11h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 163m NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/nginx 1 1 1 1 7d11h NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-dbddb74b8 1 1 1 7d11h
-
查看service資源
[root@master ~]# kubectl describe service/kubernetes Name: kubernetes Namespace: default Labels: component=apiserver provider=kubernetes Annotations: <none> Selector: <none> Type: ClusterIP IP: 10.0.0.1 Port: https 443/TCP TargetPort: 6443/TCP Endpoints: 192.168.233.130:6443,192.168.233.131:6443 Session Affinity: None Events: <none>
-
查看deployment資源
[root@master ~]# kubectl describe deployment.apps/nginx Name: nginx Namespace: default CreationTimestamp: Fri, 01 May 2020 01:31:30 +0800 Labels: run=nginx Annotations: deployment.kubernetes.io/revision: 1 Selector: run=nginx Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: run=nginx Containers: nginx: Image: nginx Port: <none> Host Port: <none> Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-dbddb74b8 (1/1 replicas created) Events: <none>
-
進入pod
[root@master ~]# kubectl exec -it nginx-dbddb74b8-5s6h7 bash root@nginx-dbddb74b8-5s6h7:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@nginx-dbddb74b8-5s6h7:/# exit exit