# 1、创建Deployment 最常见的K8s对象是部署对象。部署对象定义了所需的容器,以及Kubernetes的其他部分用于发现和连接应用程序的名称和标签。 ## Task 复制下面的定义到编辑器。这定义文件定义了怎么启动名叫webapp1的应用。它使用Docker镜像katacoda/dokcker-http-server运行在80端口。 ``` apiVersion: apps/v1 kind: Deployment metadata: name: webapp1 spec: replicas: 1 selector: matchLabels: app: webapp1 template: metadata: labels: app: webapp1 spec: containers: - name: webapp1 image: katacoda/docker-http-server:latest ports: - containerPort: 80 ``` 部署到集群使用命令: ``` kubectl create -f deployment.yaml ``` 由于这是一个部署对象,可以通过命令获得一系列的部署对象: ``` kubectl get deployment ``` 单个部署的详细信息可以通过输出通过: ``` kubectl describe deployment webapp1 ``` # 2、创建Service K8s有控制应用通信的强大网络能力。这些网络配置也可以通过YAML配置。 ## Task 复制Service定义到编辑器。这Service选择所有标签为webapp1的应用。由于多个副本或实例被部署了,他们将会自由基于这个共同的标签负载均衡。这个Service通过NortPort使应用可用。 ``` apiVersion: v1 kind: Service metadata: name: webapp1-svc labels: app: webapp1 spec: type: NodePort ports: - port: 80 nodePort: 30080 selector: app: webapp1 ``` 所有的K8s对象都使用一致的方式kubectl被部署。 部署Service使用: ``` kubectl create -f service.yaml ``` 像之前一样,详细查看所有部署的Service对象使用 ``` kubectl get svc ``` descibe这个对象关于这个配置查阅更多详细信息 ``` kubectl descirbe svc webapp1-svc ``` ``` curl host01:30080 ``` # 3、伸缩部署 部署可以根据需要,YAML可以被改变成不同的配置。这遵循了基础设施即代码的思维方式。清单应该保存在源代码控制之下,并用于确保生产中的配置与源代码控制中的配置相匹配。 ## Task 更新deployment.yaml,增加运行实例的数量,例如,这个文件应该是这样的: > replicas:4 更新已存在的定义使用kubectl apply。伸缩副本的数量,部署改变过的YAML文件,使用 ``` kubectl apply -f deployment.yaml ``` 一会,我们集群的期望状态被更新了,查看: ``` kubectl get deployment ``` 为了匹配这个请求,将会调度更多的Pod。 由于所有的pod拥有相同的标签选择器,他们将会在Service NortPort部署后负载均衡。 向这个端口发出请求将导致不同的容器处理请求。 ``` curl host01:30080 ``` 更多K8s网络详细和对象定义将会在将来的章节介绍。