经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Kubernetes » 查看文章
三、k8s 核心功能
来源:cnblogs  作者:cuiyongchao007  时间:2021/1/18 16:03:47  对本文有异议

三、k8s 核心功能

? 本节带领大家快速体验 k8s 的核心功能:应用部署、访问、Scale Up/Down 以及滚动更新。

(一)部署应用

? 执行命令:

  1. $ kubectl run kubernetes-bootcamp > --image=docker.io/jocatalin/kubernetes-bootcamp:v1 > --port=8080
  2. 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.
  3. deployment.apps/kubernetes-bootcamp created
  4. $

? 这里我们通过 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。

  1. $ kubectl get pods
  2. NAME READY STATUS RESTARTS AGE
  3. kubernetes-bootcamp-dd9784f6-84z6n 1/1 Running 0 2m24s
  4. $

? kubernetes-bootcamp-dd9784f6-84z6n 就是应用的pod。

(二)访问应用

? 默认情况下,所有 Pod 只能在集群内部访问。对于上面这个例子,要访问应用只能直接访问容器的 8080 端口。为了能够从外部访问应用,我们需要将容器的 8080 端口映射到节点的端口。 (暴露出去)

? 执行如下命令:

  1. $ kubectl expose deployment/kubernetes-bootcamp > --type="NodePort" > --port 8080
  2. service/kubernetes-bootcamp exposed
  3. $

? 执行命令 kubectl get services 可以查看应用被映射到节点的哪个端口。

  1. $ kubectl get service
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13m
  4. kubernetes-bootcamp NodePort 10.110.61.199 <none> 8080:31755/TCP 76s
  5. $

? 这里有两个 service,可以将 service 暂时理解为端口映射,后面我们会详细讨论。

? kubernetes 是默认的 service,暂时不用考虑。kubernetes-bootcamp 是我们应用的 service,8080 端口已经映射到 host01 的 31755 端口,端口号是随机分配的,可以执行如下命令访问应用:

  1. $ curl minikube:31755
  2. Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-84z6n | v=1
  3. $

(三)Scale 应用

? 默认情况下应用只会运行一个副本,可以通过 kubectl get deployments查看副本数。

  1. $ kubectl get deployments.apps
  2. NAME READY UP-TO-DATE AVAILABLE AGE
  3. kubernetes-bootcamp 1/1 1 1 10m
  4. $

? 执行如下命令将副本数增加到 3 个:

  1. $ kubectl scale deployments/kubernetes-bootcamp --replicas=3
  2. deployment.apps/kubernetes-bootcamp scaled
  3. $ kubectl get deployments.apps
  4. NAME READY UP-TO-DATE AVAILABLE AGE
  5. kubernetes-bootcamp 3/3 3 3 11m
  6. $

? 通过 kubectl get pods 也可以看到当前 Pod 也增加到 3 个。

  1. $ kubectl get pods
  2. NAME READY STATUS RESTARTS AGE
  3. kubernetes-bootcamp-dd9784f6-84z6n 1/1 Running 0 12m
  4. kubernetes-bootcamp-dd9784f6-8r2xk 1/1 Running 0 47s
  5. kubernetes-bootcamp-dd9784f6-szmlj 1/1 Running 0 47s
  6. $

? 通过 curl 访问应用,可以看到每次请求发送到不同的 Pod,三个副本轮询处理,这样就实现了负载均衡。

  1. $ curl minikube:31755
  2. Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-szmlj | v=1
  3. $ curl minikube:31755
  4. Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-84z6n | v=1
  5. $ curl minikube:31755
  6. Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-szmlj | v=1
  7. $ curl minikube:31755
  8. Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-84z6n | v=1

? 要 scale down 也很方便,执行命令:

  1. $ kubectl scale deployments/kubernetes-bootcamp --replicas=2
  2. deployment.apps/kubernetes-bootcamp scaled
  3. $ kubectl get pods
  4. NAME READY STATUS RESTARTS AGE
  5. kubernetes-bootcamp-dd9784f6-84z6n 1/1 Running 0 15m
  6. kubernetes-bootcamp-dd9784f6-8r2xk 1/1 Terminating 0 3m48s
  7. kubernetes-bootcamp-dd9784f6-szmlj 1/1 Running 0 3m48s
  8. $ kubectl get deployments.apps
  9. NAME READY UP-TO-DATE AVAILABLE AGE
  10. kubernetes-bootcamp 2/2 2 2 15m
  11. $

(四)滚动更新

当前应用使用的 image 版本为 v1,执行如下命令将其升级到 v2:

  1. $ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
  2. deployment.apps/kubernetes-bootcamp image updated
  3. $ kubectl get pods
  4. NAME READY STATUS RESTARTS AGE
  5. kubernetes-bootcamp-7d6f8694b6-dmflb 1/1 Running 0 21s
  6. kubernetes-bootcamp-7d6f8694b6-jv88g 1/1 Running 0 23s
  7. kubernetes-bootcamp-dd9784f6-84z6n 1/1 Terminating 0 17m
  8. kubernetes-bootcamp-dd9784f6-szmlj 1/1 Terminating 0 6m2s
  9. $
  10. $ kubectl get pods
  11. NAME READY STATUS RESTARTS AGE
  12. kubernetes-bootcamp-7d6f8694b6-dmflb 1/1 Running 0 50s
  13. kubernetes-bootcamp-7d6f8694b6-jv88g 1/1 Running 0 52s
  14. $

? 通过 kubectl get pods 可以观察滚动更新的过程:v1 的 Pod 被逐个删除,同时启动了新的 v2 Pod。更新完成后访问新版本应用。

  1. $ curl minikube:31755
  2. Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-7d6f8694b6-jv88g | v=2
  3. $ curl minikube:31755
  4. Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-7d6f8694b6-dmflb | v=2
  5. $

? 如果要回退到 v1 版本也很容易,执行 kubectl rollout undo 命令:

  1. $ kubectl rollout undo deployments/kubernetes-bootcamp
  2. deployment.apps/kubernetes-bootcamp rolled back
  3. $ kubectl get pods
  4. NAME READY STATUS RESTARTS AGE
  5. kubernetes-bootcamp-7d6f8694b6-dmflb 1/1 Terminating 0 5m59s
  6. kubernetes-bootcamp-7d6f8694b6-jv88g 1/1 Terminating 0 6m1s
  7. kubernetes-bootcamp-dd9784f6-4p2wl 1/1 Running 0 9s
  8. kubernetes-bootcamp-dd9784f6-ds4bh 1/1 Running 0 7s
  9. $ curl minikube:31755
  10. Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-ds4bh | v=1
  11. $ curl minikube:31755
  12. Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-dd9784f6-4p2wl | v=1
  13. $

? 验证版本已经回退到 v1。 至此,我们已经通过官网的交互式教程快速体验了 Kubernetes 的功能和使用方法。

原文链接:http://www.cnblogs.com/cuiyongchao007/p/14290812.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号