简介

Kubernetes,简称k8s,是一个完备的分布式容器集群管理系统,具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时,k8s提供了完善的管理工具,这些工具涵盖了包括开发、部署测试、运维监控在内的各个环节。

基本知识

资源对象

k8s的资源对象总体上可以分为两类:

  • 某种资源的对象,例如节点(Node)、Pod、服务(Service)、存储卷(Volume)
  • 与资源对象相关的事物与动作,例如标签(Label)、注解(Annotation)、命名空间(Namespace)、部署(Deployment)、HPA、PVC

资源对象一般包括几个通用属性:

  • 版本:版本信息包括了此对象所属的资源组
  • 类别(Kind):用于定义资源对象的类型
  • 资源对象元数据(metadata)

    • 名称:名称要唯一
    • 标签:通过标签表明资源对象的特征、类别,筛选不同的资源对象实现对象之间的关联、控制或协作功能。
    • 注解:通常用于实现资源对象属性的自定义扩展。

      集群类

      Master:集群的控制节点,在master上运行着以下关键进程:
  • apiserver:提供HTTP RESTful API接口的主要服务,是对所有k8s资源操作的唯一入口,也是集群控制的入口进程

  • control-manager:k8s中所有资源对象的自动化控制中心
  • scheduler:负责资源调度(Pod调度)的进程

通常master还会部署etcd服务保存资源对象信息。
Node:k8s集群中除了Master外的其它服务器被称为Node,在Node上运行着以下关键进程:

  • kubelet:负责Pod对应容器的创建、启停等任务,同时与master密切协作,实现集群管理的基本功能
  • kube-proxy:实现k8s service的通信与负载均衡机制
  • 容器运行时(如docker):负责本机的容器创建和管理

node节点的相关指令:

  1. # 查看在集群中有多少个node
  2. kubectl get nodes
  3. # 查看某个node的详细信息
  4. kubectl decribe node k8s-node-1

Namespace, 命名空间:一般用于实现多租户的资源隔离,每个命名空间都是相互独立的存在,属于不同命名空间的资源对象从逻辑上相互隔离。
在每个k8s集群安装完成后master都会自动创建两个命名空间,一个是默认的(default),另一个是系统级的(kube-system)。用户创建的资源对象如果没有指定命名空间,则被默认存放在default命名空间中;而系统相关的资源对象如网络组件、DNS组件、监控类组件等,都被安装在kube-system命名空间中。
命名空间可如下定义:

  1. # 定义一个名为“development”的命名空间
  2. apiVersion: v1
  3. kind: Namespace
  4. metadata:
  5. name: development

创建资源对象时指定命名空间:

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: busybox
  5. namespace: development
  6. spec:
  7. containers:
  8. - image: busybox
  9. command:
  10. - sleep
  11. - "3600"
  12. name: busybox

查看指定命名空间的对象:

  1. kubectl get pods --namespace=development

应用类

  • service:
  • pod:k8s基本调度、复制等管理工作的最小单位。pod内的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume,这样便简化了密切关联的业务容器之间的通信问题,也很好地解决了它们之间的文件共享问题。
    • 在kubernetes里,一个Pod里的容器与另外主机上的Pod容器能够直接通信。
  • label与label selector:
  • deployment:

参考

  • 《Kubenetes权威指南(第5版)》