kubernetes命令式容器應用編排/部署應用/探查應用詳情/部署service對象/擴縮容/修改刪除對象
部署Pod應用
創建delpoyment控制器對象
[root@master ~]# kubectl run myapp --image=ikubernetes/myapp:v1 --port=80 --replicas=1 kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. deployment.apps/myapp created [root@master ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES client 1/1 Running 0 7d18h 10.244.2.3 node2 <none> <none> myapp-55b9654fbb-psgmb 1/1 Running 0 3s 10.244.1.9 node1 <none> <none> nginx-deploy-54b5756c7-btwm4 1/1 Running 0 45m 10.244.2.6 node2 <none> <none> nginx-deploy-54b5756c7-s4fml 1/1 Running 0 45m 10.244.1.6 node1 <none> <none>
創建完成後,它在default名稱空間中創建了一個名為myapp的Deploument控制器對象,並且它基於指定的鏡像文件創建了一個Pod對象
可以使用kubectl run -h
獲取更多用途
打印資源對象的相關信息
[root@master ~]# kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE myapp 1/1 1 1 108m nginx-deploy 2/2 2 2 3h18m
READY
當前已有pod副本數量/期望數量
UP-TO-DATE
更新到最新版本定義的pod對象的副本數量,在控制器的滾動更新模式下,它表示已經完成版本更細你的pod對象的副本數量
AVAILABLE
當前處於可用狀態的pod副本的數量
AGE
Pod存在的時長
探查pod及應用詳情
kubectl describe
kubectl logs
kubectl exec
部署service對象
一個service對象可視作通過標簽選擇器過濾一組pod對象,並能為此組pod對象監聽套接字提供端口代理和調度服務
[root@master ~]# kubectl expose deployment/myapp --type="NodePort" --port=80 --name=myapp-svc service/myapp-svc exposed [root@master ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d myapp-svc NodePort 10.100.110.97 <none> 80:31590/TCP 4s nginx-svc ClusterIP 10.102.230.186 <none> 80/TCP 161m [root@master ~]# curl 10.100.110.97 Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
expose
暴露
deployment/myapp
根據標簽選擇一組pod
--type
指定service的類型
++Service創建時,其名稱和ClusterIP會由CoreDNS附件動態添加至名稱解析庫中,因此名稱解析服務在對象創建後即可直接使用++
++ClusterIP為service的地址,它是一個虛擬ip,並沒有配置在集群中任何主機的任何接口上,但是每個node之上的kube-proxy都會為CluserIP所在的網絡創建用於轉發的iptables或者ipvs規則,用戶可以在集群外部任何瀏覽器請求集群任一節點的相關端口進行訪問測試++
[root@master ~]# kubectl describe service myapp-svc
Name: myapp-svc
Namespace: default
Labels: run=myapp
Annotations: <none>
Selector: run=myapp
Type: NodePort
IP: 10.100.110.97
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 31590/TCP
Endpoints: 10.244.1.9:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
Selector
當前service對象使用的標簽選擇器,用於選擇關聯的pod對象
Type
service類型,可以是ClusterIP,NodePort,LoadBalancer等之一
Port
暴露端口,當前service用於接受並響應的請求端口
TargetPort
容器中用於暴露的目標端口,由service port請求至此端口
NodePort
當前service的NodePort,它是否存在有效值和Type字段中的類型相關
Endpoints
後端端點,即被當前service的Select選擇的所有pod的IP和PORT
Session Affinity
是否啟用會話粘性
EXternal Traffic Policy
外部流量的調度策略
擴容和縮容
[root@master ~]# kubectl scale deployment/myapp --replicas=3
deployment.extensions/myapp scaled
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
client 1/1 Running 0 7d21h
myapp-55b9654fbb-87fdz 1/1 Running 0 11s
myapp-55b9654fbb-psgmb 1/1 Running 0 169m
myapp-55b9654fbb-tntp4 1/1 Running 0 11s
nginx-deploy-54b5756c7-btwm4 1/1 Running 0 3h35m
nginx-deploy-54b5756c7-s4fml 1/1 Running 0 3h35m
完成擴容後,查看deployment和service詳細信息
[root@master ~]# kubectl describe deployment -l run=myapp
Name: myapp
Namespace: default
CreationTimestamp: Tue, 22 Jan 2019 11:55:25 +0800
Labels: run=myapp
Annotations: deployment.kubernetes.io/revision: 1
Selector: run=myapp
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: run=myapp
Containers:
myapp:
Image: ikubernetes/myapp:v1
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Progressing True NewReplicaSetAvailable
Available True MinimumReplicasAvailable
OldReplicaSets: <none>
NewReplicaSet: myapp-55b9654fbb (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 81s deployment-controller Scaled up replica set myapp-55b9654fbb to 3
# 顯示已經完成擴容
[root@master ~]# kubectl describe service/myapp-svc
Name: myapp-svc
Namespace: default
Labels: run=myapp
Annotations: <none>
Selector: run=myapp
Type: NodePort
IP: 10.100.110.97
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 31590/TCP
Endpoints: 10.244.1.10:80,10.244.1.9:80,10.244.2.8:80
# 創建的service資源對象後端端點也已經通過標簽選擇器自動擴展到了這3個pod對象相關的端點
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
修改和刪除對象
成功創建在k8s上的對象也成為活動對象,其配置信息由API Service保存於集群狀態存儲系統etcd中,而運行 kubectl edit
命令可調用默認編輯器對活動對象的可配置對象進行編輯。
有些命令是kubectl edit
命令某一部分功能的二次封裝 ,例如 kubectl scale
命令不過是專用於修改資源對象的replicas屬性值,它也同樣作用於活動對象,這樣就很容易理解了。
刪除受控制器控制的pods
[root@master ~]# kubectl delete deployment myapp
deployment.extensions "myapp" deleted
kubernetes命令式容器應用編排/部署應用/探查應用詳情/部署service對象/擴縮容/修改刪除對象