暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

KubernetesTips———更改默认的namespace

云拾 2020-03-06
987

    通常我们使用 K8S 的时候,都是在一个新的 namespace 下部署应用,但是 kubectl 命令默认是在 default 的 namespace 下,每个操作都需要指定 namespace,非常不方便。有没有什么办法可以随时切换默认的namespace呢?


认识 kubectl

    从用户角度看,kubectl 是控制 Kubernetes 的命令行工具,用它来执行各项管理操作。从技术角度看,kubectl 是 Kubernetes 的 API 客户端。Kubernetes API 是 HTTP Rest API,是 Kubernetes 各种资源对象的交互入口。所以 kubectl 的主要工作是对 Kubernetes API 执行各种 HTTP 请求

    kubectl 通过自己的配置和指定的 K8S 集群交互,默认的配置文件位置在 ~/.kube/config,也可以通过 --kubeconfig 选项,或者 $KUBECONFIG 环境变量来指定。


    我们来看看配置里都有什么:

    $ kubectl config view
    apiVersion: v1
    #集群
    clusters:
    - cluster:
    certificate-authority-data: DATA+OMITTED
        server: https://192.168.201.1:6443
    name: kubernetes


    #上下文
    contexts:
    - context:
        cluster: kubernetes
    user: kubernetes-admin
    name: kubernetes-admin@kubernetes


    #默认上下文
    current-context: kubernetes-admin@kubernetes
    kind: Config
    preferences: {}


    #用户
    users:
    - name: kubernetes-admin
    user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

        可以看到,配置文件中主要包含三部分:

    • clusters:指定CA证书和api server地址

    • users:集群用户,可以使用证书或者用户名、密码的方式登录

    • contexts:上下文,绑定用户与集群,可以设置默认使用的context

        

        kubeconfig 可以通过 kubectl config SUBCOMMAND 来管理,下面我们看下怎么通过修改配置来实现切换 namespace。


    方法一:直接修改当前 context

    $ kubectl config set-context --current --namespace={{ namespace }}

        修改后的结果:

      $ kubectl config view
      - context:
      cluster: kubernetes
      namespace: openstack
      user: kubernetes-admin
      name: kubernetes-admin@kubernetes
      current-context: kubernetes-admin@kubernetes


      方法二:建一个新的 context

      $ kubectl config set-context {{ namespace }} --namespace={{ namespace }} --cluster=kubernetes --user=kubernetes-admin

          切换到新context

      $ kubectl config use-context {{ namespace }}

          修改后的结果:

        - context:
        cluster: kubernetes
        namespace: openstack
        user: kubernetes-admin
        name: kubernetes-admin@openstack
        current-context: kubernetes-admin@openstack


        方法三:使用别名封装

        $ alias kubectl='_kubectl_custom(){ if [[ "$1" == "project" && "$2" != "" ]]; then kubectl config set-context --current --namespace=$2; elif [[ "$1" == "projects" && "$2" == "" ]]; then kubectl get ns; elif [[ "$1" == "project" && "$2" == "" ]]; then kubectl config get-contexts | sed -n "2p" | awk "{print \$5}";  else kubectl $*; fi;}; _kubectl_custom'

            使用方法:

          $ kubectl projects
          NAME STATUS AGE
          default           Active   27h
          openstack Active 21h


          $ kubectl project openstack
          Context "kubernetes-admin@kubernetes" modified.


          $ kubectl get svc
          NAME     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
          cinder   ClusterIP   10.96.203.111   <none>        80/TCP,443/TCP   21h


              好了,现在可以敞开用了,Have Fun!

          文章转载自云拾,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论