本篇文章将带领大家快速体验 k8s 的核心功能:应用部署、访问应用、Scale Up/Down 以及滚动更新。
应用部署
首先我们来说说部署应用,我们在上一篇提到的 kubernetes.io 开发的一个交互式教程中执行下面这个命令:
命令通过 kubectl run
部署了一个应用,命名为 kubernetes-bootcamp
,Docker 镜像可以通过 --image
指定,--port
设置了应用对外服务的端口号
kubectl run kubernetes-bootcamp \
--image=docker.io/jocatalin/kubernetes-bootcamp:v1 \
--port=8080
执行命令结果如下图:
从执行的结果 deployment.apps/kubernetes-bootcamp created
中可以看出应用已经被成功创建,deployment 是 Kubernetes 的术语,可以理解为应用的意思。
Kubernetes 还有一个重要的术语 Pod
,Pod
是容器的集合,我们通常会将紧密相关的一组容器放到一个 Pod
中,在同一个 Pod
中,所有容器共享 IP
地址和 Port
空间,也就是说它们在一个 network namespace
中。
Pod
是 Kubernetes 调度的最小单位,同一 Pod
中的容器始终被一起调度。
运行 kubectl get pods
查看当前的 Pod
,下图的kubernetes-bootcamp-56cdd766d-cnnjs
就是应用的 Pod
访问应用
默认情况下,所有 Pod
只能在集群内部访问。对于上面的例子,要访问应用只能直接访问容器的 8080
端口。为了能够从外部直接访问应用,我们需要将容器的 8080
端口映射到节点的端口。
我们执行如下这个命令:
kubectl expose deployment/kubernetes-bootcamp \
--type="NodePort" \
--port 8080
执行结果如下图:
执行命令 kubectl get services
可以查看应用被映射到节点的哪个端口
由上图可以知道 kubernetes-bootcamp
的 8080
端口已经映射到 minikube
的 32405
端口,端口号是随机分配的,你们的端口号会跟我的不一致,我们可以执行如下命令来访问应用:
curl minikube:32405
Scale 应用
默认情况下应用只会运行一个副本,可以通过 kubectl get deployments
查看副本数。
执行如下命令将副本数增加到 3 个:
kubectl scale deployments/kubernetes-bootcamp --replicas=3
如下图所示,成功增加了3个副本数
通过 kubectl get pods
也可以看到当前 Pod
也增加到 3 个
通过 curl
访问应用,可以看到每次请求发送到不同的 Pod
,三个副本轮询处理,这样就实现了负载均衡,如下图所示:
要 scale down
也很方便,执行命令:
kubectl scale deployments/kubernetes-bootcamp --replicas=2
出现如下图的 deployment.extensions/kubernetes-bootcamp scaled
就说明 scale down
成功了
输入 kubectl get deployments
命令,可以看到还剩下2个副本数
输入 kubectl get pods
命令,可以知道其中一个副本被删除了
滚动更新
当前应用使用的 image
版本为 v1,执行如下命令将其升级到 v2
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
出现如下图则说明升级成功
通过 kubectl get pods
可以观察滚动更新的过程:v1 的 Pod
被逐个删除,同时启动了新的 v2 Pod
。我这截图太慢看不出来。
下图是别人成功截取的
更新完成后访问新版本应用,使用 curl minikube:32405
命令访问,如下图所示:
如果要回退到 v1 版本,可以执行 kubectl rollout undo
命令:
kubectl rollout undo deployments/kubernetes-bootcamp
所下图所示:
使用curl minikube:32405
来验证一下版本是否已经回退到 v1版本,如下图可以知道版本已经成功回退了。
好咯,到了这里,我们已经通过官网的交互式教程快速体验了 Kubernetes 的功能和使用方法。