概念
此开源图书由ithaiq原创,创作不易转载请注明出处
安装文档
这里推荐新手使用rancher安装k8s,docker一键安装不用关心具体细节并且还有可视化界面操作部署k8s(创建pv、pvc、deploy、service等等)
docker run -itd --privileged -p 9080:80 -p 9443:443 \
-v /home/用户名/rancher:/var/lib/rancher \
--restart=unless-stopped
-e CATTLE_AGENT_IMAGE="registry.cn-hangzhou.aliyuncs.com/rancher/rancher-agent:v2.4.8"
registry.cn-hangzhou.aliyuncs.com/rancher/rancher:v2.4.8
#访问localhost:9443即可登录进rancher

k8s简介
容器化时代:k8s扮演什么角色
基于容器的应用部署、维护和滚动升级
负载均衡和服务发现
跨机器和跨地区的集群调度
自动伸缩
无状态服务和有状态服务
广泛的 Volume 支持
插件机制保证扩展性


部分命令:
k cluster-info # 显示主控节点和服务的地址
k apply -f xxx.yaml #创建资源
k get pods -n test #获取指定namespace下的所有pod 不指定默认为default namespace
k get pods --all-namespaces # 列出所有命名空间下的全部的 Pods
k get pod xxx -o yaml #获取指定pod的yaml文件内容
k get pods -o wide # 列出当前命名空间下的全部 Pods,并显示更详细的信息
k get pods --show-labels #获取pod 所有label
k get pods --selector=app=xxx #获取指定lable app=xxx的pod
k describe node xxx # 获取node xxx的详细输出
k logs -f -l k8s-app=test #获取标签k8s-app=test日志
k8s执行流程
通过Kubectl提交一个创建RC的请求,该请求通过APIServer被写入etcd中,此时Controller Manager通过API Server的监听资源变化的接口监听到这个RC事件,分析之后,发现当前集群中还没有它所对应的Pod实例,于是根据RC里的Pod模板定义生成一个Pod对象,通过APIServer写入etcd,接下来,此事件被Scheduler发现,它立即执行一个复杂的调度流程,为这个新Pod选定一个落户的Node,然后通过API Server讲这一结果写入到etcd中,随后,目标Node上运行的Kubelet进程通过APIServer监测到这个“新生的”Pod,并按照它的定义,启动该Pod并任劳任怨地负责它的下半生,直到Pod的生命结束。随后,我们通过Kubectl提交一个新的映射到该Pod的Service的创建请求,ControllerManager会通过Label标签查询到相关联的Pod实例,然后生成Service的Endpoints信息,并通过APIServer写入到etcd中,接下来,所有Node上运行的Proxy进程通过APIServer查询并监听Service对象与其对应的Endpoints信息,建立一个软件方式的负载均衡器来实现Service访问到后端Pod的流量转发功能。

Master
Master节点上面主要由四个模块组成:APIServer、scheduler、controller manager、etcd。
APIServer: APIServer负责对外提供RESTful的Kubernetes API服务,它是系统管理指令的统一入口,任何对资源进行增删改查的操作都要交给APIServer处理后再提交给etcdkubectl(Kubernetes提供的客户端工具,该工具内部就是对Kubernetes API的调用)是直接和APIServer交互的。
schedule: scheduler的职责很明确,就是负责调度pod到合适的Node上。如果把scheduler看成一个黑匣子,那么它的输入是pod和由多个Node组成的列表,输出是Pod和一个Node的绑定,即将这个pod部署到这个Node上。Kubernetes目前提供了调度算法,但是同样也保留了接口,用户可以根据自己的需求定义自己的调度算法。
controller manager: 如果说APIServer做的是“前台”的工作的话,那controller manager就是责“后台”的。每个资源一般都对应有一个控制器,而controller manager就是负责管理这些控制器的。比如我们通过APIServer创建一个pod,当这个pod创建成功后,APIServer的任务就算完成了。而后面保证Pod的状态始终和我们预期的一样的重任就由controller manager去保证了。
etcd: etcd是一个高可用的键值存储系统,Kubernetes使用它来存储各个资源的状态,从而实现了Restful的API。
Node
每个Node节点主要由三个模块组成:kubelet、kube-proxy、runtime。
runtime。runtime指的是容器运行环境,目前Kubernetes支持docker和rkt两种容器。
kube-proxy。该模块实现了Kubernetes中的服务发现和反向代理功能。反向代理方面:kube-proxy支持TCP和UDP连接转发,默认基于RoundRobin算法将客户端流量转发到与service对应的一组后端pod。服务发现方面,kube-proxy使用etcd的watch机制,监控集群中service和endpoint对象数据的动态变化,并且维护一个service到endpoint的映射关系,从而保证了后端pod的IP变化不会对访问者造成影响。另外kube-proxy还支持session affinity。
kubelet。Kubelet是Master在每个Node节点上面的agent,是Node节点上面最重要的模块,它负责维护和管理该Node上面的所有容器,但是如果容器不是通过Kubernetes创建的,它并不会管理。本质上,它负责使Pod得运行状态与期望的状态一致。
最后更新于
这有帮助吗?