# 1、启动集群 开始我们需要启动一个K8s集群。下面的命令启动集群组件并且下载Kubectl CLI。 ``` minikube start --wait=false ``` 等待节点变成Ready状态,通过命令检查: ``` kubectl get nodes ``` # 2、kubectl Run run命令根据指定的参数,如镜像或者副本数,创建一个部署(deployment)。这个部署被发送到Kubernetes主服务器,由它启动所需的Pods和容器。kubectl run 类似于 docker run,但是集群层次的。 这个命令的格式是 kubectl run [部署名称] \[属性\] ## Task 下面的命令会启动一个叫http的部署。它将会依据docker镜像katacode/docker-http-server:lastest启动一个容器。 ``` kubectl run http --image=katacoda/docker-http-server:latest --replicas=1 ``` 然后你可以使用kubectl来查看部署的状态: ``` kubectl get deployments ``` 要了解K8s做了什么,可以describe这个部署过程。 ``` kubectl describe deployment http ``` 这个描述包含了有多少个副本是可用的,指定的标签以及部署相关的事件。这些事件将突出显示可能发生的任何问题和错误。 在下一步我们将会暴露运行中的服务(service)。 # 3、Kubectl Expose 当部署被创建了,我们可以使用kubectl来创建一个服务来暴露pods的特定端口。 暴露最近部署的http部署通过kubectl expose。这个命令允许你定义service的不同参数并且怎么暴露部署。 Task 使用下面的命令暴露容器的80端口在宿主机上8000,绑定到宿主机的外部ip。 ``` kubectl expose deployment http --external-ip="172.17.0.83" --port=8000 --target-port=80 ``` 然后你可以ping这个宿主机,并且看到来自HTTP service的结果。 ``` curl http://172.17.0.83:8000 ``` # 4、Kubectl Run and Expose kubectl run 可以使用一个单一的命令创建一个部署并且暴露它。 ## Task 使用命令创建第二个http service暴露在8001端口。 ``` kubectl run httpexposed --image=katacoda/docker-http-server:latest --replicas=1 --port=80 --hostport=8001 ``` 你可以访问它,使用地址: ``` curl http://172.17.0.83:8001 ``` 在背后,这通过Docker Port映射暴露了Pod。结果你不会看到services列出。 ``` kubectl get svc ``` 查看详细你可以使用 ``` docker ps | grep httpexposed ``` ## Pause容器 运行上面的命令你会看到暴露的是Pod的端口,而不是http容器自己的。Pause容器是负责定义Pod的网络。Pod中的其他的容器共享相同的网络命名空间。这提高了网络性能,并允许多个容器通过同一个网络接口进行通信。 # 5、伸缩容器 当我们部署运行时,我们可以使用kubectl来伸缩副本的数量。 伸缩部署将会请求K8s来启动额外的Pods。这些Pods将会使用暴露的service自动的负载均衡。 ## Task kubectl sacle命令允许我们针对特定的部署或者复制控制器调整Pod运行的数量。 ``` kubectl scale --replicas=3 deployment http ``` 列出所有的pod,你应该能看到http部署有3个运行中的pod。 一旦pod启动,它将会被添加到负载均衡服务中。通过describe service你可以看到端点和包含的相关Pod。 ``` kubectl describe svc http ``` 请求service将会请求不同的node处理这个请求。 ``` curl http://172.17.0.83:8000 ```