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内容
从显示的信息中我们看到目前集群中有3个上下文,ctx-dev、ctx-prod和kubernetes-admin@kubernetes(k8s集群默认的上下文)。
从current-context看到当前的上下文为:kubernetes-admin@kubernetes
3)上下文切换
$ kubectl config use-context ctx-dev
在当前上下文创建一个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资源信息
切换到ctx-prod上下文
$ kubectl config use-context ctx-prod
查看当前上下文的资源信息
$ kubectl get rc
我们发现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配置
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)