kubernetes基础介绍及kubectl常用命令
- kubernetes基礎介紹及kubectl常用命令
- k8s的pod分類
- 自主式pod
- 控制器管理的pod
- 核心主鍵
- HPA
- service
- 網絡模型
- 同節點Pod之間的通信
- 不同節點上的Pod通信
- Pod與Service
- kubectl常用命令
- create
- run
- delete
- get
- expose
- edit
- scale
- autoscale
- cluster-info
- describe
- logs
- attach
- exec
- port-forward
- cp
- label
- api-resources
- api-versions
- k8s進行版本的滾動更新及回滾
kubernetes基礎介紹及kubectl常用命令
k8s的pod分類
pod分為兩類:
- 自主式pod
- 控制器管理的pod
自主式pod由k8s管理器進行管理,而static pod由kubelet進行創建與管理
自主式pod
自主式pod總是在前臺運行,同時接受k8s管理與調度,當集群當中的pod因為某種原因停止,k8s會根據其副本的數量,重新的生成對應的pod
自我管理的pod,創建以后仍然需要提交給apiserver,由apiserver接收以后借助于調度器將其調度至指定的node節點,由node啟動此pod
如果此pod出現故障,需要重啟容器則由kubelet來完成
如果node節點故障了,那么此pod將會消失。其無法實現全局調度。所以不推薦使用此種pod
控制器管理的pod
常見的pod控制器:
-
ReplicationController:當啟動一個pod時。這個pod如果不夠用可以再啟個副本,而后由控制器來管理同一類pod的各種副本與對象。一旦副本少了就會自動增加。采取多退少補的規則,精確符合我們所定義的期望。支持滾動更新
-
ReplicaSet:由一個名叫Deployment的聲明式更新的控制器來管理
-
Deployment:Deployment只能管理無狀態的應用
-
StateFulSet:有狀態副本集,可以管理有狀態的應用
-
DaemonSet:如果需要在每個node上運行一個副本的時候可以用DaemonSet
核心主鍵
HPA
Deployment還支持二級控制器,HPA(HorizontalPodAutoscaler,水平pod自動伸縮控制器),一般情況下我們可以確保一個node上有2個pod在運行,萬一用戶訪問流量增加,2個pod不足以承載這么多訪問量怎么辦?此時我們就應該要增加pod資源,那么到底應該加幾個?
HPA控制器可自動監控pod、自動進行擴展。
service
假如有2個pod,pod有其生命周期,萬一pod所在的節點宕機了,那么此pod將應該要在其他的節點上重建,而重建完的pod與原來的pod已經不是同一個pod了,只是兩者都是運行的同一個服務而已。且每個容器都有其IP地址,重建的pod中的容器其IP地址與之前的pod中容器的IP地址是不一樣的,如此一來就會存在一個問題,客戶端如何訪問這些pod中的容器呢?(會轉換到另一個節點去運行)
用于做服務發現,pod是有生命周期的,一個pod隨時都有可能離去,隨時都有可能會有其他內pod加進來,假如它們提供的是同一種服務,客戶端是無法通過固定的手段來訪問這些pod的,因為pod本身是不固定的,它們隨時可能被替換掉,無論使用主機名還是IP地址,都隨時會被替換掉。
為了盡可能的降低客戶端與pod間協調的復雜度,k8s為每一組提供同類服務的pod和其客戶端之間添加了一個中間層,這個中間層是固定的,這個中間層就叫service。
service只要不被刪除,其地址與名稱皆是固定的,當客戶端需要在其配置文件中寫上訪問某個服務時,它不再需要自動發現,只需要在配置文件中寫明service的名稱即可,而這個service是個調度器,其不但能夠提供一個穩定的訪問入口,還可以做反向代理,當service接收到客戶端的請求后,會將其代理到后端的pod之上,一旦pod宕機了會立即新建一個pod,這個新建的pod會立即被service關聯上,作為service后端的可用pod之一
客戶端程序訪問服務都是通過IP+端口或者主機名+端口的方式來實現的。而service關聯后端的pod不是靠它的IP和主機名,而是靠pod的標簽選擇器。只要創建的pod的label是統一的,無論IP地址和主機如何改變,其都能被service所識別。如此一來,只要pod屬于標簽選擇器,只要其在service的管理范圍之內,則其就會被關聯到service中,當這個動態的pod關聯到service中之后,再進行動態的探測此pod的IP地址、端口,再將其作為自己后端可調度的可用服務蒂王機為象。因此,客戶端的請求發送到service,然后由service代理到后端真實的pod中的容器進行響應。
service不是一個程序,也不是一個組件,它只是一個iptables的dnat規則,service作為k8s的對象,有其自身的名稱,而service的名稱相當于服務的名稱,而這個名稱可以被解析。
AddOns附件
dns pod:裝完k8s后第一件事就需要在k8s集群上部署一個dns pod,以確保各service的名稱能夠被解析可以動態改變,包括動態創建、動態刪除、動態修改,比如把service的名稱改了,dnspod會自動觸發,將dns解析記錄中的名稱也給改掉;假如我們手動把service的ip地址給改了,改完以后會自動觸發,將dns服務中的解析記錄給改掉。如此一來,客戶端去訪問pod資源的時候可以直接訪問service的名稱,然后由集群中專用的dns服務來負責解析。
這種pod是k8s自身的服務就需要用到的pod,所以我們把它稱為基礎性的系統架構級的pod對象,而且它們也被稱為集群附件
網絡模型
三種網絡模型
- 節點網絡
- service集群網絡
- pod網絡
同節點Pod之間的通信
在容器啟動前,會為容器創建一個虛擬Ethernet接口對,這個接口對類似于管道的兩端,其中一端在主機命名空間中,另外一端在容器命名空間中,并命名為eth0。在主機命名空間的接口會綁定到網橋。網橋的地址段會取IP賦值給容器的eth0接口。
不同節點上的Pod通信
我們已經知道一個節點上的容器都會連接到同一網橋,因此要讓運行在不同節點上的容器之間能夠通信,這些節點的網橋就需要以某種方式連接起來。
跨整個集群的Pod的IP地址必須是唯一的,所有跨節點的網橋必須使用不重疊的網絡地址段,以防止不同節點上的Pod拿到同一IP地址,即確保沒有IP地址沖突。
發送到B節點上的容器時,報文會先通過veth接口對到網橋,再由網橋到A節點的物理適配器,再通過網線傳輸到B節點的物理適配器,再通過B的網橋,經過接口對到達目標容器。
注意:上述情形僅在節點連接到相同網關,之間沒有任何路由設備時有效。否則,路由設備會因為IP私有產生丟包現象,除非設置路由規則。但隨著節點的增加,路由的配置會變得非常困難。因此我們使用SDN(軟件定義網絡)技術來簡化此類問題,SDN可以忽略底層網絡拓撲,使其就像連接到同一網關。
Pod與Service
在不同節點上的Pod通信中,我們知道了Pod是以IP地址進行通信,但Kubernetes 的集群中, Pod 可能會頻繁的銷毀和創建,也就是說 Pod 的 IP 不是固定的。
為了解決這個問題,Service 提供了訪問 Pod 的抽象層,即為一組功能相同的Pod提供單一不變的接入點資源。
無論后端的 Pod 如何變化,Service 都作為穩定的前端對外提供服務。
同時,Service 還提供了高可用和負載均衡功能,Service 負責將請求轉發給正確的 Pod。
kubectl常用命令
語法
kubectl [command] [TYPE] [NAME] [flags]command:子命令 TYPE:資源類型 NAME:資源名稱 flags:命令參數命令幫助 kubectl命令的幫助很詳細,kubectl -h會列出所有的子命令,在任何子命令后跟 -h,都會輸出詳細的幫助以及用例,遇到問題可以隨時查看幫助。資源對象 kubectl大部分子命令后都可以指定要操作的資源對象,可以用kubectl api-resources命令參考全局參數 kubectl options命令可以列出可以全局使用的命令參數 --cluster='': 指定命令操作對象的集群 --context='': 指定命令操作對象的上下文 -n, --namespace='': 指定命令操作對象的Namespacecreate
從文件或標準輸出中創建pod
# 創建一個deployment類型的pos,名字是nginx1,使用的鏡像是nginx [root@master ~]# kubectl create deployment wb1 --image=nginx deployment.apps/wb1 created [root@master ~]# kubectl create deployment nginx1 --image=nginx deployment.apps/nginx1 created [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx1-5c9f6bbd8c-2ng6h 1/1 Running 0 40s# 創建deployment類型的pos,名字是nginx2,使用的鏡像是nginx,replicas是指定創建的個數 [root@master ~]# kubectl create deployment nginx2 --image=nginx --replicas=2 deployment.apps/nginx2 created [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx1-5c9f6bbd8c-2ng6h 1/1 Running 0 3m2s nginx2-85bf7b8976-68q5d 0/1 ContainerCreating 0 42s nginx2-85bf7b8976-74l6z 1/1 Running 0 42srun
在集群中運行一個指定的鏡像的pod(自主式pod)
# 使用run運行的pod默認為pod類型 [root@master ~]# kubectl run nginx --image nginx pod/nginx created [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx 0/1 ContainerCreating 0 11s# 運行一個pod叫nginx1,使用鏡像nginx,指定標簽為app=web [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx 0/1 ContainerCreating 0 11s wb1-5dbfb96758-hhfhb 1/1 Running 0 16m [root@master ~]# kubectl run nginx1 --image=nginx --labels="app=web" pod/nginx1 created [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 2m9s nginx1 1/1 Running 0 18s# 多創建幾個,使它們的標簽都是nginx [root@master ~]# kubectl run nginx2 --image=nginx --labels="app=web" pod/nginx2 created [root@master ~]# kubectl run nginx3 --image=nginx --labels="app=web" pod/nginx3 created #查看一下 [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 5m49s nginx1 1/1 Running 0 3m58s nginx2 1/1 Running 0 73s nginx3 1/1 Running 0 43s # 刪除時指定標簽就可以刪除對應標簽的pod [root@master ~]# kubectl delete pod -l app=web pod "nginx1" deleted pod "nginx2" deleted pod "nginx3" deleted#試運行,不會真正的創建運行,可以指定client/server端跑 [root@master ~]# kubectl run web123 --image=nginx --dry-run=client pod/web123 created (dry run)# 啟動一個pod,并將其放在前臺,如果它退出,不要重新啟動它 [root@master ~]# kubectl run -i -t web123 --image=busybox --restart=Never If you don't see a command prompt, try pressing enter. / # ls -l total 16 drwxr-xr-x 2 root root 12288 Dec 7 00:20 bin drwxr-xr-x 5 root root 380 Dec 19 10:22 dev drwxr-xr-x 1 root root 66 Dec 19 10:22 etc drwxr-xr-x 2 nobody nobody 6 Dec 7 00:20 home dr-xr-xr-x 219 root root 0 Dec 19 10:22 proc drwx------ 1 root root 26 Dec 19 10:22 root dr-xr-xr-x 13 root root 0 Dec 19 10:21 sys drwxrwxrwt 2 root root 6 Dec 7 00:20 tmp drwxr-xr-x 3 root root 18 Dec 7 00:20 usr drwxr-xr-x 1 root root 17 Dec 19 10:22 vardelete
刪除資源的文件名,標準輸出,資源和名稱,或資源和標簽選擇器
##查看所存在的service和pod [root@master ~]# kubectl get pods,svc NAME READY STATUS RESTARTS AGE pod/nginx-85b98978db-dgkbp 1/1 Running 0 97m pod/nginx1-5c9f6bbd8c-2ng6h 1/1 Running 0 11m pod/nginx2-85bf7b8976-68q5d 1/1 Running 0 9m8s pod/nginx2-85bf7b8976-74l6z 1/1 Running 0 9m8s pod/nginx3-59475d8756-l8mcq 1/1 Running 0 7m17s pod/wb1-5dbfb96758-hhfhb 1/1 Running 0 11mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 144m service/nginx NodePort 10.105.224.204 <none> 80:31753/TCP 97m #刪除service和pod名字叫nginx的 [root@master ~]# kubectl delete deployment,svc nginx deployment.apps "nginx" deleted service "nginx" deleted#刪除完后查看 [root@master ~]# kubectl get pods,svc NAME READY STATUS RESTARTS AGE pod/nginx1-5c9f6bbd8c-2ng6h 1/1 Running 0 13m pod/nginx2-85bf7b8976-68q5d 1/1 Running 0 10m pod/nginx2-85bf7b8976-74l6z 1/1 Running 0 10m pod/nginx3-59475d8756-l8mcq 1/1 Running 0 8m50s pod/wb1-5dbfb96758-hhfhb 1/1 Running 0 13mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 146mget
顯示一個或更多資源
# 查看創建的pod [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-85b98978db-dgkbp 1/1 Running 0 90m nginx1-5c9f6bbd8c-2ng6h 1/1 Running 0 5m2s nginx2-85bf7b8976-68q5d 1/1 Running 0 2m42s nginx2-85bf7b8976-74l6z 1/1 Running 0 2m42s nginx3-59475d8756-l8mcq 1/1 Running 0 51s wb1-5dbfb96758-hhfhb 1/1 Running 0 5m14s# 查看創建的pod [root@master ~]# kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 138m nginx NodePort 10.105.224.204 <none> 80:31753/TCP 91m# 查看多個信息,用","隔開 [root@master ~]# kubectl get service,pod NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 138m service/nginx NodePort 10.105.224.204 <none> 80:31753/TCP 91mNAME READY STATUS RESTARTS AGE pod/nginx-85b98978db-dgkbp 1/1 Running 0 91m pod/nginx1-5c9f6bbd8c-2ng6h 1/1 Running 0 5m52s pod/nginx2-85bf7b8976-68q5d 1/1 Running 0 3m32s pod/nginx2-85bf7b8976-74l6z 1/1 Running 0 3m32s pod/nginx3-59475d8756-l8mcq 1/1 Running 0 101s pod/wb1-5dbfb96758-hhfhb 1/1 Running 0 6m4s# 查看名稱空間 [root@master ~]# kubectl get ns NAME STATUS AGE default Active 139m kube-node-lease Active 139m kube-public Active 139m kube-system Active 139m# 查看指定類型的pod [root@master ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 93m nginx1 1/1 1 1 7m49s nginx2 2/2 2 2 5m29s nginx3 1/1 1 1 3m38s wb1 1/1 1 1 8m1s [root@master ~]# kubectl get deployment nginx NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 94mexpose
暴露端口號,–target-port表示暴露目標端口號
創建一個服務,這個服務在它的80端口號連接它的時候用容器的8000,用外面的80訪問容器里的8000
#把80映射到8000,因為它的類型是ClusterIP,表示這個service只能在集群中能訪問到;NodePort則表示是在真機上可以訪問的 [root@master ~]# kubectl expose deployment myapp --port 80 --target-port 8000 service/myapp exposed [root@master ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE myapp ClusterIP 10.110.171.169 <none> 80/TCP 3s nginx NodePort 10.111.4.86 <none> 80:30859/TCP 41hedit
使用默認編輯器編輯服務器上定義的資源
[root@master ~]# kubectl describe pod nginx Name: nginx Namespace: default Priority: 0 Node: node1.example.com/192.168.235.172 Start Time: Mon, 20 Dec 2021 22:14:38 +0800 Labels: app=nginx································ [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 87s...labels:app: test //將原本的nginx改為testname: nginx [root@master ~]# kubectl describe pod nginx ... Labels: app=testscale
擴容或縮容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod數量
將名為nginx中的pod副本數量設置為3
[root@master ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 8m30s [root@master ~]# kubectl scale --replicas 3 deployment/nginx deployment.apps/nginx scaled [root@master ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/3 3 1 8m56s [root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx-6799fc88d8-5tsjt 1/1 Running 0 16s nginx-6799fc88d8-dwrsh 1/1 Running 0 9m5s nginx-6799fc88d8-sn82p 1/1 Running 0 15s// 當前副本數為3,則將其擴展至5 root@master ~]# kubectl scale --current-replicas 3 --replicas 5 deployment/nginx deployment.apps/nginx scaled [root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx-6799fc88d8-5tsjt 1/1 Running 0 62s nginx-6799fc88d8-dwrsh 1/1 Running 0 9m51s nginx-6799fc88d8-jkmln 0/1 ContainerCreating 0 2s nginx-6799fc88d8-qm5ld 0/1 ContainerCreating 0 2s nginx-6799fc88d8-sn82p 1/1 Running 0 61s [root@master ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx 4/5 5 4 9m58sautoscale
自動擴展,給定一個范圍,自動根據業務的訪問量增加或減少
設定nginx這個deployment的副本數最少為1,最多為5
[root@master ~]# kubectl autoscale --min 1 --max 5 deployment/nginx horizontalpodautoscaler.autoscaling/nginx autoscaled [root@master ~]# kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx Deployment/nginx <unknown>/80% 1 5 0 8scluster-info
顯示標簽為 kubernetes.io/cluster-service=true 的控制平面和服務的地址。要進一步調試和診斷集群問題,請使用“kubectl cluster-info dump”
[root@master ~]# kubectl cluster-info Kubernetes control plane is running at https://192.168.235.179:6443 KubeDNS is running at https://192.168.235.179:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.describe
查看特定資源或資源組的詳細信息
//查看名為nginx 的pod的詳細信息 [root@master ~]# kubectl describe pod nginx Name: nginx-6799fc88d8-5tsjt Namespace: default Priority: 0 Node: node1.example.com/192.168.235.172 Start Time: Mon, 20 Dec 2021 22:23:28 +0800 Labels: app=nginxpod-template-hash=6799fc88d8 Annotations: <none> Status: Running IP: 10.244.1.5 IPs:IP: 10.244.1.5 Controlled By: ReplicaSet/nginx-6799fc88d8 Containers:nginx:Container ID: docker://5a331ad8c751b41bfa7fd98f4f73e1c97cbc9f8aa76aada48f0be3fe22c10097Image: nginxImage ID: docker-pullable://nginx@sha256:9522864dd661dcadfd9958f9e0de192a1fdda2c162a35668ab6ac42b465f0603Port: <none>Host Port: <none>State: RunningStarted: Mon, 20 Dec 2021 22:23:37 +0800Ready: TrueRestart Count: 0Environment: <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-n67dr (ro) Conditions:Type StatusInitialized True Ready True ContainersReady True PodScheduled True Volumes:default-token-n67dr:Type: Secret (a volume populated by a Secret)SecretName: default-token-n67drOptional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 8m9s default-scheduler Successfully assigned default/nginx-6799fc88d8-5tsjt to node1.example.comNormal Pulling 8m8s kubelet Pulling image "nginx"Normal Pulled 8m kubelet Successfully pulled image "nginx" in 7.583042375sNormal Created 8m kubelet Created container nginxNormal Started 8m kubelet Started container nginxlogs
輸出pod或指定資源中容器的日志。如果pod中只有一個容器,則容器名是可選的
// 查看nginx的日志 [root@master ~]# kubectl logs deployment/nginx Found 5 pods, using pod/nginx-6799fc88d8-dwrsh /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2021/12/20 14:14:43 [notice] 1#1: using the "epoll" event method 2021/12/20 14:14:43 [notice] 1#1: nginx/1.21.4 2021/12/20 14:14:43 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 2021/12/20 14:14:43 [notice] 1#1: OS: Linux 4.18.0-257.el8.x86_64 2021/12/20 14:14:43 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2021/12/20 14:14:43 [notice] 1#1: start worker processes 2021/12/20 14:14:43 [notice] 1#1: start worker process 32 2021/12/20 14:14:43 [notice] 1#1: start worker process 33attach
連接到一個正在運行的容器
//獲取正在運行中的pod nginx的輸出,默認連接到pod中的第一個容器[root@master ~]# kubectl attach nginx Defaulting container name to nginx. Use 'kubectl describe pod/nginx -n default' to see all of the containers in this pod. If you don't see a command prompt, try pressing enter.exec
在容器內執行命令
//默認在pod/nginx的第一個容器中運行date并打印輸出 [root@master ~]# kubectl exec deployment/nginx date kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. Mon Dec 20 14:38:25 UTC 2021port-forward
將一個或多個本地端口轉發到pod
/將容器中的80端口隨即映射到本機的端口[root@master ~]# kubectl port-forward nginx-6799fc88d8-5tsjt :80 Forwarding from 127.0.0.1:46459 -> 80 Forwarding from [::1]:46459 -> 80[root@master ~]# curl 127.0.0.1:46459 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p><p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p> </body> </html> [root@master ~]#cp
將文件和目錄復制到容器或者從容器中拷貝
//將本地的anaconda-ks.cfg文件傳輸到pod/nginx的/tmp目錄下 [root@master ~]# kubectl cp anaconda-ks.cfg nginx-6799fc88d8-5tsjt:/tmp [root@master ~]# kubectl exec pod/nginx-6799fc88d8-5tsjt -- ls -l /tmp total 4 -rw------- 1 root root 1252 Dec 20 14:48 anaconda-ks.cfglabel
更新(增加、修改或刪除)資源上的 label(標簽)。
- label 必須以字母或數字開頭,可以使用字母、數字、連字符、點和下劃線,最長63個字符。
- 如果–overwrite 為 true,則可以覆蓋已有的 label,否則嘗試覆蓋 label 將會報錯。
- 如果指定了–resource-version,則更新將使用此資源版本,否則將使用現有的資源版本。
api-resources
在服務器上打印支持的 API 資源
//查看所有資源 [root@master ~]# kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 true Binding componentstatuses cs v1 false ComponentStatus configmaps cm v1 true ConfigMapapi-versions
在服務器上以’組/版本’的形式打印支持的api版本
[root@master ~]# kubectl api-versions admissionregistration.k8s.io/v1 admissionregistration.k8s.io/v1beta1 apiextensions.k8s.io/v1 apiextensions.k8s.io/v1beta1 apiregistration.k8s.io/v1 apiregistration.k8s.io/v1beta1 apps/v1 authentication.k8s.io/v1 authentication.k8s.io/v1beta1 authorization.k8s.io/v1 authorization.k8s.io/v1beta1 autoscaling/v1 autoscaling/v2beta1 autoscaling/v2beta2 batch/v1k8s進行版本的滾動更新及回滾
// 用Dockerfile編寫兩個鏡像 //制作鏡像1 [root@master ~]# mkdir httpd [root@master ~]# cd httpd [root@master httpd]# vim Dockerfile [root@master httpd]# cat Dockerfile FROM busyboxRUN mkdir /data && \echo "test page on v1" > /data/index.html ENTRYPOINT ["/bin/httpd","-f","-h","/data"] [root@master httpd]# docker build -t weixiaoya/httpd:v0.1 . Sending build context to Docker daemon 2.048kB Step 1/3 : FROM busybox latest: Pulling from library/busybox 3cb635b06aa2: Pull complete Digest: sha256:b5cfd4befc119a590ca1a81d6bb0fa1fb19f1fbebd0397f25fae164abe1e8a6a Status: Downloaded newer image for busybox:latest---> ffe9d497c324 Step 2/3 : RUN mkdir /data && echo "test page on v1" > /data/index.html---> Running in bf174265c61d Removing intermediate container bf174265c61d---> a074d85c6622 Step 3/3 : ENTRYPOINT ["/bin/httpd","-f","-h","/data"]---> Running in e362ffafa0e2 Removing intermediate container e362ffafa0e2---> 104d28f2d58c Successfully built 104d28f2d58c Successfully tagged weixiaoya/httpd:v0.1//制作鏡像2 [root@master httpd]# vim Dockerfile [root@master httpd]# cat Dockerfile FROM busyboxRUN mkdir /data && \echo "test page on v2" > /data/index.html ENTRYPOINT ["/bin/httpd","-f","-h","/data"][root@master httpd]# docker build -t weixiaoya/httpd:v2 . Sending build context to Docker daemon 2.048kB Step 1/3 : FROM busybox---> ffe9d497c324 Step 2/3 : RUN mkdir /data && echo "test page on v2" > /data/index.html---> Running in aa475f8038dd Removing intermediate container aa475f8038dd---> 867882b9f918 Step 3/3 : ENTRYPOINT ["/bin/httpd","-f","-h","/data"]---> Running in 4cbc3af592c9 Removing intermediate container 4cbc3af592c9---> e423298d601e Successfully built e423298d601e Successfully tagged weixiaoya/httpd:v2[root@master httpd]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE weixiaoya/httpd v2 e423298d601e About a minute ago 1.24MB weixiaoya/httpd v0.1 104d28f2d58c 3 minutes ago 1.24MB busybox latest ffe9d497c324 13 days ago 1.24MB[root@master ~]# docker push weixiaoya/httpd:v0.1 The push refers to repository [docker.io/weixiaoya/httpd] 0d4853dfdf52: Pushed 64cac9eaf0da: Mounted from library/busybox v0.1: digest: sha256:fb79b8b64543613f2677aeb489451b329ed7b4ccbade1820d9d5205495107f4f size: 734用k8s基于httpd:v0.1鏡像運行鏡像3個pod
[root@master ~]# kubectl create deploy httpd --image weixiaoya/httpd:v0.1 --replicas 3 deployment.apps/httpd created[root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE httpd-7649d9b878-5lvf7 1/1 Running 0 8m4s httpd-7649d9b878-ck6cq 1/1 Running 0 8m4s httpd-7649d9b878-pkqkk 1/1 Running 0 8m4s//暴露端口 [root@master ~]# kubectl expose deploy httpd --port 80 --type NodePort service/httpd exposed[root@master ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE httpd NodePort 10.111.22.218 <none> 80:31547/TCP 33s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 14h[root@master ~]# curl 10.111.22.218 test page on v1[root@master ~]# curl 192.168.235.179:31547 test page on v1k8s進行版本更新
[root@master ~]# kubectl set image deploy/httpd httpd=weixiaoya/httpd:v2 deployment.apps/httpd image updated//創建一個新pod,刪除一個舊pod ,直到更新完成 [root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE httpd-7649d9b878-5lvf7 1/1 Terminating 0 11m httpd-7649d9b878-ck6cq 1/1 Running 0 11m httpd-7649d9b878-pkqkk 1/1 Terminating 0 11m httpd-cb9c79f99-gfk9z 0/1 ContainerCreating 0 10s httpd-cb9c79f99-w722f 1/1 Running 0 11s httpd-cb9c79f99-zcsw5 1/1 Running 0 35s[root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE httpd-cb9c79f99-gfk9z 1/1 Running 0 101s httpd-cb9c79f99-w722f 1/1 Running 0 102s httpd-cb9c79f99-zcsw5 1/1 Running 0 2m6s[root@master ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE httpd NodePort 10.111.22.218 <none> 80:31547/TCP 4m54s//訪問 [root@master ~]# curl 10.111.22.218 test page on v2 [root@master ~]# curl 192.168.235.179:31547 test page on v2回滾
[root@master ~]# kubectl rollout undo deploy/httpd deployment.apps/httpd rolled back[root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE httpd-7649d9b878-96cnm 1/1 Running 0 8s httpd-7649d9b878-mq6mh 1/1 Running 0 6s httpd-7649d9b878-rtmjt 1/1 Running 0 10s httpd-cb9c79f99-gfk9z 1/1 Terminating 0 3m21s httpd-cb9c79f99-w722f 1/1 Terminating 0 3m22s httpd-cb9c79f99-zcsw5 1/1 Terminating 0 3m46s[root@master ~]# curl 10.111.22.218 test page on v1[root@master ~]# curl 192.168.235.179:31547 test page on v1總結
以上是生活随笔為你收集整理的kubernetes基础介绍及kubectl常用命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Velodyne-16c激光雷达数据包解
- 下一篇: sublime怎么真机同步到海马玩模拟器