kubernetes笔记

 

 2.Service仅支持UDP和TCP协议,所以像ping的ICMP协议是用不了的,所以无法ping通Service IP。

3.Foreground 级联删除

在 foreground 级联删除 模式下,根对象首先进入 “删除中” 状态。在 “删除中” 状态会有如下的情况:

  • 对象仍然可以通过 REST API 可见

  • 会设置对象的 deletionTimestamp 字段

  • 对象的 metadata.finalizers 字段包含了值 “foregroundDeletion”

一旦被设置为 “删除中” 状态,垃圾收集器会删除对象的所有 Dependent。垃圾收集器删除了所有 “Blocking” 的 Dependent(对象的 ownerReference.blockOwnerDeletion=true)之后,它会删除 Owner 对象。

注意,在 “foreground 删除” 模式下,Dependent 只有通过 ownerReference.blockOwnerDeletion 才能阻止删除 Owner 对象。在 Kubernetes 1.7 版本中将增加 admission controller,基于 Owner 对象上的删除权限来控制用户去设置 blockOwnerDeletion 的值为 true,所以未授权的 Dependent 不能够延迟 Owner 对象的删除。

 

 

PVC       

1.创建pvc时,会去查找最合适的pvvolumesize最接近,>=)跟pvc绑定,如果没有找到合适的pv,并且enableDynamicProvisioningtrue,将会调用storageclass创建一个pv跟它绑定。

如果enableDynamicProvisioning为false,将等待用户创建pv跟它绑定

2.维护两个列表:pv和pvc

pv存在所有pv的状态和被绑定状态,pvc存放所有pvc的状态跟绑定状态

3.定时根据policy处理pv

 

kube-dns工作原理

 

如下图所示,kube-dns由三个容器构成:

  • kube-dns:DNS服务的核心组件,主要由KubeDNS和SkyDNS组成

    • KubeDNS负责监听Service和Endpoint的变化情况,并将相关的信息更新到SkyDNS中

    • SkyDNS负责DNS解析,监听在10053端口(tcp/udp),同时也监听在10055端口提供metrics

    • kube-dns还监听了8081端口,以供健康检查使用

  • dnsmasq-nanny:负责启动dnsmasq,并在配置发生变化时重启dnsmasq

    • dnsmasq的upstream为SkyDNS,即集群内部的DNS解析由SkyDNS负责

  • sidecar:负责健康检查和提供DNSmetrics(监听在10054端口)

1.Pod按照下面的顺序进行驱逐:

  • BestEffort:消耗最多紧缺资源的Pod最先失败。

  • Burstable:相对请求(request)最多紧缺资源的Pod最先被驱逐,如果没有Pod超出他们的请求,策略会瞄准紧缺资源消耗量最大的Pod。

  • Guaranteed:相对请求(request)最多紧缺资源的Pod最先被驱逐,如果没有Pod超出他们的请求,策略会瞄准紧缺资源消耗量最大的Pod

2.Label是识别Kubernetes对象的标签,以key/value的方式附加到对象上(key最长不能超过63字节,value可以为空,也可以是不超过253字节的字符串)。

 

Kubernetesapi server

kube-apiserver的启动:

1.调用genericapiserver.DefaultAndValidateRunOptions验证参数,包括验证集群ip,节点port,etcd服务等参数被有效设置了。

2.调用cloudprovider.InitCloudProvider()初始化CloudProvider

3.调用kubeletclient.NewStaticKubeletClient()创建kubeletclient,用于kubelet的健康检查

4.建立authenticator

5.调用admission.NewFromPlugins()创建服务许可框架和插件admissionController等

6.创建m,err := master.New(config),master实例,分别创建HTTPserver及安全的HTTPSServer开始监听客户端的请求。


 

kube-apiserver主要的作用:通过reset框架提供kubernetesapi server服务管理集群,如检验pod、service、rc的配置并将其储存到后端的etcdserver上。

 

Kube-controller-manager

controllermanager server其实就是一个超级调度中心,它负责定期同步node节点状态、资源使用配额信息、replicationcontroller、namespace\pod的pv绑定等信息,也包括执行诸如监控node节点状态、清除失败的pod容器记录等一系列定时任务。

进程启动过程:

1.调用client.New()创建一个restclient对象用于访问kubernetesapi server提供的API服务。

1.1创建一系列的client

2.调用http.Server()创建一个HTTPserver以提供必要的性能分析和性能指标度量的REST服务

3.调用endpointcontroller.NewEndpointController()创建的对象对注册表中kubernetesservice的endpoints信息的同步工作。

4.调用replicationcontroller.NewReplicationManager()创建的对象根据注册表中对replicationcontroller的定义,完成pod的复制或移除,以确保复制数量的一致性。

5.调用cloudprovider.InitCloudProvider创建cloudprovider的接口

6.调用nodecontroller.NewNodeController创建的对象通过cloudprovider的接口完成node实例的同步工作

7.调用servicecontroller.New()创建servicecontroller,servicecontroller通过cloudprovider的接口完成云平台中服务的同步工作,这些服务目前主要是外部的负载均衡服务。

8.调用resourcequotacontroller.NewResourceQuotaController()创建的对象负责资源配额使用情况的同步工作。

9.调用namespacecontroller.NewNamespaceController()创建的对象负责namespace的同步工作。

10.调用serviceaccountcontroller.NewTokensController()创建的对象负责token的同步工作

11.调用serviceaccountcontroller.NewServiceAccountsController()创建的对象负责account的同步工作。

 

Kubelet:

kubelet的启动

1.将kubeConfig、管理Pod和docker的参数、定期同步Pod和docker信息的参数导入到cfg中

2.根据cfg的属性创建多种Restclient对象访问kube-apiserver,如EventClient\discovery\kubeclient

3.根据cfg的属性创建cloudprovider,获取云供应商Cloud的资源。

4.根据cfg的属性创建cAdvisor来监控本地的Docker容器

5.根据cfg的属性创建ContainerManager来管理Docker容器

6.设置服务,防止发生OOM

7.开启垃圾回收协程以清理无用的容器和镜像,释放磁盘空间。

8.启动kubelet,创建PodSource对象拉取pod数据并汇总输出到同一个Podchannel中,kubelet启动协程监听podchannel中的数据并处理。

当前支持三种PodSource类型:

1.configfile:本地配置文件作为pod数据源

2.httpURL:pod数据源的内容通过一个HTTPUTL方式获取

3.kubernetesAPI server:默认方式,从APIserver中获取pod数据源。

9.启动kubelet服务的心跳机制,监听kubelet的启动状况。

1.Deployment的特性

  • Replication Controller全部功能:Deployment继承了上面描述的Replication Controller全部功能。

  • 事件和状态查看:可以查看Deployment的升级详细进度和状态。

  • 回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。

  • 版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。

  • 暂停和启动:对于每一次升级,都能够随时暂停和启动。

  • 多种升级方案:Recreate:删除所有已存在的pod,重新创建新的; RollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。

2.各层负载均衡:

二层负载均衡:基于MAC地址的二层负载均衡。
三层负载均衡:基于IP地址的负载均衡。  kube-proxy, service endpoint
四层负载均衡:基于IP+端口的负载均衡。 nodePort
七层负载均衡:基于URL等应用层信息的负载均衡。 lb ingress

3. 设置系统参数 – 允许路由转发,不对bridge的数据进行处理

  •  net.bridge.bridge-nf-call-ip6tables=1

  •  net.bridge.bridge-nf-call-iptables=1

  •  net.ipv4.ip_forward=1

  •  vm.swappiness=0

4. 设置iptables的FORWARD链,Docker从1.13版本开始调整了默认的防火墙规则,禁用了iptables filter表中FOWARD链,这样会引起Kubernetes集群中跨Node的Pod无法通信。

  •  iptables -P FORWARD ACCEPT

5. Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。可以通过kubelet的启动参数--fail-swap-on=false更改这个限制。  

6. 发送到docker0的请求,需要被无条件从docker0转发到容器eth0

     -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

7.

 

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值