官方文檔: https://v1-13.docs.kubernetes.io/zh/docs/tutorials/kubernetes-basics/ pods生命周期: https://v1-13.docs.kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/ 配置: https://v1-13.docs.kubernetes.io/docs/concepts/configuration/ labels: https://v1-13.docs.kubernetes.io/docs/concepts/overview/working-with-objects/labels/ Deployments: https://v1-13.docs.kubernetes.io/docs/concepts/workloads/controllers/deployment/ Services: https://v1-13.docs.kubernetes.io/docs/concepts/services-networking/service/ Scaling: https://v1-13.docs.kubernetes.io/docs/tutorials/kubernetes-basics/scale/scale-intro/ autoscale: https://v1-13.docs.kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
#檢視k8s版本
kubectl version
#檢視所有的節點
kubectl get nodes
#擷取namespace
kubectl get namespace
#檢視namespace為online的pod
kubectl get pods --namespace=online
#部署應用
kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 --port=8080
#檢視部署應用清單
kubectl get deployments --namespace=
#檢視所有pod
kubectl get pods --namespace=
#擷取執行中的pod并設定成環境變量POD_NAME
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME
#通路pod
curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
kubectl 故障排查
kubectl get pods --namespace= #檢視resources清單
kubectl describe pods --namespace= #檢視具體的resources情況
kubectl logs $POD_NAME --namespace= #檢視pod裡的容器日志
kubectl exec --namespace= #在pod裡的容器裡執行指令
kubectl exec $POD_NAME env --namespace= #檢視pod環境變量
kubectl exec -ti $POD_NAME bash --namespace= #進入pod終端
Service & labels
Service type
類型 | 說明 |
---|---|
ClusterIP | 預設選項,隻能叢集内部通路 |
NodePort | 使用NAT暴露每個節點的相同端口 并使用<NodeIP>:<NodePort> 方式讓叢集外部通路 ClusterIP的超集 |
LoadBalancer | 建立負載均衡器配置設定一個固定的IP NodePort的超集 |
ExternalName | 使用域名解析的CNAME來指定名字或者手動自定名字 不使用proxy 需要v1.7及以上版本的kube-dns |
更多的内容參考: https://v1-13.docs.kubernetes.io/docs/tutorials/services/source-ip/ https://v1-13.docs.kubernetes.io/docs/concepts/services-networking/connect-applications-service/ |

labels
service通過labels把一組pods管理起來。
比如通過labels指定開發、測試、生産環境
比如打版本tag
使用标簽分類
#擷取service
kubectl get services --namespace=
#指定service type
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
#檢視指定services資訊
kubectl describe services/kubernetes-bootcamp --namespace=
#設定NODE_PORT端口為環境變量
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
#檢視部署情況
kubectl describe deployment --namespace=
#-l根據label查詢pods
kubectl get pods -l run=kubernetes-bootcamp --namespace=
#-l根據label查詢services
kubectl get services -l run=kubernetes-bootcamp --namespace=
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME
#設定label,label是key/value對
kubectl label pod $POD_NAME app=v1
#根據label查詢pods
kubectl get pods -l app=v1 --namespace=
#删除service
kubectl delete service -l run=kubernetes-bootcamp --namespace=
#pod裡執行指令
kubectl exec -ti $POD_NAME curl localhost:8080 --namespace=
擴縮容
kubectl get deployments
#擴容成4個
kubectl scale deployments/kubernetes-bootcamp --replicas=4
#檢視pod是否變成4個
kubectl get pods -o wide
#檢視deployments詳情
kubectl describe deployments/kubernetes-bootcamp
#設定環境變量
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
#縮容
kubectl scale deployments/kubernetes-bootcamp --replicas=2
滾動更新
#檢視deployments
kubectl get deployments
kubectl get pods
kubectl describe pods
#滾動更新
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
#檢視更新是否成功
kubectl describe services/kubernetes-bootcamp
#檢視更新狀态
kubectl rollout status deployments/kubernetes-bootcamp
#更新一個不存在的版本,讓更新失敗。
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
#檢視pods是否失敗
kubectl get pods
#檢視失敗日志
kubectl logs $POD_NAME
#回退版本,然後用上面的指令檢視是否回退成功
kubectl rollout undo deployments/kubernetes-bootcamp
根據上面的内容部署官網的例子:
https://kubernetes.io/docs/tutorials/stateless-application/guestbook/image 從docker hub 上找,先pull下來
#在有問題的node上執行以下指令 檢視問題
journalctl -f -u kubelet