介绍
Kubernetes 提供了命名空间(namespace)作为隔离集群中工作负载和资源的一种方式。在本实验中,你将学习如何使用命名空间来隔离工作负载和资源。你将创建一个命名空间,在该命名空间中部署一个简单的 Web 应用程序,并验证该 Web 应用程序是否与集群中的其他资源隔离。
Kubernetes 提供了命名空间(namespace)作为隔离集群中工作负载和资源的一种方式。在本实验中,你将学习如何使用命名空间来隔离工作负载和资源。你将创建一个命名空间,在该命名空间中部署一个简单的 Web 应用程序,并验证该 Web 应用程序是否与集群中的其他资源隔离。
在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。
导航到工作目录:
打开终端并导航到默认的项目文件夹:
cd /home/labex/project
启动 Minikube:
启动 Minikube 以初始化一个 Kubernetes 集群:
minikube start
验证 Minikube 是否正在运行:
检查 Minikube 集群的状态:
minikube status
kubelet
和 apiserver
等组件是否显示为 Running
。minikube start
。如果启动 Minikube 时遇到问题,可以使用 minikube delete
来重置环境(如有需要)。
在这一步骤中,你将创建一个名为 webapp
的命名空间,以将 Web 应用程序与集群中的其他资源隔离。
创建一个名为 namespace.yaml
的文件,内容如下:
apiVersion: v1
kind: Namespace
metadata:
name: webapp
使用以下命令将命名空间应用到你的集群中:
kubectl apply -f namespace.yaml
使用以下命令验证命名空间是否已成功创建:
kubectl get namespaces
你应该能在命名空间列表中看到 webapp
命名空间。
在这一步骤中,你将在 webapp
命名空间中部署一个简单的 Web 应用程序。
创建一个名为 web-app.yaml
的文件,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
namespace: webapp
spec:
replicas: 1
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
该文件创建了一个 Deployment,其中包含一个运行最新版本 Nginx Web 服务器的容器副本。
使用以下命令将 Deployment 应用到你的集群中:
kubectl apply -f web-app.yaml
使用以下命令验证 Web 应用程序是否在 webapp
命名空间中运行:
kubectl get pods -n webapp
你应该能在 webapp
命名空间的 Pod 列表中看到 web-app
Pod。
在这一步骤中,你将使用 Kubernetes Service 将 Web 应用程序暴露给外部。
创建一个名为 web-app-service.yaml
的文件,内容如下:
apiVersion: v1
kind: Service
metadata:
name: web-app
namespace: webapp
spec:
selector:
app: web-app
ports:
- name: http
port: 80
targetPort: 80
type: ClusterIP
该文件创建了一个 Service,使用 ClusterIP 将 Web 应用程序暴露给集群。
使用以下命令将 Service 应用到你的集群中:
kubectl apply -f web-app-service.yaml
使用以下命令验证 Service 是否在 webapp
命名空间中运行:
kubectl get services -n webapp
你应该能在 webapp
命名空间的 Service 列表中看到 web-app
Service。
在这一步骤中,你将验证 Web 应用程序是否与集群中的其他资源隔离。
创建一个名为 other-app.yaml
的文件,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: other
spec:
replicas: 1
selector:
matchLabels:
app: other
template:
metadata:
labels:
app: other
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
在该文件中,你将在默认命名空间中创建另一个名为 other
的 Deployment,该 Deployment 运行一个使用 nginx
镜像的容器。
使用以下命令将 Deployment 应用到你的集群中:
kubectl apply -f other-app.yaml
使用以下命令验证 Deployment 是否在默认命名空间中运行:
kubectl get pods | grep other
你应该能在默认命名空间的 Pod 列表中看到 other
Pod。
首先,通过运行以下命令找到运行你的应用程序的 Pod 名称:
kubectl get pods -l app=other
你应该能看到 other
Pod。记下该 Pod 的名称。
接下来,运行以下命令以在运行你的应用程序的容器中打开一个 shell 会话:
kubectl exec -it pod-name -- /bin/sh
将 <pod-name>
替换为你之前记下的 Pod 名称。
进入 shell 会话后,运行以下命令以访问 web-app
Deployment:
curl web-app.webapp
你应该能看到来自 Nginx Web 服务器的 HTML 响应。
在本实验中,你学习了如何使用命名空间来隔离 Kubernetes 集群中的工作负载和资源。你创建了一个命名空间,在该命名空间中部署了一个简单的 Web 应用程序,使用 Kubernetes Service 将 Web 应用程序暴露给外部,并验证了该 Web 应用程序是否与集群中的其他资源隔离。