新建文件夹

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
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐