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".
下一页