部署應用到叢集中
阿新 • • 發佈:2022-04-13
一、部署應用需要的YAML檔案
<方法一> 直接命令執行
kubectl run testapp --image=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1
<方法二> 使用配置好的YMAL
Pod
apiVersion: v1 kind: Pod metadata: name: test-pod spec: # 定義容器,可以多個 containers: - name: test-k8s # 容器名字 image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 映象
二、Deployment 通過 label 關聯起來 Pods
Deployment(與Pod中的name同名)
apiVersion: apps/v1 kind: Deployment metadata: # 部署名字 name: test-k8s spec: replicas: 2 # 用來查詢關聯的 Pod,所有標籤都匹配才行 selector: matchLabels: app: test-k8s # 定義 Pod 相關資料 template: metadata: labels: app: test-k8s spec: # 定義容器,可以多個 containers: - name: test-k8s # 容器名字 image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 映象
三、部署應用
部署一個 nodejs web 應用,原始碼地址:Github
# 部署應用 kubectl apply -f app.yaml # 檢視 deployment kubectl get deployment # 檢視 pod kubectl get pod -o wide # 檢視 pod 詳情 kubectl describe pod pod-name # 檢視 log kubectl logs pod-name # 進入 Pod 容器終端, -c container-name 可以指定進入哪個容器。 kubectl exec -it pod-name -- bash # 伸縮擴充套件副本 kubectl scale deployment test-k8s --replicas=5 # 把叢集內埠對映到節點 kubectl port-forward pod-name 8090:8080 # 檢視歷史 kubectl rollout history deployment test-k8s # 回到上個版本 kubectl rollout undo deployment test-k8s # 回到指定版本 kubectl rollout undo deployment test-k8s --to-revision=2 # 刪除部署 kubectl delete deployment test-k8s
Pod 報錯解決
如果你執行 kubectl describe pod/pod-name
發現 Events 中有下面這個錯誤
networkPlugin cni failed to set up pod "test-k8s-68bb74d654-mc6b9_default" network: open /run/flannel/subnet.env: no such file or directory
在每個節點建立檔案/run/flannel/subnet.env
寫入以下內容,配置後等待一會就好了
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
更多命令
# 檢視全部
kubectl get all
# 重新部署
kubectl rollout restart deployment test-k8s
# 命令修改映象,--record 表示把這個命令記錄到操作歷史中
kubectl set image deployment test-k8s test-k8s=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v2-with-error --record
# 暫停執行,暫停後,對 deployment 的修改不會立刻生效,恢復後才應用設定
kubectl rollout pause deployment test-k8s
# 恢復
kubectl rollout resume deployment test-k8s
# 輸出到檔案
kubectl get deployment test-k8s -o yaml >> app2.yaml
# 刪除全部資源
kubectl delete all --all
更多官網關於 Deployment 的介紹
將 Pod 指定到某個節點執行:nodeselector
限定 CPU、記憶體總量:文件
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
工作負載分類
- Deployment
適合無狀態應用,所有pod等價,可替代 - StatefulSet
有狀態的應用,適合資料庫這種型別。 - DaemonSet
在每個節點上跑一個 Pod,可以用來做節點監控、節點日誌收集等 - Job & CronJob
Job 用來表達的是一次性的任務,而 CronJob 會根據其時間規劃反覆執行。