Kubernetes Deployments

kubectl 的Deployment 功能可以指令Kubernetes 如何创建和更新应用实例。通过kubectl 命令创建一个deployment后,Kubernetes master 会调度deployment配置好的应用实例到集群特定的节点运行。

一旦应用实例被创建好之后,Kubernetes Deployment Controller 会持续监控这些实例。如果运行这些实例的节点down机或被删除,Deployment controller 会替换掉它。所以Kubernetes 提供了一种自修复机制来处理机器故障或维护。

进入下面的链接进行部署应用练习。

练习环境:https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive/

  1. 终端输入kubectl get nodes命令可以来查看当前集群
  2. kubectl run命令 run命令创建一个新的部署。 我们需要提供部署名称和应用程序镜像位置 。 如果希望在特定端口上运行应用程序,需要添--port参数 :
    kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080上面的命令通过创建deployment部署了一个应用程序,命令完成了几件事:
  • 搜索可以运行应用程序实例的适当节点(目前只有一个)。
  • 调度应用程序在该节点上运行。
  • 配置集群,以便在需要时重新调度新节点上的实例。
  1. kubectl get deployments此命令可以查看刚才新创建的部署
  2. 查看 app
    在Kubernetes内部运行的Pods运行在一个私有的、隔离的网络上。默认情况下,它们可以从同一个kubernetes集群内的其他pod和服务中看到,但不能从 集群 网络之外看到。 当我们使用kubectl时,我们通过API端点与应用程序进行交互。
    kubectl命令可以创建一个代理,将通信转发到集群范围的私有网络。按control-C可以终止代理,运行时不会显示任何输出。
    打开第二个终端窗口来运行代理。 kubectl proxy现在我们在主机(在线终端)和Kubernetes集群之间建立了连接。代理允许从这些终端直接访问API。您可以看到通过代理端点托管的所有这些api,现在可以通过http://localhost:8001获得这些api。例如,我们可以使用curl命令直接通过API查询版本: curl http://localhost:8001/versionAPI服务器将根据pod名称为每个pod自动创建端点,这些端点也可以通过代理访问。
    首先我们需要获得Pod名称,我们将存储在环境变量POD_NAME中: export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}') echo "Name of the Pod: $POD_NAME"现在,我们可以向在该pod中运行的应用程序发出HTTP请求: curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/结果如图:
  3. kubebuilder 实现一个deployment controller kubectl创建deployment_Deployment