Kubernetes概念入门

                           Kubernetes概念入门

1 Kubernetes自发现机制

一个是pod被创建后,会自动加载所有可用service的变量,另一个是dns,dns用watchapi不断监控service的创建,并建立一个记录,假设有个my-service的service他在namespace my-ns中,dns会记录my-service.my-ns,其他pod访问,只需要访问my-service.my-ns就可以解析到cluster ip和端口了,Service可用external ip作为外部ip地址池

Kubernetes能被创建的最小单位是pod,Kubectl get pods 查看pod,Kubectl create –f testpod.json是创建.json文件中的pod,service,rc等,Pod内共享network  namespace  pod内除了启动应用容器还会启动一个网络容器gcr.io/google_containers /pause很小的容器

2 基础概念

 Replication controller

决定了一个pod有多少同时运行的副本,并保证这些副本的期望状态与当前一致,并且当pod failed或者容器退出,都会固执的重启pod和容器,Rc只支持重启策略为always的pod进行协作可以通过修改pod的labels将一个pod从rc的控制集中移除,rc将会重启一个新的pod来替换那个pod,删除rc不会影响它所创建的pod,要是删除rc中的pod 需要把rc的副本数replicas字段设置为0,Rc被设计成滚动更新。

Pod在kubernetes中地址是不固定的,可以创建service,service将外部流量转到service对应的endpoints上,service创建后会被随机分配一个ip可以用kubectl get service命令获取,Service也可以代理不是pod的对象,这时不会创建endpoints,可以手动创建,多用于外部连接自定义后端系统,Service的主要组件就是node节点上的kube-proxy

Labels一般作为匹配名字

Kube-proxy为每个service真正打开的是一个绝不重复的端口,用户自定义的端口将会被映射到随机端口上

Service不足

Service和pod两者存在创建时间关系,pod需要在service后创建

新一代副本控制器

Replica set是rc的升级版,但不支持滚动更新

Deployment是为了应用更新而设计的

是更加强劲的更新应用系统,提供平滑过渡,当升级有错误时,会保证一定量的pod提供对外服务,他也会记录每次升级的记录,用kebectl rollout history deployment/nginx-deployment 查看更新状态,然后执行kubectlrollout undo deployment/nginx-deployment –to-revision=2

ConfigMap

帮助配置信息从应用程序镜像中解耦出来,保证镜像的可移植性以及配置信息不泄露

Namespace

Kubernetes默认的namespace是default

Kubectl get namespaces 可以查询所有可用namespace

Kubernetes用户认证机制

apiserver启动过程中,通过传入--client-ca-file=somefile参数可以启用客户端证书认证,如果客户端证书提供给apiserver且被认证通过,则ssl证书主题中的共用名(common name)将作为客户端发起api请求的用户名

Horizontal Pod Autoscaler水平扩展

操作rc ,res,deployment对应的pod,观察cpu实际使用量与用户期望值做对比,在hpa controller检测到cpu实际用量后,对比cpu用量会调整副本数量使cpu使用率尽量向期望靠近,副本范围参考【minreplicas,maxreplicas】之间数值

注意:在每一次做出决策生成减少一个pod时,将不再进行扩展决策,时长为3分钟 scale down为5分钟

3 Kubernetes的master结构

APIserver

Kubernetes由两种节点组成,管理节点和工作节点,工作节点跑容器,master组件分为APIserver 相应用户的管理,指挥协调,安全端口6443,非安全端口8080,默认监听8080,通过registry实体操作etcd,etcd存储路径所以registry为前缀

scheduler

创建一个http server监听10251,可以通过web运行状态进行辅助检测,将待调度的pod绑定到适合的工作点上,定时向apiserver获取数据,schedule策略分为两个阶段,predicates和priorities,先判定7项评分标准,评分高的node节点为pod的调度位置,也可以指定pod的调度位置

controller manager 

控制器合集,管理副本和node,创建一个http server用作辅助debug和收集metric数据之用endpoint controller    replicationcontroller  gc controller垃圾回收控制器

工作节点运行两个重要组件

Kubelet 

管理运行pod  真正负责容器的操作,与cadvisor交互抓取容器和宿主机资源信息,定期进行垃圾回收,10秒调用apiserver获取node信息,调用cadvisor获取宿主机信息,更新node对象

在启动kubelete时候,启动cadvisor cAdvisor当前都是只支持http接口方式,被监控的容器应用必须提供http接口,所以能力较弱。在Kubernetes的新版本中已经集成了cAdvisor,所以在Kubernetes架构下,不需要单独再去安装cAdvisor,可以直接使用节点的IP加默认端口4194就可以直接访问cAdvisor的监控面板如需要通过cAdvisor查看某台主机上某个容器的性能数据只需要调用:       http://:4194/v1.3/subcontainers/docker/

Kube-proxy

负责将service的流量转发到对应endpoint(通过server配置在工作节点上维护iptables设置进行转发)

4 存储 Volume

Emptydir主要用做临时空间,pod离开宿主机,emptydir中数据被删除

可以在/var/lib/kubelet/pods/poduid/volumes/kubernetes.io~empty-dir的redis-data找到

Hostdir 使得容器能够访问宿主机的目录,一点pod离开,hostdir数据不会被删除

Gcepersistentdisk 可以迁移,对工作环境有要求

Persistent volume

Pv有单独的生命周期,有单独管理的api,pvc是用户对于存储的请求,根据pvc来绑定pv资源,类似lvs

5 Kubernetes网络原理

 扁平化网络(需用户保证)+单podip,为每个pod随机分配一个ip地址如10.x.x.x,通过该ip地址,pod能够跨网络与其他物理机,虚拟机或容器通信

不建议采取让pod直接访问另一个pod的ip进行通信,因为pod销毁会重新定义ip,对外提供服务的pod应该在pod前创建service,pod里的用户容器定义完全交给网络容器,是极小的scratch

5.1 集成DNS

Kubernetes最初用向pod注入环境变量映射域名,这会代理环境变量泛滥情况,可以增加集群dns服务为每个service映射一个域名,如果启用了dns选项,系统则会自动创建一个运行skydns域名服务器的pod和一个对外提供集群service域名解析服务的skydns service会被分配一个静态ip,kubelet配置成向每个docker容器中传入skydns service的ip地址,作为dns服务器,dns中存储格式为 namespace:service,同namespace直接搜索service名,不同namespace需要搜索全名

Skydns service工作原理

Skydns pod 中包含4个容器skydns  etcd  和一个连接kubernetes和skydns的网桥(kube2sky)及用于健康检查的容器

kube2sky检测kubernetes主控节点的service更新,向dns pod 中的etcd写入service对象,skydns会去etcd读取信息,skydns

service可以被所有kubernetes节点访问,需要在kubernetes节点上的resolv.conf文件中将dns nameserver指向skydns域名服务器

6 Kubernetes健康检查

系统和应用程序的健康检查是有kubelet完成的,kubelet会定期通过docker daemon获取所有docker进程,发现某个docker为正常运行,则重新启动

Kubernetes还引入探针概念,支持用户自己实现应用业务级的健康检查,支持三种类型

http get ,container exec,tcp socket

kubelet根据livenessprobe:periodseconds定义时间间隔默认为10秒

7 高可用性

Apiserver挂掉,影响更新创建pod, service, rc等,不影响现有的pod和service

Kubelet发生软件故障,工作节点被标记为非健康,rc会在其他节点启用pod

Kubernetes单个集群能支持1000个工作节点和30000个pod

8 Kubernetes组件日志

建议将kubernetes日志划分一个单独的盘glog.Errorf() glog.warningf()

可以设置环境变量将输出的log给elasticsearch,通过启动一个名为fluentd-elasticsearch的pod

附录摘自《Docker容器与容器云》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356