CKA 考试基础知识(一)-kubernetes 中 kubeconfig 文件和 context 的使用

1.kubeconfig文件

使用 kubeconfig 文件来组织有关集群、用户、命名空间和身份认证机制的信息。kubectl 命令行工具使用 kubeconfig 文件来查找选择集群所需的信息,并与集群的 API 服务器进行通信。

注:用于配置集群访问的文件称为 kubeconfig 文件。这是引用配置文件的通用方法。这并不意味着有一个名为 kubeconfig 的文件

默认情况下,kubectl 在 $HOME/.kube 目录下查找名为 config 的文件。 您可以通过设置 KUBECONFIG 环境变量或者设置 --kubeconfig参数来指定其他 kubeconfig 文件。

k8s集群可以通过namespace和context的设置来对不同的工作组进行区分,使它们既可以共享同一个Kubernetes集群的服务,也能够互不干扰。

支持多集群、用户和身份认证机制

假设您有多个集群,并且您的用户和组件以多种方式进行身份认证。比如:

  • 正在运行的 kubelet 可能使用证书在进行认证。
  • 用户可能通过令牌进行认证。
  • 管理员可能拥有多个证书集合提供给各用户。

使用 kubeconfig 文件,您可以组织集群、用户和命名空间。您还可以定义上下文,以便在集群和命名空间之间快速轻松地切换。

KUBECONFIG 环境变量

KUBECONFIG 环境变量包含一个 kubeconfig 文件列表。 对于 Linux 和 Mac,列表以冒号分隔。对于 Windows,列表以分号分隔。 KUBECONFIG 环境变量不是必要的。 如果 KUBECONFIG 环境变量不存在,kubectl 使用默认的 kubeconfig 文件,$HOME/.kube/config。

设置临时环境变量

export  KUBECONFIG=$KUBECONFIG:config-demo:config-demo-2

如果 KUBECONFIG 环境变量存在,kubectl 使用 KUBECONFIG 环境变量中列举的文件合并后的有效配置。

2.上下文(Context)

通过 kubeconfig 文件中的 context 元素,使用简便的名称来对访问参数进行分组。每个上下文都有三个参数:cluster、namespace 和 user。默认情况下,kubectl 命令行工具使用 当前上下文 中的参数与集群进行通信。

kubectl config 命令可以设置和使用context

选择当前上下文

kubectl config use-context

kubectl config --help 查看 kubectl config 命令的使用说明
通过kubectl config 命令可以设置,使用,删除上下文等操作。

3.namespace和context事例:

创建development(开发)和production(生产)两个namespace和context
2)创建命名空间
namespace-development.yaml

apiVersion: v1
kind: Namespace
metadata:
 name: development

namespace-production.yaml

apiVersion: v1
kind: Namespace
metadata:
 name: production

创建:

$ kubectl create -f namespace-development.yaml
$ kubectl create -f namespace-production.yaml

2)创建上下文
创建ctx-dev上下文,指定其命名空间为development

$ kubectl config set-context ctx-dev --namespace=development --cluster=kubernetes --user=kubernetes-admin

创建ctx-prod上下文,指定其命名空间为production

$ kubectl config set-context ctx-prod --namespace=production --cluster=kubernetes --user=kubernetes-admin

注:–cluster=kubernetes --user=kubernetes-admin,cluster和user这里使用k8s集群本身的cluster和user,这样直接使用集群的密钥进行认证

$ kubectl config view

查看kubeconfig内容
file

从显示的信息中我们看到目前集群中有3个上下文,ctx-dev、ctx-prod和kubernetes-admin@kubernetes(k8s集群默认的上下文)。

从current-context看到当前的上下文为:kubernetes-admin@kubernetes

3)上下文切换

$ kubectl config use-context ctx-dev

file

在当前上下文创建一个RC

redis-slave-controller.yaml

apiVersion: v1
kind: ReplicationController
metadata:
 name: redis-slave
 labels:
  name: redis-slave
spec:
 replicas: 2
 selector:
  name: redis-slave
 template:
  metadata:
   labels:
     name: redis-slave
  spec:
   containers:

   - name: slave
     image: kubeguide/guestbook-redis-slave
     ports:
     - containerPort: 6379
$ kubectl create -f redis-slave-controller.yaml

在当前上下文环境创建RC

$ kubectl get rc

查看对应的rc资源信息
file

切换到ctx-prod上下文

$ kubectl config use-context ctx-prod

file

查看当前上下文的资源信息

$ kubectl get rc

file
我们发现ctx-prod上下文环境中没有rc资源信息,所以在不同的上下文中,资源是相互隔离的,互不干扰。

4.kubectl config 常用命令

1.查看配置

kubectl config view
指定文件名查看
kubectl config --kubeconfig=config-demo view

2.创建集群,用户名和上下文

kubectl config --kubeconfig=config-demo set-cluster development --server=https://1.2.3.4 --certificate-authority=fake-ca-file
kubectl config --kubeconfig=config-demo set-cluster scratch --server=https://5.6.7.8 --insecure-skip-tls-verify

3.删除用户

kubectl --kubeconfig=config-demo config unset users.<name>

4.删除集群

kubectl --kubeconfig=config-demo config unset clusters.<name>

5.删除上下文

kubectl --kubeconfig=config-demo config unset contexts.<name>

6.将上下文详细信息添加到配置文件中:

kubectl config --kubeconfig=config-demo set-context dev-frontend --cluster=development --namespace=frontend --user=developer
kubectl config --kubeconfig=config-demo set-context dev-storage --cluster=development --namespace=storage --user=developer
kubectl config --kubeconfig=config-demo set-context exp-scratch --cluster=scratch --namespace=default --user=experimenter

7.设置当前上下文

kubectl config --kubeconfig=config-demo use-context dev-frontend

8.切换上下文

kubectl config user-context ctx-dev

相关文章:
kubernetes中kubeconfig文件和context的使用
总结:kubectl之kubeconfig配置

为者常成,行者常至