简介
Kubernetes,简称k8s,是一个完备的分布式容器集群管理系统,具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时,k8s提供了完善的管理工具,这些工具涵盖了包括开发、部署测试、运维监控在内的各个环节。
基本知识
资源对象
k8s的资源对象总体上可以分为两类:
- 某种资源的对象,例如节点(Node)、Pod、服务(Service)、存储卷(Volume)
- 与资源对象相关的事物与动作,例如标签(Label)、注解(Annotation)、命名空间(Namespace)、部署(Deployment)、HPA、PVC
资源对象一般包括几个通用属性:
- 版本:版本信息包括了此对象所属的资源组
- 类别(Kind):用于定义资源对象的类型
资源对象元数据(metadata)
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节点的相关指令:
# 查看在集群中有多少个nodekubectl get nodes# 查看某个node的详细信息kubectl decribe node k8s-node-1
Namespace, 命名空间:一般用于实现多租户的资源隔离,每个命名空间都是相互独立的存在,属于不同命名空间的资源对象从逻辑上相互隔离。
在每个k8s集群安装完成后master都会自动创建两个命名空间,一个是默认的(default),另一个是系统级的(kube-system)。用户创建的资源对象如果没有指定命名空间,则被默认存放在default命名空间中;而系统相关的资源对象如网络组件、DNS组件、监控类组件等,都被安装在kube-system命名空间中。
命名空间可如下定义:
# 定义一个名为“development”的命名空间apiVersion: v1kind: Namespacemetadata:name: development
创建资源对象时指定命名空间:
apiVersion: v1kind: Podmetadata:name: busyboxnamespace: developmentspec:containers:- image: busyboxcommand:- sleep- "3600"name: busybox
查看指定命名空间的对象:
kubectl get pods --namespace=development
应用类
- service:
- pod:k8s基本调度、复制等管理工作的最小单位。pod内的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume,这样便简化了密切关联的业务容器之间的通信问题,也很好地解决了它们之间的文件共享问题。
- 在kubernetes里,一个Pod里的容器与另外主机上的Pod容器能够直接通信。
- label与label selector:
- deployment:
参考
- 《Kubenetes权威指南(第5版)》
