3、k8s 核心功能

3、k8s 核心功能

​ 本節帶領你們快速體驗 k8s 的核心功能:應用部署、訪問、Scale Up/Down 以及滾動更新。docker

(一)部署應用

​ 執行命令:app

$ 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 設置應用對外服務的端口。curl

​ 這裏 deployment 是 Kubernetes 的術語,能夠理解爲應用。url

​ Kubernetes 還有一個重要術語 Pod。Pod 是容器的集合,一般會將緊密相關的一組容器放到一個 Pod 中,同一個 Pod 中的全部容器共享 IP 地址和 Port 空間,也就是說它們在一個 network namespace 中。Pod 是 Kubernetes 調度的最小單位,同一 Pod 中的容器始終被一塊兒調度。spa

​ 運行 kubectl get pods 查看當前的 Pod。code

$ 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 端口映射到節點的端口。 (暴露出去)v8

​ 執行以下命令:rem

$ 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 的功能和使用方法。

相關文章
相關標籤/搜索