欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > kubernetes-Namespace(企业实战)

kubernetes-Namespace(企业实战)

2025/3/28 7:23:15 来源:https://blog.csdn.net/weixin_62649065/article/details/146405009  浏览:    关键词:kubernetes-Namespace(企业实战)

一、资源介绍

### Kubernetes Namespace 详细介绍

#### 1. 什么是 Namespace?
Namespace 是 Kubernetes 中用于将集群资源划分为多个虚拟集群的机制。它允许在同一物理集群中创建多个逻辑分区,每个分区可以包含独立的资源(如 Pod、Service、Deployment 等),且这些资源在命名上是隔离的。

#### 2. Namespace 的作用
- **资源隔离**:不同 Namespace 中的资源相互隔离,避免命名冲突。
- **权限控制**:通过 RBAC(基于角色的访问控制)限制用户或组对特定 Namespace 的访问权限。
- **资源配额**:可以为每个 Namespace 设置资源配额,限制其资源使用量(如 CPU、内存等)。
- **环境隔离**:将开发、测试、生产环境部署在不同的 Namespace 中,便于管理。

#### 3. 默认 Namespace
Kubernetes 集群默认包含以下 Namespace:
- **default**:未指定 Namespace 时,资源默认创建在此。
- **kube-system**:存放 Kubernetes 系统组件(如 kube-proxy、CoreDNS 等)。
- **kube-public**:存放公共资源,通常对所有用户可见。
- **kube-node-lease**:存放节点租约信息,用于节点心跳检测。

#### 4. 创建和管理 Namespace
- **创建 Namespace**:
  ```yaml
  apiVersion: v1
  kind: Namespace
  metadata:
    name: my-namespace
  ```
  使用 `kubectl apply -f namespace.yaml` 创建。

- **查看 Namespace**:
  ```bash
  kubectl get namespaces
  ```

- **删除 Namespace**:
  ```bash
  kubectl delete namespace my-namespace
  ```

- **在特定 Namespace 中创建资源**:
  在资源定义中指定 `namespace` 字段,或使用 `kubectl` 命令时添加 `-n` 参数:
  ```bash
  kubectl apply -f my-resource.yaml -n my-namespace
  ```

#### 5. Namespace 的优点
- **资源隔离**:避免不同团队或环境的资源冲突。
- **权限管理**:通过 RBAC 实现细粒度的权限控制。
- **资源配额**:防止单个 Namespace 占用过多资源,影响其他 Namespace。
- **环境管理**:便于区分和管理开发、测试、生产环境。
- **简化资源管理**:通过 Namespace 对资源进行逻辑分组,提升管理效率。

#### 6. 使用场景
- **多团队协作**:每个团队使用独立的 Namespace,避免资源冲突。
- **多环境部署**:为开发、测试、生产环境创建不同的 Namespace。
- **资源配额管理**:为不同项目或团队设置资源配额,防止资源滥用。
- **权限控制**:限制用户或组对特定 Namespace 的访问和操作权限。

#### 7. 注意事项
- **资源隔离不完全**:Namespace 主要提供逻辑隔离,物理资源(如节点)仍可能被多个 Namespace 共享。
- **跨 Namespace 访问**:Service 可以通过 `<service-name>.<namespace-name>.svc.cluster.local` 的形式跨 Namespace 访问。
- **删除 Namespace**:删除 Namespace 会同时删除其中的所有资源,需谨慎操作。

### 总结
Namespace 是 Kubernetes 中实现资源隔离和管理的重要工具,适用于多团队协作、多环境部署等场景。通过合理使用 Namespace,可以提高集群的资源利用率和安全性。

二、实战部署(企业资源限制)

[root@master ns]# cat ns-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-quota
  namespace: test
spec:
  hard:
    requests.cpu: 2
    requests.memory: 2Gi
    limits.cpu: 4
    limits.memory: 4Gi
[root@master ns]# kubectl apply -f ns-quota.yaml
resourcequota/mem-cpu-quota created
[root@master ns]# kubectl get resourcequota -n test
NAME            AGE   REQUEST                                     LIMIT
mem-cpu-quota   9s    requests.cpu: 0/2, requests.memory: 0/2Gi   limits.cpu: 0/4, limits.memory: 0/4Gi

[root@master ns]# kubectl apply -f pod-test.yaml
pod/pod-test created
[root@master ns]# kubectl get pod -n test
NAME       READY   STATUS    RESTARTS   AGE
pod-test   1/1     Running   0          4s
[root@master ns]# cat pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-test
  namespace: test
  labels:
    app: tomcat-pod-test
spec:
  containers:
  - name: tomcat-test
    image: docker.io/xianchao/tomcat-8.5-jre8:v1
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 8080
    resources:
      limits:
        memory: "2Gi"
        cpu: "2"
      requests:
        memory: "100Mi"
        cpu: "500m

以下是对你提供的代码和操作的详细解释:

---

### 1. **创建 ResourceQuota**
#### 代码:
```yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-quota
  namespace: test
spec:
  hard:
    requests.cpu: 2
    requests.memory: 2Gi
    limits.cpu: 4
    limits.memory: 4Gi
```

#### 解释:
- **ResourceQuota** 是 Kubernetes 中用于限制 Namespace 资源使用的对象。
- 这个 ResourceQuota 的名称为 `mem-cpu-quota`,作用于 `test` Namespace。
- **`hard`** 字段定义了资源配额的限制:
  - `requests.cpu: 2`:Namespace 中所有 Pod 的 CPU 请求总量不能超过 2 个 CPU 核心。
  - `requests.memory: 2Gi`:Namespace 中所有 Pod 的内存请求总量不能超过 2 GiB。
  - `limits.cpu: 4`:Namespace 中所有 Pod 的 CPU 限制总量不能超过 4 个 CPU 核心。
  - `limits.memory: 4Gi`:Namespace 中所有 Pod 的内存限制总量不能超过 4 GiB。

#### 操作:
```bash
kubectl apply -f ns-quota.yaml
```
- 使用 `kubectl apply` 命令创建 ResourceQuota。

#### 查看 ResourceQuota:
```bash
kubectl get resourcequota -n test
```
- 输出:
  ```
  NAME            AGE   REQUEST                                     LIMIT
  mem-cpu-quota   9s    requests.cpu: 0/2, requests.memory: 0/2Gi   limits.cpu: 0/4, limits.memory: 0/4Gi
  ```
  - `REQUEST` 列显示当前 Namespace 中已使用的资源请求量(`0/2` 表示当前没有 Pod 使用 CPU 和内存请求)。
  - `LIMIT` 列显示当前 Namespace 中已使用的资源限制量(`0/4` 表示当前没有 Pod 使用 CPU 和内存限制)。

---

### 2. **创建 Pod**
#### 代码:
```yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-test
  namespace: test
  labels:
    app: tomcat-pod-test
spec:
  containers:
  - name: tomcat-test
    image: docker.io/xianchao/tomcat-8.5-jre8:v1
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 8080
    resources:
      limits:
        memory: "2Gi"
        cpu: "2"
      requests:
        memory: "100Mi"
        cpu: "500m"
```

#### 解释:
- 这是一个 Pod 的定义文件,Pod 的名称为 `pod-test`,部署在 `test` Namespace 中。
- 容器名称为 `tomcat-test`,使用镜像 `docker.io/xianchao/tomcat-8.5-jre8:v1`。
- **`resources`** 字段定义了容器的资源请求和限制:
  - `requests`:
    - `cpu: "500m"`:容器请求 0.5 个 CPU 核心。
    - `memory: "100Mi"`:容器请求 100 MiB 内存。
  - `limits`:
    - `cpu: "2"`:容器最多可以使用 2 个 CPU 核心。
    - `memory: "2Gi"`:容器最多可以使用 2 GiB 内存。

#### 操作:
```bash
kubectl apply -f pod-test.yaml
```
- 使用 `kubectl apply` 命令创建 Pod。

#### 查看 Pod:
```bash
kubectl get pod -n test
```
- 输出:
  ```
  NAME       READY   STATUS    RESTARTS   AGE
  pod-test   1/1     Running   0          4s
  ```
  - Pod 状态为 `Running`,表示已成功创建并运行。

---

### 3. **ResourceQuota 的影响**
- 创建 Pod 后,ResourceQuota 的 `REQUEST` 和 `LIMIT` 会更新:
  - `requests.cpu`:增加 0.5(Pod 的 CPU 请求)。
  - `requests.memory`:增加 100Mi(Pod 的内存请求)。
  - `limits.cpu`:增加 2(Pod 的 CPU 限制)。
  - `limits.memory`:增加 2Gi(Pod 的内存限制)。

- 如果后续创建的 Pod 导致资源使用量超过 ResourceQuota 的限制,Kubernetes 会拒绝创建 Pod,并返回错误。

---

### 4. **总结**
- **ResourceQuota** 用于限制 Namespace 中资源的使用总量。
- **Pod 的 `resources` 字段** 定义了容器的资源请求和限制。
- Kubernetes 会根据 ResourceQuota 和 Pod 的资源需求进行调度和限制。
- 通过合理设置 ResourceQuota 和 Pod 的资源请求/限制,可以避免资源浪费和争用,提高集群的稳定性和资源利用率。

---

如果你有其他问题,欢迎继续提问!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词