Kubernetes 基本介绍

2020-12-10 container k8s

简介

Kubernetes 的整体架构如下。

k8s arch

K8S 包含了两类节点,Master 和 Nodes ,前者用于管理协调集群,包含了 kube-apiserver kube-controller-manager kube-scheduler 三个进程;后者则是真正工作的机器,包含了 kubelet kube-proxy 两个进程。

  • API Server 对外提供 RESTFull 接口,负责处理用户请求,这是唯一与 etcd 集群通信的组件。
  • Controller 运行了一系列控制器,修改各种资源对象,向用户期望状态进行迁移。
  • Scheduler 根据配置为运行的 Pod 选择部署的 Worker 节点。

客户端

通常通过 kubectl 与 K8S 集群进行交互。

自动补全

一般的 Bash 或者 Zsh 都提供了自动补全的方式,不过需要安装单独的依赖包,默认是安装的,例如 bash-completion ,可以通过 type _init_completion 命令检查,详细参考 自动补全

可以通过 kubectl completion bash 生成命令补全内容,参数也可以是 zsh ,然后通过如下方式进行配置。

----- 1. 生成配置文件,并添加到~/.bashrc文件中
# kubectl completion bash > /usr/share/bash-completion/bash_completion
# source /usr/share/bash-completion/bash_completion

----- 2. 加载默认配置,添加到默认的加载目录
# kubectl completion bash > /etc/bash_completion.d/kubectl

在输出的时候,可以通过 -o custom-columns=XXX 指定输出内容以及格式。

kubeconfig

K8S 中通过配置文件保存了集群、用户、命名空间、鉴权等与集群建立连接相关信息,默认保存在 ~/.kube/config 文件中,也可以通过 KUBECONFIG 环境变量,或者 --kubeconfig 参数指定。

当通过 kubectl config view 命令查看时,有可能是几个配置文件的合并,详见 Organizing Cluster Access Using kubeconfig Files 中的介绍。

通常一个集群对应了一个上下文,其上下文包括了:

  • 集群 (Cluster),集群API服务器的URL地址;
  • 用户 (User),集群的特定用户的身份验证凭据;
  • 命名空间 (Namespace),连接到集群时使用的命名空间。

也就是说,在切换集群的时候,实际上就是切换上下文,当然,也可以通过 --cluster --user --namespace 指定。

如下是常用的命令。

----- 查看配置,也就是~/.kube/config,可以通过 --minify 减少输出
# client/bin/kubectl config view

----- 设置ctl命令的默认NS
# client/bin/kubectl config set-context --current --namespace=default

----- 列出所有上下文信息以及当前上下文信息
# client/bin/kubectl config get-contexts
# client/bin/kubectl config current-contexts

基本概念

Namespace

用来做逻辑隔离,一般在用户比较多的时候使用,在不同 Namespace 中可以出现相同的 name 。

----- 查看当前所有的NS
# kubectl get namespace

----- 查看某个NS下的Pods信息
# kubectl get pods --namespace=default

默认会创建三个命名空间:

  • default 如果在创建对象的时候不指定,则使用该空间;
  • kube-system 由K8S系统本身所使用的空间;
  • kube-public 一般在集群管理的时候使用,可以被多个集群同时访问。