typora/note/devops/kubernetes/命名空间.md

87 lines
3.0 KiB
Markdown
Raw Permalink Normal View History

2024-12-11 21:48:55 -05:00
### 一、命名空间
Kubernetes 的命名空间是一种将集群内的资源进行逻辑分割的机制。它们是用来实现多租户环境的一种方式,允许不同的团队或项目在同一个集群中运行,而不会互相干扰。命名空间可以用来组织资源,提供一种隔离机制,并可以用于访问控制、资源配额以及策略的应用
### 二、命名空间的主要用途
1. **资源分隔**命名空间可以让资源如Pods、Services、Deployments等彼此隔离。不同命名空间中同名的资源不会冲突
2. **多租户环境**:在同一个集群中,不同的用户(或团队、部门、项目)可以使用各自的命名空间,从而保持工作环境的独立性
3. **权限控制**通过Role-Based Access ControlRBAC可以为不同的命名空间设置不同的访问权限实现细粒度的权限管理
4. **配额管理**可以为每个命名空间设置资源配额ResourceQuotas限制该命名空间可以使用的资源数量例如CPU、内存、存储等
5. **策略应用**可以为命名空间应用策略如网络策略NetworkPolicies来控制命名空间内部或跨命名空间的网络流量
### 三、默认命名空间
- `default`:如果不指定命名空间,资源默认被创建在这个命名空间中
- `kube-system`由Kubernetes系统创建的资源所在的命名空间如系统组件和服务
- `kube-public`这是一个自动创建的命名空间对所有用户都是可读的。它通常用于集群级别的资源如集群信息如集群CIDR范围
- `kube-node-lease`:用于持有每个节点的租约对象,这些租约用于节点寿命的确定
### 四、命名空间操作
1. 使用kubectl 工具操作
- **创建命名空间:**
```
kubectl create namespace <namespace-name>
```
- **获取命名空间列表:**
```
kubectl get namespaces
# 或者使用缩写
kubectl get ns
```
- **获取特定命名空间的详细信息:**
```
kubectl describe namespace <namespace-name>
```
- **删除命名空间:**
```
kubectl delete namespace <namespace-name>
```
- **设置默认命名空间:**
为了避免每次都在`kubectl`命令中指定`--namespace`参数你可以更改你的Kubernetes配置来设置默认的命名空间
```
kubectl config set-context $(kubectl config current-context) --namespace=<namespace-name>
```
- **查看当前上下文的默认命名空间:**
```
kubectl config view | grep namespace:
```
2. 使用yaml文件
- **创建命名空间的YAML文件namespace.yaml**
```
apiVersion: v1
kind: Namespace
metadata:
name: <namespace-name>
```
- **应用YAML文件来创建命名空间**
```
kubectl apply -f namespace.yaml
```
- **删除命名空间:**
使用YAML文件删除命名空间首先你需要确保知道要删除的命名空间的准确名称
```
kubectl delete -f namespace.yaml
```