本節帶領你們快速體驗 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 $
默認狀況下應用只會運行一個副本,能夠經過 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 的功能和使用方法。