Kubernetes 学习之三

38 阅读5分钟
  1. Master组件: 通常在一台VM/机器上启动所有Master组件,并且不会在此VM/机器上运行用户容器

    Kube-Controller-Manager: 管理控制器

    包含: Node控制器,副本Replication控制器(负责维护系统中的每个副本中的pod),端点Endpoints控制器(即连接Pods和Service,填充Endpoints对象),Service Account和Token控制器(为新的Namespace创建默认账户访问API Token)

    Cloud-Controller-Manager: 云控制器,负责与底层的云平台提供商打交道

    包含:节点Node控制器,路由Route控制器,Service控制器,Volume卷控制器

    Kube-Scheduler: 监视新创建的没有分配node的pod,为pod选择一个node

    插件Addons: 实现pod和service功能的;pod由deploymen和Replication Controller等进行管理, Namespace对象是由kube-system namespace创建的

    DNS: 为集群中的service 提供DNS 服务

  2. 节点组件: 维护pod,运行在node上

pod所需的volume,secrets,container; 检查container状态, 汇报pod/node状态

kube-proxy:维护网络规则进行转发来实现服务抽象

docker : 运行容器

RKT: 运行容器,作为docker的替代方案

supervisord: 监控系统,保障kubelet和docker的运行

fluentd : 守护进程,可提供cluster-level-logging

3. Kubernetes对象: object spec 和 object status

Kubernetes Deployment: 表示集群上运行的应用的对象。 举例: 创建Deployment时,在Deployment Spec中指定需要运行的应用的三个副本,Kubernetes 创建三个应用实例来实现,并维护更新达到spec要求。

.yaml 就是表述spec的脚本信息,Kubectl会将yaml转化为Jason 包含在请求API的body 中 kubectl create -f docs/user-guide/nginx-deployment.yaml --record

对象唯一标识: Name 和 UID(kubernetes生成唯一标识)
对象其他标识: Label 和 annotation

Yaml 中的必须字段

    apiVersion - 创建对象的Kubernetes API 版本
    kind - 要创建什么样的对象?
    metadata- 具有唯一标示对象的数据,包括 name(字符串)、UID和Namespace(可选项)
    
    还有Spec
    

4. Kubernetes Namespace

大部分资源pod ,service,replication controllers 都在Namespace中

两个必备的Namespace: default 和 kube-system

为namespace配置pod配额 举例如下:
kubectl create namespace quote-pod-example  创建单独的namespace 隔绝本资源和集群其他资源
kubectl create -f https://xxx/quota-pod.yaml --namespace=quota-pod-example  创建ResourceQuota 对象
kubectl get resourcequota pod-demo --namespace=quota-pod-example --output=yaml 查看resourcequota对象详细信息
kubectl create -f https://xxx/quota-pod-deployment.yaml --namespace=quota-pod-example 创建Deployment对象
kubectl get deployment pod-quota-demo --namespace=quota-pod-example --output=yaml查看deployment对象详细信息
经过以上的配额对象创建和Deployment对象创建,会为namespace quote-pod-example 提供一定的pod配额,然后实际分配的pod 会被配额限制。
kubectl delete namespace quota-pod-example 删除namespace 以及所有资源

另外还可以为namespace 配置CPU/内存限额/最大最小内存限制(LimitRange对象)

5. Node 节点: 一个物理机或者VM

Node status 包含:

Address: HostName,ExternalIP(可以被集群外部路由的ip), InternalIP(只能在集群内部路由的ip)

Condition:Ready/MemoryPressure/DiskPressure/OutOfDisk

Capacity: 节点上的CPU, 内存, 以及Pod数量

Info: 版本信息,OS名称等。

节点实际上是由Google的另外创建的,Kubernetes是创建节点对象。

    节点控制器 -- 在Master中,监测节点状态,并与云提供商同步更新交互等。
    
    节点是Kubernetes REST API 中的最高等级资源。
    
    节点可以self-registry 也可以手动控制。
    

Master和Node 通信 通过SSH Tunnel或者HTTP。 api-server可以和kubelet通信,也可以和node,pod,services通信

  1. Pod 可部署的最小对象

一个pod代表集群上运行的一个进程;

一个pod封装一个或多个容器,存储资源,独立的网络ip,以及容器运行策略

pod中每个容器共享namespace,ip地址和网络端口,内部不同容器之间可以通过localhost通信,与外部通信时,需要协调使用共享的网络资源

  1. Deployment

为pod 和 replicaset 提供声明式更新

创建replicaset,replicaset 会在后台创建pod,并反馈状态
更新deployment的PodTemplateSpec字段来声明pod的新状态,会重新创建一个replicaset,把pod从旧的replicaset移到新的
如果当前状态不稳定,回滚到之前的revision
扩容deployment
暂停deployment
清除不必要的replicaset

一句话: Deployment 通过ReplicaSet来管理Pod

StatefulSet: 当有以下需求时,需要用StatefulSet 来替代ReplicaSet

  • 稳定性,唯一的网络标识符。
  • 稳定性,持久化存储。
  • 有序的部署和扩展。
  • 有序的删除和终止。
  • 有序的自动滚动更新。
  1. 节点: kubernets 集群中的一台物理机或虚拟机

集群:位于internet防火墙后的节点,这是kubernetes管理的主要计算资源

边界路由器: 为集群强制执行防火墙策略的路由器。这可能是由云提供商或物理硬件管理的网关

集群网络: 一组逻辑或者物理连接,可以根据kubernetes网络模型实现群集内的通信。集群网络的实现包括overlay模型的flannel和基于SDN 的OVS

服务: 使用标签选择器标识一组pod成为kubernetes服务。除非另有说明,否则服务假定在集群网络内仅可通过虚拟ip访问

通常情况下, service和pod仅可在集群内部网络中通过ip地址访问。所有到达边界路由器的流量或被丢弃或被转发到其他地方。

Ingress是授权入站连接到达集群服务的规则集合

可以给ingress配置提供外部可访问的URL,负载均衡,SSL, 基于名称的虚拟主机等。

用户通过POST ingress资源到API server的方式来请求ingress. Ingress controller 负责实现Ingress,通常使用负载平衡器,它还可以配置边界路由和其他前端,这有助于以HA方式处理流量。