k8s工作原理

原理

k8s拥有两种节点
1.master节点
2.node节点

其中master节点由API server,etcd,scheduler和controller-manager组成
1.API server的作用是接收请求,在接收到请求后,会根据controller-manager预设的模板创建一批pod,controller-manager将会根据API server去scheduler为新创建的pod选择node节点,scheduler会通过预管策略挑选出所有node节点中最优的.
其中node节点的所有剩余资源都将存储在etcd中。

kubelet将会定时向API server汇报自己node节点的服务状态,并接受master节点的指示采取调整措施

API server接收到用户的请求信息会先写入到etcd当中,然后controller-manager将通过API server读取etcd中的数据,获取用户预设的模板创建一批pod,创建pod将再次通过API server去seheduler进行调度。因为etcd中保存由所有node节点的数据,所以scheduler通过API server读取etcd中的数据,在通过优选策略选择适合的node节点,再次通过API server访问node节点的kubelet组件,并创建运行pod以及里面的容器。
之后将会监控该节点的状态,若有问题,将反馈给API server,API server会将报错信息存到etcd当中,controller-manager也会一直监视相关数据,在有pod down,将会再次进行创建。
最后将通过kube-proxy中servers的资源对外提供一个网关入口,这时会根据负载均衡把用户分发到pod当中。

flannel原理简介:

容器10.1.15.2/24访问10.0.20.3/24,经过所在主机的docker0,也就相当于这个容器的网关,转发到flannel0虚拟网卡,经过flanneld进行处理,将源容器的ip和目的容器的ip封装成内部ip,将源物理网卡的网关和目的物理网卡的网关封装成外部ip,并同时封装其MAC地址,源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达以后被解包,然后进入目的节点flannel0虚拟网卡,然后被转发到目的主机的docker0虚拟网卡,传递到对应ip的容器

Ingress概念

通俗来讲,ingress和之前提到的Service、Deployment,也是一个k8s的资源类型,ingress用于实现用域名的方式访问k8s内部应用。

Ingress为Kubernetes集群中的服务提供了入口,可以提供负载均衡、SSL终止和基于名称的虚拟主机,在生产环境中常用的Ingress有Treafik、Nginx、HAProxy、Istio等。

基本概念
在Kubernetesv 1.1版中添加的Ingress用于从集群外部到集群内部Service的HTTP和HTTPS路由,流量从Internet到Ingress再到Services最后到Pod上,通常情况下,Ingress部署在所有的Node节点上。

Ingress可以配置提供服务外部访问的URL、负载均衡、终止SSL,并提供基于域名的虚拟主机。但Ingress不会暴露任意端口或协议。

k8s滚动更新的原理

部署(Deployment)自动创建副本集(ReplicaSet),副本集根据参数策略可以精确地控制每次替换的Pod数量,从而可以很好的实现滚动更新。具体来说,k8s每次使用一个新的副本控制器(replication controller)来替换已存在的副本控制器,从而始终使用一个新的Pod模板来替换旧的pod模板。

大致步骤如下:

1、创建一个新的replication controller。
2、增加或减少pod副本数量,直到满足当前批次期望的数量。
3、删除旧的replication controller。

应用升级:
kubectl set image deployment/nginx nginx=nginx:commv1 -n commution
kubectl rollout status deployment/nginx -n commution
kubectl rollout status 查看服务更新过程
查看历史
kubectl rollout history deployment nginx-deployment

deployment/nginx:查看deploymen控制器下的nginx镜像
nginx=nginx:commv1 表示使用的镜像名称
-n commution 在commution命名空间下部署

回滚
kubectl rollout undo deployment/nginx -n commution
kubectl rollout undo deployment/nginx --to-revision=2 -n commution
删除
kubectl delete deploy/nginx -n commution
kubectl delete svc/nginx -n commution
暂停和重新升级
kubectl rollout pause deployment deployment/nginx-deployment
kubectl rollout resume deployment deployment/nginx-deployment

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值