Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动化扩缩容、维护等功能。
Master组件可以再集群中任何节点上运行,通常将所有master组件运行于一台服务器上,并且不会在该服务器上运行任何用户容器。
kube-apiserver用于提供资源请求/调用接口
etcd是Kubernetes提供的默认存储系统,保存所有集群数据,使用时需要为etcd数据提供备份;
kube-controller-manager运行管理控制器,是集群中处理常规任务的后台线程;它们被编译成单个二进制文件,在单个进程中运行。
控制器包含:
云控制管理器负责与底层云提供商的平台交互。
cloud-controller-manager包括:
kube-scheduler监视新创建没有分配到Node的Pod,为Pod选择一个Node;
插件(addon)是实现集群pod和Services功能的;
Kubernetes集群都需要配置集群DNS,集群DNS是一个DNS服务器,为Kubernetes Services提供DNS记录。
kube-ui提供集群状态基础信息查看。
容器资源监控提供一个UI浏览监控数据。
Cluster-level Logging负责保存容器日志,搜索/查看日志。
节点组件运行在Node上,提供Kubernetes运行时环境,以及维护Pod。
kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能如下:
kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象
docker用于运行容器
rkt运行容器,作为docker的替代方案
supervisord是一个轻量级的监控系统,用于保障kubelet和docker运行状态;
fluentd是一个守护进程,可提供cluster-level logging.
Kubernetes object包含object spec和object status两个字段,Spec描述对象所需的状态,Status描述对象的实际状态。
Kubernetes对象的yaml文件,需要设置以下必填字段:
Kubernetes中所有对象都用name和UID来明确地标识。对于非唯一用户提供的属性,kubernetes提供labels和annotations.
UID是Kubernetes生成的,在Kubernetes集群的整个生命周期中创建的每个对象都有不同的UID。
namespace为名称提供一个范围,将集群资源划分为多个用途,默认情况下,同一个namespace中的对象将具有相同的访问控制策略。
创建namespace后在namespace基础上创建pod。创建namespace命令如下:
kubectl create namespace new-namespace
通过yaml文件创建,namespace.yaml内容如下:
apiVersion: v1
kind: Namespace
metadata:
name: new-namesapce
执行kubectl create -f ./namesapce.yaml
删除namespace会自动删除所有属于该namespace的资源。
kubectl delete namespaces new-namespace
查看namespace
kubectl get namespaces
Kubernetes Volume具有明确的生命周期,与pod相同,当pod被删除时,Volume也将消失。
kubernetes支持的Volume类型有:
emptyDir
hostPath
gcePersistentDisk
awsElasticBlockStore
nfs
iscsi
fc (fibre channel)
flocker
glusterfs
rbd
cephfs
gitRepo
secret
persistentVolumeClaim
downwardAPI
projected
azureFileVolume
azureDisk
vsphereVolume
Quobyte
PortworxVolume
ScaleIO
StorageOS
local
node可以是VM或物理机,每个node具有运行pod的一些必要条件,并由master组件进行管理,node节点上运行的服务包括Docker、kubelet和kube-proxy
node status:
Addresses
Condition
Capacity
Info
秘钥和证书保存在secret中,configmap是保存一些非敏感信息。