Kubernetes中的基本概念(一)
容器的概念,简单理解就是把操作系统打包到“库”里。
k8s是什么
-
容器平台
-
微服务平台
-
可移植云平台
不是什么?
-
不是paas
-
不是交付(CI&&CD)工具
-
不提供应用级别的服务
-
不是监控、日志工具
-
配置过程不强制使用某种语言
-
不使用机器相关的任何工具。
master上的主要组件
- kube-apiserver
作为前端工具(api),为使用k8s提供交互工具。
- etcd
整个平台共享上下文的键值数据库
- kube-scheduler
集群资源监控和调度器。监视每个node的利用率。
- kube-controller-manager
控制器管理器, 包括:
Node controller, 添加、移除node
Replication controller, 复制控制器。 维护固定数量的pods
Endpoints controller, 端控制器。 用来映射service和pods之间的关联。
Service account & token controller, 账户和token服务
- cloud-controller-manager(作为provider)
node 上的组件
- kubelet(每个node上的“监工”)
运行在每个node上的agent。确保pods正常运行。
- kube-proxy(网络代理,每个node上的”网关“角色)
负责维护网络规则和链接转发。
插件
- DNS
为集群中的每个service提供一个DNS Name。
假设存在一个叫bar的命名空间, 里面存在一个foo的service。 在bar空间内的pod可以直接查询foo。
比如, mysql的service名称为db01, 在java application的pod中如果需要链接db的服务,可以直接使用db01作为host name。
在docker-compose中,这种dns查询服务使用本机的/etc/host来做(系统调用)。
在不同的命名空间中,使用service时,需要加上namespace名称。比如 bar.foo. db.mysql 等。
k8s为集群中的每个服务提供了2中形式的域名格式:
A记录
这种形式简单直接: 服务名.命名空间.svc.cluster.local
SRV记录
这种形式的记录比A记录多了端口和协议,一般用作instance domain。
格式为 端口.协议.服务名.svc.cluster.local