一、Kubernetes的整体架构

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

Kubernetes架构组件命令简介_Pod

Kubernetes属于主从分布式架构,主要由Master Node和Worker Node组成,以及包括客户端命令行工具kubectl和其它附加项。

  • Master Node:作为控制节点,对集群进行调度管理;Master Node由API Server、Scheduler、Cluster State Store和Controller-Manger Server所组成;
  • Worker Node:作为真正的工作节点,运行业务应用的容器;Worker Node包含kubelet、kube proxy和Container Runtime;
  • kubectl:用于通过命令行与API Server进行交互,而对Kubernetes进行操作,实现在集群中进行各种资源的增删改查等操作;
  • Add-on:是对Kubernetes核心功能的扩展,例如增加网络和网络策略等能力。

2 Master Node(主节点)

2.1 API Server(API服务器)

API Server主要用来处理REST的操作,确保它们生效,并执行相关业务逻辑,以及更新etcd(或者其他存储)中的相关对象。另外,API Server也作为集群的网关。

2.2 Cluster state store(集群状态存储)

Kubernetes默认使用etcd作为集群整体存储,当然也可以使用其它的技术。etcd是一个简单的、分布式的、一致的key-value存储,主要被用来共享配置和服务发现。

2.3 Controller-Manager Server(控制管理服务器)

Controller-Manager Serve用于执行大部分的集群层次的功能,它既执行生命周期功能(例如:命名空间创建和生命周期、事件垃圾收集、已终止垃圾收集、级联删除垃圾收集、node垃圾收集),也执行API业务逻辑(例如:pod的弹性扩容)。

2.4 Scheduler(调度器)

scheduler组件为容器自动选择运行的主机。

3、Worker Node(从节点)

3.1 Kubelet

Kubelet是Kubernetes中最主要的控制器,它是Pod和Node API的主要实现者,Kubelet负责驱动容器执行层。在Kubernetes中,应用容器彼此是隔离的,并且与运行其的主机也是隔离的,这是对应用进行独立解耦管理的关键点。

3.2 Container Runtime(容器运行时)

每一个Node都会运行一个Container Runtime,其负责下载镜像和运行容器。Kubernetes本身并不停容器运行时环境,但提供了接口,可以插入所选择的容器运行时环境。

Kubernetes架构组件命令简介_SVC_02

3.3 kube proxy

基于一种公共访问策略(例如:负载均衡),服务提供了一种访问一群pod的途径。此方式通过创建一个虚拟的IP来实现,客户端能够访问此IP,并能够将服务透明的代理至Pod。每一个Node都会运行一个kube-proxy,kube proxy通过iptables规则引导访问至服务IP,并将重定向至正确的后端应用,通过这种方式kube-proxy提供了一个高可用的负载均衡解决方案。服务发现主要通过DNS实现。

在Kubernetes中,kube proxy负责为Pod创建代理服务;引到访问至服务;并实现服务到Pod的路由和转发,以及通过应用的负载均衡。

3、kubectl

kubectl是Kubernetes集群的命令行接口。运行kubectl命令的语法如下所示:

$ kubectl [command] [TYPE] [NAME] [flags]

这里的command,TYPE、NAME和flags为:

  • comand:指定要对资源执行的操作,例如create、get、describe和delete
  • TYPE:指定资源类型,资源类型是大小学敏感的,开发者能够以单数、复数和缩略的形式。例如:
$ kubectl get pod pod1 
$ kubectl get pods pod1 
$ kubectl get po pod1
  • NAME:指定资源的名称,名称也大小写敏感的。如果省略名称,则会显示所有的资源,例如:
$kubectl get pods
  • flags:指定可选的参数。例如,可以使用-s或者–server参数指定Kubernetes API server的地址和端口。

另外,可以通过运行kubectl help命令获取更多的信息。

二、Kubernetes Components

 1 Master 组件

       1.1 kube-apiserver  # 集群接口

       1.2 ETCD # 集群数据存储(类似数据库)

       1.3 kube-controller-manager # 节点管理

       1.4 cloud-controller-manager # 对接公有云接口

       1.5 kube-scheduler # 任务调度

2  Node 组件

       2.1 kubelet # 增删改查Pod,用的最多的组件也是命令,

       2.2 kube-proxy # 为Service提供集群内服务发现和负载均衡

3 Container Runtime  # 容器运行时

       Kubernetes 支持多个容器运行环境:  

           Docker、 containerd、CRI-O  

           以及任何实现Kubernetes CRI (容器运行环境接口)。

4 addons 插件  

       4.1 DNS # 集群内布DNS解析

       4.2 dashborad # 用户图形界面

       4.3 resource-usage-monitoring # 容器资源监测

       4.4 Cluster-level Logging # 集群层面日志

Kubernetes 集群所需的各种组件:

Kubernetes架构组件命令简介_SVC_03

Kubernetes架构组件命令简介_组件命令简介_04

三、K8s常用组件总结

  • kube-scheduler是k8s的pod调度器,在众多的node节点中使用调度测策略分配请求任务,还可以自动感知node拓扑变化,发现pod死活,主要是做cpu、内存的限制来分配调度任务


  • kube-controller-manager 对pod进行管理负责对pod进行重建


  • kubelet node节点上创建、删除容器并利用探针进行健康性检查,向apiserver汇报pod状态和资源利用率


  • kube-porxy 在node节点维护iptables转发和ipvs规则,保持容器间的正常网络通讯


  • 每个节点上都会有一个kubelet和kebu-proxy


  • etcd etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。

四、Kubernetes常用命令

1、kubectl组件全部命令

localhost:minikube gaoxinfu$ kubectl
kubectl controls the Kubernetes cluster manager.

 Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):
  create         Create a resource from a file or from stdin.
  expose         使用 replication controller, service, deployment 或者 pod 并暴露它作为一个 新的
Kubernetes Service
  run            在集群中运行一个指定的镜像
  set            为 objects 设置一个指定的特征

Basic Commands (Intermediate):
  explain        查看资源的文档
  get            显示一个或更多 resources
  edit           在服务器上编辑一个资源
  delete         Delete resources by filenames, stdin, resources and names, or by resources and label selector

Deploy Commands:
  rollout        Manage the rollout of a resource
  scale          Set a new size for a Deployment, ReplicaSet or Replication Controller
  autoscale      自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController 的副本数量

Cluster Management Commands:
  certificate    修改 certificate 资源.
  cluster-info   显示集群信息
  top            Display Resource (CPU/Memory/Storage) usage.
  cordon         标记 node 为 unschedulable
  uncordon       标记 node 为 schedulable
  drain          Drain node in preparation for maintenance
  taint          更新一个或者多个 node 上的 taints

Troubleshooting and Debugging Commands:
  describe       显示一个指定 resource 或者 group 的 resources 详情
  logs           输出容器在 pod 中的日志
  attach         Attach 到一个运行中的 container
  exec           在一个 container 中执行一个命令
  port-forward   Forward one or more local ports to a pod
  proxy          运行一个 proxy 到 Kubernetes API server
  cp             复制 files 和 directories 到 containers 和从容器中复制 files 和 directories.
  auth           Inspect authorization

Advanced Commands:
  diff           Diff live version against would-be applied version
  apply          通过文件名或标准输入流(stdin)对资源进行配置
  patch          使用 strategic merge patch 更新一个资源的 field(s)
  replace        通过 filename 或者 stdin替换一个资源
  wait           Experimental: Wait for a specific condition on one or many resources.
  convert        在不同的 API versions 转换配置文件
  kustomize      Build a kustomization target from a directory or a remote url.

Settings Commands:
  label          更新在这个资源上的 labels
  annotate       更新一个资源的注解
  completion     Output shell completion code for the specified shell (bash or zsh)

Other Commands:
  api-resources  Print the supported API resources on the server
  api-versions   Print the supported API versions on the server, in the form of "group/version"
  config         修改 kubeconfig 文件
  plugin         Provides utilities for interacting with plugins.
  version        输出 client 和 server 的版本信息

Usage:
  kubectl [flags] [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
localhost:minikube gaoxinfu$