构建k8s集群
查看k8s集群信息
|
|
其中Kubernetes control plane, CoreDNS都是k8s集群中运行的服务;
部署应用
当尝试在不存在的命名空间里面创建一个pod
|
|
Pod 不会在不存在的命名空间中创建,因此我们首先需要创建一个命名空间。
|
|
现在我们有了一个命名空间,我们想在其中创建一个 pod.
要在我们创建的命名空间中创建一个 pod,请将 –namespace=test-env 选项传递给命令,
|
|
获取属于“test-env”命名空间的 pod 的详细信息
|
|
我们通过kubectl run部署了一个应用,命名为kubernetes-bootcapm,docker镜像通过–image指定, –port设置应用对外服务的端口;
这里的kubernetes-bootcapm应该是一个deployment, 这是k8s的术语,可以理解为应用;
kubernetes还有另外一个重要术语pod, Pod是容器的集合,通常会将紧密相关的一组容器放到一个Pod中,同一个Pod中的所有容器共享IP地址和Port空间,也就是说它们在一个network namespace中。
Pod是Kubernetes调度的最小单位,同一Pod中的容器始终被一起调度;
kubernetes-bootcamp就是应用的pod;
访问应用
默认情况下,所有Pod只能在集群内部访问。对于上面这个例子,要访问应用只能直接访问容器的8080端口。为了能够从外部访问应用,我们需要将容器的8080端口映射到节点的端口;
|
|
可以看到这里面有一个service, 可以将service暂时理解为端口映射;
kubernetes-bootcamp是我们应用的service,8080端口已经映射到host的31564端口,端口号是随机分配的,可以执行如下命令访问应用,
31564
Scale应用
默认情况下应用只会运行一个副本,可以通过kubectl get deployments查看副本数。
执行如下命令将副本数增加到3个:
|
|
通过kubectl get pods可以看到当前Pod增加到3个:
通过curl访问应用,可以看到每次请求发送到不同的Pod,3个副本轮询处理,这样就实现了负载均衡:
要scale down也很方便,执行下列命令:
从上面截图可以看出,其中的一个副本被删除了;
滚动更新
当前应用使用的image版本为v1,执行如下命令将其升级到v2,
|
|
通过kubectl get pods可以观察滚动更新的过程:v1的Pod被逐个删除,同时启动了新的v2 Pod。更新完成后访问新版本应用:
如果要回退到v1版本也很容易,执行kubectl rollout undo命令:
|
|
然后我们来验证一下版本是都真的回退到v1: