Kubernetes基于namespace实现环境隔离

1 实现步骤

1.1 说明

  • namespace:关于 namespace 的说明以及使用细节请见 namespace的官网文档

  • context:用户使用 kubectl 命令行工具操作 k8s 集群中的资源时,会涉及到上下文(即 context),为了实现不现环境的资源隔离,需要创建不同环境所对应的上下文,这样切换不同的上下文时,即可切换不同的环境。

  • 实现说明:本文要在k8s集群中创建两个名称分别为 dev 和 test 的 namespace,以及创建两个名称分别为 dev 和 test 的 context,且名称为 dev 的 context 使用名称为 dev 的 namespace,名称为 test 的 context 使用名称为 test 的 namespace,这样切换到名称为 dev 的 context 时,默认使用的是名称为 dev 的 namespace,切换到名称为 test 的 context时,默认使用的是名称为 test 的 namespace,从而实现 dev 环境和 test 环境之间的资源隔离。为了验证创建的两个 context 之间是否真正的实现资源隔离,本文还会在名称为 dev 的 context 中创建一个 Deployment,然后在名称分别为 dev 和 test 的 context 中查看是否存在创建的那个 Deployment。

  • 操作说明:请在 k8s 集群的 master 节点中依次执行 1.2 小节至 1.9 小节中的命令。

1.2 查看namespace

  • 执行命令:在创建 namespace 之前,先执行以下命令以查看 k8s 集群中当前已有哪些 namespace。

    # 查看当前所有的 namespace
    kubectl get namespace
    
  • 执行结果:从执行结果来看,k8s 集群中当前没有名称为 dev 和 test 的这两个 namespace。
    在这里插入图片描述

1.3 创建namespace

  • 执行命令:分别执行以下命令,以创建两个名称分别为 dev 和 test 的 namespace,创建完成之后,再查看创建结果。

    # 创建一个名称为 dev 的 namespace
    kubectl create namespace dev
    
    # 创建一个名称为 test 的 namespace
    kubectl create namespace test
    
    # # 查看当前所有的 namespace
    kubectl get namespace
    
  • 执行结果:从执行结果来看,k8s 集群中当前已经有了两个名称分别为 dev 和 test 的 namespace。
    在这里插入图片描述

1.4 查看context

  • 执行命令:在创建 context 之前,先执行以下命令以查看 k8s 集群中当前已有哪些 context,并查看当前处理哪个 context。

    # 查看当前所有的 context
    kubectl config get-contexts
    
    # 查看当前的 context
    kubectl config current-context
    
  • 执行结果:从执行结果来看,k8s 集群中当前只有一个名称为 kubernetes-admin@Kubernetes 的 context,并且正处于该 context。
    在这里插入图片描述

1.5 查看config

  • 执行命令:在创建 context之前,先执行以下命令以查看 k8s 集群中当前的 config 配置,以获取创建 context 时所需要的 cluster 信息和 user 信息。
    # 查看当前配置
    kubectl config view
    
  • 执行结果:从执行结果来看,k8s 集群中当前配置的 cluster 为 kubernetes,当前配置的 user 为 kubernetes-admin
    在这里插入图片描述

1.6 创建context

  • 执行命令:分别执行以下命令,以创建两个名称分别为 dev 和 test 的 context,创建完成之后,再查看创建结果。注意:请把下面命令中的 cluster_name 和 user_name 换成使用 1.5 节中命令获取到的值。

    # 创建一个名称为 dev 的 context,该 context 使用名称为 dev 的 namespace
    kubectl config set-context dev --namespace=dev --cluster=cluster_name --user=user_name
    
    # 创建一个名称为 test 的 context,该 context 使用名称为 test 的 namespace
    kubectl config set-context test --namespace=test --cluster=cluster_name --user=user_name
    
    # 查看当前所有的 context
    kubectl config get-contexts
    
  • 执行结果:从执行结果来看,k8s 集群中当前已经有了两个名称分别为 dev 和 test 的 context。
    在这里插入图片描述

1.7 切换context

  • 执行命令:在创建 deployment 之前,先执行以下命令以切换到名称为 dev 的 context(即默认使用名称为 dev 的 namespace)。

    # 查看当前的 context
    kubectl config current-context
    
    # 切换到名称为 dev 的 context
    kubectl config use-context dev
    
    # 查看当前的 context
    kubectl config current-context
    
  • 执行结果:从执行结果来看,切换 context 之前是处于名称为 kubernetes-admin@kubernetes 的 context,并成功切换到了名称为 dev 的 context。
    在这里插入图片描述

1.8 创建deployment

  • 配置文件:在 k8s 主机的 master 节点的当前路径下创建一个名称为 nginx-deployment.yaml 的配置文件,该文件中定义了使用 nginx:1.7.9 镜像创建名称为 nginx-deployment 的 Deployment,内容如下所示:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
    
    
  • 执行命令:分别执行以下命令,以查看在创建 Deployment 之前 k8s 集群中所有的 pod,然后再创建 Deployment,并查看创建结果。

    # 查看当前 context 下的所有的 pod
    kubectl get pods
    
    # 在当前的 context 下创建一个 nginx 的 deployment
    kubectl apply -f nginx-deployment.yaml
    
    # 查看当前 context 下的所有的 pod
    kubectl get pods
    
  • 执行结果:从执行结果来看,在创建 Deployment 之前,k8s 集群中没有任何 pod,而创建成功之后,成功创建了两个 pod。
    在这里插入图片描述

1.9 检验

  • 执行命令:分别执行以下命令,以查看当前所处于哪个 context,并查看当前 context 下有哪些 pod,然后再切换到名称为 test 的 context,并查看名称为 test 的 context 下有哪些 pod。

    # 查看当前所处的 context
    kubectl config current-context
    
    # 查看当前的 context 下的所有的 pod
    kubectl get pods
    
    # 切换到名称为 test 的 context
    kubectl config use-context test
    
    # 查看当前的 context 下的所有的 pod
    kubectl get pods
    
  • 执行结果:从执行结果来看,当前正处理名称为 dev 的 context,而且该 context 下有两个 pod,而名称为 test 的 context 中则没有 pod。
    在这里插入图片描述

  • 结果说明:根据以上执行结果可以说明,在名称为 dev 的 context 中创建的 k8s 资源对名称为 test 的 context 是不可见的,从而实现了资源隔离。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值