新建文件夹
mkdir deployment-demo && cd deployment-demo
创建命名空间
让我们创建一个名为namespace.yaml的YAML 文件来创建命名空间。
apiVersion: v1kind: Namespacemetadata: name: deployment-demo labels: apps: web-based annotations: type: demo
使用kubectl命令创建命名空间。
kubectl create -f namespace.yaml
使用如下kubectl命令,具有和上面相同的效果
kubectl create namespace deployment-demo
将资源配额分配给命名空间
现在让我们为新创建的命名空间分配一些资源配额限制。这将确保在此命名空间中部署的pod不会消耗比资源配额中提到的更多的系统资源。
创建名为resourceQuota.yaml的文件。这是资源配额YAML内容。
apiVersion: v1kind: ResourceQuotametadata: name: mem-cpu-quota namespace: deployment-demospec: hard: requests.cpu: "4" requests.memory: 8Gi limits.cpu: "8" limits.memory: 16Gi
使用YAML创建资源配额。
kubectl create -f resourceQuota.yaml
现在,让我们描述命名空间以检查资源配额是否已应用于deployment-demo命名空间。
kubectl describe ns deployment-demo
输出应如下所示。
Name: deployment-demoLabels: apps=web-basedAnnotations: type=demoStatus: ActiveResource Quotas Name: mem-cpu-quota Resource Used Hard -------- --- --- limits.cpu 0 2 limits.memory 0 2Gi requests.cpu 0 1 requests.memory 0 1Gi
创建部署
我们将使用公共Nginx映像进行此部署。
创建名为deployment.yaml的文件,并将以下内容复制到该YAML文件中。
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx labels: app: nginx namespace: deployment-demo annotations: monitoring: "true"spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx name: nginx ports: - containerPort: 80 resources: limits: memory: "2Gi" cpu: "1000m" requests: memory: "1Gi" cpu: "500m"
在容器下,我们已经定义了它的资源限制,请求和容器端口(在Dockerfile中公开了一个)。
使用kubectl创建部署
kubectl create -f deployment.yaml
检查部署
kubectl get deployments -n deployment-demo
尽管我们添加了最少的信息,但在部署之后,Kubernetes将为部署添加更多信息,例如resourceVersion,uid,status等。
您可以使用kubectl命令以YAML格式描述部署来检查它。
kubectl get deployment nginx -n deployment-demo --output yaml
创建Service并公开部署
现在我们有一个正在运行的部署,我们将创建一个指向nginx部署的NodePort(30500)类型的Kubernetes服务。使用NodePort,您将能够在端口30500上的所有kubernetes节点上访问Nginx服务。
创建名为service.yaml的文件并复制以下内容。
apiVersion: v1kind: Servicemetadata: labels: app: nginx name: nginx namespace: deployment-demospec: ports: - nodePort: 30500 port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: NodePort
Service是解释标签(label)和选择器(selectors)的最佳示例。在这项服务中,我们有一个带有“app”=“nginx”标签(label)的选择器(selector)。使用此service将能够匹配我们的nginx部署中的pod,因为部署和pod具有相同的标签(label)。因此,自动将所有发送到nginx service的请求发送到nginx部署。
让我们使用kubectl命令创建service。
kubectl create -f service.yaml
您可以查看使用kubectl命令创建的service。
kubectl get services -n deployment-demo
现在,您将能够在端口30500上的任何一个kubernetes节点IP上访问nginx服务。
![2dba36d6c9ba2d40640df7805e0367a5.png](https://i-blog.csdnimg.cn/blog_migrate/5421384fe86432eff165fbabd755efb1.jpeg)