业余时间一直在学习k8s和docker相关的知识,整理下最近所学的一些知识点和概念
k8s架构
master
由架构图可以看出来,master节点其实主要是四部分组成的;
- api server;这个很简单,也就是平时我们用的较多的kubectl命令,客户端直接调用k8s的命令,将指令交给了api server去处理;
- scheduler;我理解scheduler的作用就是由它来决定将pod放到哪个具体的node节点上运行
- controller manager;负责各资源的管理,如namespace下有哪些实例,deploy能管理哪些pod,都是由controller manager来处理的;
- etcd;存储集群的配置,资源状态信息等;
node
node节点是实际部署应用的节点,它比较复杂,我就总结下自己了解的一些部分
- kubelet;master的scheduler决定在某个node配置pod后,会将pod信息发送给该node的kubelet,kubelet会创建并运行容器,并向master汇报状态
- kubeproxy;每个node都会运行kube-proxy服务,外界通过service访问pod,kube-proxy负责将降访问service的TCP/UDP数据流转发到后端的容器。如果有多个副本,kube-proxy会实现负载均衡。
- networking;pod能够互相通信,k8s集群必须部署pod网络,flannel是其中一个可以选择的方案
k8s service的类型
- ClusterIP;会被分配一个固定的虚拟ip,集群内部通过该ip来对pod进行访问;
- NodePort;除了能使用ClusterIP的所有功能外,还会映射一个宿主机的随机端口(大于30000)到service上;集群外可以通过宿主机ip:分配的随机端口来访问部署的service
- loadbalancer;如果node有多个,需使用loadbalancer来作为负载均衡器,目前只能在云服务平台上使用
k8s中几个端口概念的对比
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
ports:
- port: 30080
targetPort: 80
nodePort: 30001
selector:
name: nginx-pod
- nodeport;service的一种,目的是使集群外部能通过node的IP:分配的大于30000的随机端口来访问集群内部的服务
- port;提供给集群内其他容器访问
- targetPort;容器的端口(最根本的端口入口),流量通过这个端口进入到容器中,与制作容器时暴露的端口一致(DockerFile中EXPOSE),例如docker.io官方的nginx暴露的是80端口
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。