k8s集群命名空间(Namespace)
命名空间主要是为了对Kubernetes中运行的资源进行隔离, 但是网络是互通的,类似Docker的容器,可以将多个资源配置到一个NameSpace中。而NameSpace可以对不同环境进行资源隔离,默认情况下Kubernetes提供了default命名空间,在构建资源时,如果不指定资源,默认采用default资源
- Namespace是对一组资源和对象的抽象集合.
- 常见的 pod, service, deployment 等都是属于某一个namespace的(默认是 default)
- 不是所有资源都属于namespace,如nodes, persistent volume,namespace 等资源则不属于任何 namespace
# 查看namespace,namespaces可以简写为namespace或ns
kubectl get namespaces
# 查看namespace里的资源,--namespace=kube-system 可以简写为 -n kube-system
# 使用`kubectl get all --namespace=命名空间名称`可以查看此命名空间下的所有资源
kubectl get all --namespace=kube-system
# 使用`kubectl get 资源类型 --namespace=命名空间名称`可以查看此命名空间下的对应的资源
kubectl get pod --namespace=kube-system
创建namespace
命令创建
kubectl create namespace ns1
kubectl get ns
YAML文件创建
- k8s中几乎所有的资源都可以通这YAML编排来创建
- 可以使用
kubectl edit 资源类型 资源名编辑资源的YAML语法 - 也可使用
kubectl get 资源类型 资源名 -o yaml来查看 - 还可通过
kubectl explain 资源类型来查看语法文档
# 会进入vim编辑界面
kubectl edit namespace ns1
...
kubectl get ns ns1 -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2023-11-03T05:34:48Z"
labels:
kubernetes.io/metadata.name: ns1
name: ns1
resourceVersion: "15924"
uid: 741a2629-450f-4e9d-9455-b4877690e595
spec:
finalizers:
- kubernetes
status:
phase: Active
# 查看namespace相关语法参数
kubectl explain namespace
# 查看namespace下级metadata的相关语法参数
kubectl explain namespace.metadata
# 查看namespace下级metadata再下级name的相关语法参数
kubectl explain namespace.metadata.name
# 编写创建namespace的YAML文件
cat > create_ns2.yml << "EOF"
# api版本号
apiVersion: v1
# 类型为namespace
kind: Namespace
# 定义namespace的元数据属性
metadata:
# 定义name属性为ns2
name: ns2
EOF
# 使用`kubctl apply -f`应用YAML文件
kubectl apply -f create_ns2.yml
kubectl get ns
# 删除命名空间
kubectl delete ns ns1
kubectl delete ns ns2