01.连接到集群
上下文配置
通过 kubectl 子命令 config 的三元组:集群(set-cluster)、用户(set-credentials)和配置上下文(set-context)实现切换。K8s 中的上下文能够连接用户与集群,如果通过 kubectl 的操作如下:
# 创建cluster
kubectl config set-cluster set-cluster scratch --server=https://5.6.7.8 --insecure-skip-tls-verify
# 创建user
kubectl config set-credentials experimenter --username=exp --password=some-password
# 创建context
kubectl config set-context exp-scratch --cluster=scratch --namespace=default --user=experimenter
# 指定当前使用的context
kubectl config use-context exp-scratch
我们也可以指明如下的配置文件,通过 export KUBECONFIG=/path/to/config.yml
的方式来指明当前的上下文:
apiVersion: v1
kind: Config
preferences: {}
# Define the cluster
clusters:
- cluster:
certificate-authority-data: xx
server: "https:/xx:6443"
name: "xx"
# Define the user
users:
- name: "xx"
user:
as-user-extra: {}
client-key-data: "xx"
token: "xx"
# Define the context: linking a user to a cluster
contexts:
- context:
cluster: "0"
namespace: "xx"
user: "xx"
name: "xx"
# Define current context
current-context: "xx"
上下文切换
在 K8s 集群安装完毕之后,可以下载集群的配置文件到本地 kubectl 配置中:
mkdir $HOME/.kube
scp root@<master-public-ip>:/etc/kubernetes/kube.conf $HOME/.kube/config
然后可以来查看当前的上下文
$ unset KUBECONFIG
$ kubectl config current-context # 查看当前载入的上下文
$ kubectl config get-contexts # 浏览可用的上下文
$ kubectl config use-context context-name # 切换到指定上下文
在操作 Kubernetes 时,处理来自不同名称空间的资源,这也是一种很常见的做法。例如,你可能希望列出一个名称空间内的所有 Pod,随后检查另一个名称空间中的服务。此时我的做法是使用 Kubernetes CLI 所支持的 –namespace 标记。例如,若要查看名为 Test 的名称空间中的所有 Pod,可以运行 kubectl get pods -n test
。默认情况下,如果不提供名称空间标记,将使用默认的 Kubernetes 名称空间,即 default。
这个默认值可以在 kubeconfig 文件中修改,例如我们可以将默认名称空间设置为 test、kube-system 或其他任何名称空间。这样在查询资源时就不需要使用 –namespace 标记了。不过更改默认值的命令略微繁琐:
$ kubectl config set contexts.my-context.namespace my-namespace
上述命令会更改 my-context 上下文的 Namespace 字段,将其改为 my-namespace。这也意味着,举例来说,如果切换到 my-context 随后运行 kubectl get pods,将只能看到 my-namespace 名称空间下的 Pod。除了使用 kubectx,我们还可以使用一款名为 kubens 的工具,后者可以帮助我们列出并切换至不同名称空间。
$ kubens
default
docker
kube-node-lease
kube-public
kube-system
为所选上下文设置默认名称空间,这也是一种快速简单的操作:
$ kubens default
Context "docker-desktop" modified.
Active namespace is "default".