乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
Kubernetes 00.01 概念介绍
2023-04-08 07:01:57
54
0
0
admin
> 谷歌基于其内部集群管理系统开源的容器编排工具 # 集群结构 ## Master节点 控制节点,生产要配置多活,上面运行了: 1.etcd: k8s 数据库 2.API Server: 控制集群的唯一入口 3.Controller Manager: 控制中心(决定部署多少个什么样pod就是它) > Controller Managert 由许多线程组成,很多API Resource 都有自己的Controller Manager 4.Scheduler: 调度中心(决定pod 运行在什么node上的就是它) > Scheduler 会关注pod 亲和性,节点亲和性等来决定怎么部署,如果要定制化,关注Scheduler Framework ## Node节点 工作节点,上面运行了: 1. kubelet: 与master 协作操作容器 2. kube-proxy: 实现通信与负载均衡机制的服务 3. 容器 ## 其它重要组件 通常被分配的Node节点: 1. calico相关服务: 提供网络服务 2. coreDNS: 为集群提供dns 服务 3. localDNS: 也是coreDNS,属于每个节点自己的缓存,大集群需要 ## 部署一个服务的过程 1. kubectl 连接API Server,上传一个部署请求(部署一个deployment 对象,API Server将它写入etcd 2. Controller Manager 连接API Server,发现新deployment 对象,决定怎么部署,比如pod 数量,然后写入etcd (负责API Resource deployment 的Controller Manager) 3. Scheduler 连接API Server, 发现了Controller Manager 的部署请求,然后决定部署在什么机器上,然后写入etcd 4. kubelet 连接API Server,发现有东西要部署,执行部署,并定时报告自己的节点情况 5. kubectl 连接API Server, 上传一个Service, API Server 将他写入etcd 6. Controller Manager 连接API Server,发现了新的service 对象,决定怎么搞网络,然后写入etcd (负责Service 的Endpoint Controller) 7. kube-proxy 连接API Server, 发现Endpoint Controller 写入的内容,修改本地iptables 来转发流量 # 资源对象 ## Pod 1. K8S 的最小管理单位,一个Pod 可包含多个容器,这些容器具有超密切的关系(比如要通过socket文件通信) 2. 一个Pod 的容器共享Network Namespace,可以用localhost 通信,共享同一个IP 3. Volume 定义在Pod层级,底下的容器都可以使用 4. 每一个Pod 都有容器Pause, 其它容器共享它的网络与Volume,上面的2和3就是基于这一点实现的 ## Deployment 1. replicas: 部署Pod 的数量 2. selector: 标签选择器 3. template: 部署Pod 的模板 ## StatefulSet 1. 类似于Deployment,用于部署有状态的集群 2. 每个Pod 都有稳定,唯一的标识符,用于发现其它成员 3. Pod 启动是按照固定顺序启动的 4. Pod 挂载的Volume 不会删除,新的Pod 启动如果标识符不变,那么还是挂载标识符对应的Volume ## DaemonSet 1. 集群中每一个节点运行一个Pod,新加入的节点自动创建出来,删除的节点自动回收 2. 一般用于集群需要的各种插件 ## Job 1. 类似于Deployment,用于部署批处理任务 2. completions: 任务要运行的总数 3. parallelism: 任务并发数 ## Cronjob 1. 类似于Job, 增加了schedule: "*/1 * * * *" 这样的配置 ## Service 1. Service 被创建后会有Cluster IP, 这个IP 是虚拟的,只有IP+Port才能通信,不能Ping,只能在K8S内部访问 2. Service Name 和 Cluster IP 有DNS域名映射 3. 可以设置clusterIP:None 来设置Headless Service,这时候Service Name 域名映射所有的Pod 列表,通信性能最高 4. selector: 标签选择器 5. node IP: 节点IP,集群外可以访问 Pod IP: 容器的虚拟IP Service IP: Service 的CluserIP 6. Service配置中: port: Service port targetPort: 容器暴露端口 nodePort: 节点暴露端口(给集群外使用)
上一篇:
JAVA 5.20 自定义异常
下一篇:
Kubernetes 00.02 标签选择器
文档导航