三、k8s 核心功能
? 本節帶領大家快速體驗 k8s 的核心功能:應用部署、訪問、Scale Up/Down 以及滾動更新,
(一)部署應用
? 執行命令:
$ kubectl run kubernetes-bootcamp \
> --image=docker.io/jocatalin/kubernetes-bootcamp:v1 \
> --port=8080
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/kubernetes-bootcamp created
$
? 這里我們通過 kubectl run 部署了一個應用,命名為 kubernetes-bootcamp,
? Docker 鏡像通過 --image 指定,--port 設定應用對外服務的埠,
? 這里 deployment 是 Kubernetes 的術語,可以理解為應用,
? Kubernetes 還有一個重要術語 Pod,Pod 是容器的集合,通常會將緊密相關的一組容器放到一個 Pod 中,同一個 Pod 中的所有容器共享 IP 地址和 Port 空間,也就是說它們在一個 network namespace 中,Pod 是 Kubernetes 調度的最小單位,同一 Pod 中的容器始終被一起調度,
? 運行 kubectl get pods 查看當前的 Pod,
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-dd9784f6-84z6n 1/1 Running 0 2m24s
$
? kubernetes-bootcamp-dd9784f6-84z6n 就是應用的pod,
(二)訪問應用
? 默認情況下,所有 Pod 只能在集群內部訪問,對于上面這個例子,要訪問應用只能直接訪問容器的 8080 埠,為了能夠從外部訪問應用,我們需要將容器的 8080 埠映射到節點的埠, (暴露出去)
? 執行如下命令:
$ kubectl expose deployment/kubernetes-bootcamp \
> --type="NodePort" \
> --port 8080
service/kubernetes-bootcamp exposed
$
? 執行命令 kubectl get services 可以查看應用被映射到節點的哪個埠,
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13m
kubernetes-bootcamp NodePort 10.110.61.199 <none> 8080:31755/TCP 76s
$
? 這里有兩個 service,可以將 service 暫時理解為埠映射,后面我們會詳細討論,
? kubernetes 是默認的 service,暫時不用考慮,kubernetes-bootcamp 是我們應用的 service,8080 埠已經映射到 host01 的 31755 埠,埠號是隨機分配的,可以執行如下命令訪問應用:
$ curl minikube:31755
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-84z6n | v=1
$
(三)Scale 應用
? 默認情況下應用只會運行一個副本,可以通過 kubectl get deployments查看副本數,
$ kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1/1 1 1 10m
$
? 執行如下命令將副本數增加到 3 個:
$ kubectl scale deployments/kubernetes-bootcamp --replicas=3
deployment.apps/kubernetes-bootcamp scaled
$ kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 3/3 3 3 11m
$
? 通過 kubectl get pods 也可以看到當前 Pod 也增加到 3 個,
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-dd9784f6-84z6n 1/1 Running 0 12m
kubernetes-bootcamp-dd9784f6-8r2xk 1/1 Running 0 47s
kubernetes-bootcamp-dd9784f6-szmlj 1/1 Running 0 47s
$
? 通過 curl 訪問應用,可以看到每次請求發送到不同的 Pod,三個副本輪詢處理,這樣就實作了負載均衡,
$ curl minikube:31755
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-szmlj | v=1
$ curl minikube:31755
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-84z6n | v=1
$ curl minikube:31755
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-szmlj | v=1
$ curl minikube:31755
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-84z6n | v=1
? 要 scale down 也很方便,執行命令:
$ kubectl scale deployments/kubernetes-bootcamp --replicas=2
deployment.apps/kubernetes-bootcamp scaled
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-dd9784f6-84z6n 1/1 Running 0 15m
kubernetes-bootcamp-dd9784f6-8r2xk 1/1 Terminating 0 3m48s
kubernetes-bootcamp-dd9784f6-szmlj 1/1 Running 0 3m48s
$ kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 2/2 2 2 15m
$
(四)滾動更新
當前應用使用的 image 版本為 v1,執行如下命令將其升級到 v2:
$ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
deployment.apps/kubernetes-bootcamp image updated
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-7d6f8694b6-dmflb 1/1 Running 0 21s
kubernetes-bootcamp-7d6f8694b6-jv88g 1/1 Running 0 23s
kubernetes-bootcamp-dd9784f6-84z6n 1/1 Terminating 0 17m
kubernetes-bootcamp-dd9784f6-szmlj 1/1 Terminating 0 6m2s
$
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-7d6f8694b6-dmflb 1/1 Running 0 50s
kubernetes-bootcamp-7d6f8694b6-jv88g 1/1 Running 0 52s
$
? 通過 kubectl get pods 可以觀察滾動更新的程序:v1 的 Pod 被逐個洗掉,同時啟動了新的 v2 Pod,更新完成后訪問新版本應用,
$ curl minikube:31755
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-7d6f8694b6-jv88g | v=2
$ curl minikube:31755
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-7d6f8694b6-dmflb | v=2
$
? 如果要回退到 v1 版本也很容易,執行 kubectl rollout undo 命令:
$ kubectl rollout undo deployments/kubernetes-bootcamp
deployment.apps/kubernetes-bootcamp rolled back
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-7d6f8694b6-dmflb 1/1 Terminating 0 5m59s
kubernetes-bootcamp-7d6f8694b6-jv88g 1/1 Terminating 0 6m1s
kubernetes-bootcamp-dd9784f6-4p2wl 1/1 Running 0 9s
kubernetes-bootcamp-dd9784f6-ds4bh 1/1 Running 0 7s
$ curl minikube:31755
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-ds4bh | v=1
$ curl minikube:31755
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-4p2wl | v=1
$
? 驗證版本已經回退到 v1, 至此,我們已經通過官網的互動式教程快速體驗了 Kubernetes 的功能和使用方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/250079.html
標籤:其他
下一篇:四、k8s 重要概念
