kubernetes-基本概念介绍
简介
Kubernetes (俗称K8s) 是Docker和containerd等容器技术的编排引擎
也就是说, k8s是用来管理集群的工具
集群包含master/kubectl/kubelet等组件
集群的单位是node, node里可以有许多pod, pod里可以有一个及以上的容器
集群分布示例图如下
常用指令
以hello-world-nodejs
为例
1 | # describe |
概念
Kubectl
管理 Kubernetes 的 CLI 工具。
master
控制节点的中心主机(可以有多台。
kubelet
节点代理, 确保容器运行且正常运行。
Kubernetes- Pod
一个 Pod 可以托管多个容器container和存储卷volume.
Pod 是部署的实例.
Pod 的任何数据会在销毁时消失(除非存入卷里).也就是说,Pod 是部署的基本单位
controller
一个抽象的概念, 代表一群pods的控制器对象
例如:
pod/deployment/replicaset/daemonset都是controller
一个控制器的功能
- 查看系统状态
- 监控状态是否匹配对应要求(例如“需要为此 Pod 分配一个节点”)
- 重复
replicaSet
k8s的controller之一
一个replicaSet管理的pod应该是一群完全相同的复制体
Pod 必须标有与replicaSet匹配的标签,并且它不能同时被另一个controller拥有,以便replicaSet可以获取它。
只需更改 Pod 的标签,即可将 Pod 与RS隔离。
deployment
k8s的controller之一
deployment是要创建的 Pod 的蓝图. 它将根据模板中的规范创建一个 Pod。可以管理/更新/扩展pod
一个deployment管理的pod应该是一群属性或功能上相同或相似的
replicaSet无法更改容器模板, 而deployment通过调用replicaSet的方式来控制pod, 实现了更新pod
Scheduler
k8s调度器, 也是controller之一
负责将pod调度到node上(通过一些特定的算法)
daemonSet
k8s的controller之一
一个daemonSet管理的pod应该是部分或每个节点(node)各一个, 类似于守护进程
它的创建是为了一个特定目的:确保它管理的 Pod 在所有集群节点上运行。一旦节点加入集群,DaemonSet就会确保它在其上运行必要的 Pod。当节点离开群集时,这些 Pod 将被回收。
通信方式:
- pod主动推送
- IP和特定端口模式
- DNS模式, 让endpoint去发现pod
- 服务模式, Node通过随机端口公开pod
StatefulSets
k8s控制器之一, 用于管理和维护1或多个pod
应用程序分为有状态(如MySQL集群)和无状态(如nginx集群)
StatefulSet用于管理有状态集群, pod之间不可互换, 有唯一身份
deployment用于管理无状态集群, Pod之间是可以互换的
Service
service负责使我们的 Pod 在网络内可被发现, 或将它们暴露给互联网(需要公网IP), 或者前后端通信。
service通过其label-selector来标识 Pod。
访问方式:
- 环境变量
- DNS(域名或者IP)
暴露方式:
- ClusterIP(对内)
- NodePort
- LoadBalancer
- Ingress(另一个对象,指向service)
一个服务可以有多个端口
service有如下三种类型
cluster-IP
deployment仅在集群内可见。
deployment可以获得分配给它的内部cluster-IP。
流量在deployment的 Pod 之间进行负载均衡。
Node Port
deployment在集群内可见。
deployment绑定到主节点(node)的端口。
每个节点都会将该端口代理到对应的service。
该service可在 http(s)://IP
下访问
流量在deployment的 Pod 之间进行负载平衡。
Load Balancer:
deployment获得分配的公共 IP 地址。
该服务位于 http(s)://IP:80
流量在deployment的 Pod 之间进行负载平衡。
Jobs
控制器会保证容器按数量和状态运行
jobs可以让容器运行之后转瞬即逝, 类似于云函数的功能
Secret
Secret 是一个对象,我们可以在其中存储敏感信息(加密信息),例如用户名和密码。
在秘密文件中,值是 base64 编码的。
Ingress
Ingress是一个对象, 允许从 Kubernetes 集群外部访问Kubernetes 服务
可以创建规则集合来配置访问权限, 类似于IPtable
Cluster Networking
//todo
NetworkPolicy
//todo
参考文章
https://collabnix.github.io/kubelabs/Kubernetes_Architecture.html