|
今天小编就为大家带来一篇有关kubernetes的原理和用法的文章。小编觉得挺实用的,为此分享给大家做个参考。一起跟随小编过来看看吧。
基本原理kubernetes通过watch的机制进行每个组件的协作,每个组件之间的设计实现了解耦.调度方式nodeName用于将Pod调度到指定的Node名称上,跳过调度器直接分配.nodeSelector用于将Pod调度到匹配Label的Node上,前提是node要有标签.
原理详解图中左上角的运维人员往节点中创建一个nginx资源.API Server和etcd和Scheduler是master.Kubelet和Docker是node节点.API Server做为唯一入口,接受create创建资源的属性信息写入到etcd中(属性信息:名称,镜像名称,限制条件),etcd完善发现机制(watch)给Scheduler调度器(查看那个节点适合),然后绑定相关pod的网络信息,反馈给API Server,收到信息后api写入etcd中,此时etcd存储了pod的网络信息(IP),node1、中的kubelet会管理pod资源,会触发容器的创建命令,安装完成后docker就会反馈状态信息给API Server,当API Server收到状态信息写入到etcd中.API Server相当于是平台中的管理员,负责记录相关信息,etcd相当于管理员的记事本,相关信息内容写在其中,如果API Server挂了,那么k8s基本上就瘫痪了.范例演示-nodeName编辑yaml文件vim pod5.yamlapiVersion: v1kind: Podmetadata: name: pod-example labels: ?app: nginxspec: nodeName: 192.168.142.131 #指定给node1节点 containers: - name: nginx ?image: nginx:1.15 ?#验证是否创建了nginx创建yaml文件kubectl create -f pod5.yamlkubectl get pods查看详细事件,发现未经过调度器kubectl describe pod pod-example清空pod资源kubectl delete -f .kubectl get pods范例演示-nodeSelector获取标签帮助kubectl label --help需要获取node上的NAME名称kubectl get node给对应的node设置标签分别为kgc=a和kgc=bkubectl label nodes 192.168.142.130 kgc=akubectl label nodes 192.168.142.131 kgc=b查看标签kubectl get nodes --show-labelsvim pod5.yamlapiVersion: v1kind: Podmetadata: name: pod-example labels: ?app: nginxspec: nodeSelector: ??kgc: b containers: - name: nginx ?image: nginx:1.15kubectl apply -f pod5.yaml查看详细事件,通过事件可以观察经过调度器分配kubectl describe pod pod-example故障排除查看pod事件kubectl describe TYPE NAME_PREFIX查看pod日志(Failed状态下)kubectl logs POD_NAME进入pod(状态为running,但是服务没有提供)kubectl exec –it POD_NAME bash
以上就是kubernetes的原理和用法的汇总,内容较为全面,小编相信有部分使用方法可能是我们日常工作可能会见到或用到的。希望你能通过这篇文章学到更多知识。 |
|