k8s基本介绍
什么是k8s
- k8s是谷歌开源的容器集群管理系统
- 可以简化应用程序的工作流,加快开发速度
为什么需要k8s
- 真正的生产型应用会涉及多个容器
- 容器必须跨多个服务器主机进行部署
- 借助k8s构建多个容器的应用服务、跨集群调度、扩展这些容器
k8s有哪些应用
- 跨多台主机进行容器编排
- 更加充分地利用硬件,最大程度获取运行企业应用所需的资源
- 利用自动布局、自动重启、自动复制以及自动扩展功能,对应用设施状况检查和自我修复
k8s相关术语
- 主机(Master):用于复制k8s节点的计算机。所有任务分配都来自于此。
- 节点(Node):负责执行请求和所分配任务的计算机。由k8s主机负责对节点进行控制。
- 容器集(Pod):被部署在单个节点上的,且包含一个或多个容器的容器组。同一容器集中的所有容器共享同一个IP地址、IPC、主机名称及其它资源。
- 服务(Service):将工作内容与容器集分离。
- kubelet:运行在节点上的服务,可读取容器清单(container mainfest),确保指定的容器启动并运行。
- kubectl:k8s的命令行配置工具。
k8s架构图
k8s核心组件
- 集群管理入口:kube-apiserver
- 管理控制中心:kube-controller-manager
- 调度器:kube-scheduler
- 配置中心:etcd
- 集群管理工具:kubectl
- 节点Pod管家:kubelet
- 服务外部代理:kube-proxy
apiserver架构解析
k8s应用创建流程和监听机制
k8s核心组件-Controller Manager
- 副本控制器:Replication Controller
- 节点控制器:Node Controller
- 资源控制器:ResourceQuota Controller
- 命名空间控制器:Namespace Controller
- Endpoints控制器:Endpoints Controller
- 服务控制器:Service Controller
k8s核心组件-Replication Manager职责
- 确保在当前集群中有且仅有N个Pod实例,N是在RC中定义的Pod副本数量
- 通过调整RC的spec.replicas属性值来实现系统扩容或缩容
- 通过改变RC中的Pod模板(主要是镜像版本)来实现系统的滚动升级
k8s核心组件-ResourceQuota Manager三个层次资源配额管理
- 容器级别:可以对CPU和Memory进行限制
- Pod级别:可以对一个Pod内所有容器的可用资源进行限制
- Namespace级别:为Namespace(多租户)级别的资源限制,包括:Pod、RC、Service、ResourceQuota、Secret、PV数量
k8s核心组件-Endpoints Controller说明
k8s核心组件-Service Controller说明
- 监听Service的变化
- 如果Service是一个LoadBalancer类型,则维护LoadBalancer表
kubectl常用命令讲解
命令式资源管理
- 创建:create(创建一个资源),expose(暴露一个资源)
- 更新:scale(扩展资源),annotate(添加备注)、label(标签)
- 删除:delete(删除资源)
资源查看
- get:显示一个或多个资源的详细信息
- describe:聚合了相关的信息并输出,比get命令输出的信息更详细。
容器管理
- log:查看容器log
- exec:执行命令
- cp:用于从容器与物理机文件的拷贝
kubectl语法
1 | kubectl [command] [TYPE] [NAME] [flags] |
- get:kubectl get pod,svc
- log:kubectl log mysql
- exec:kubectl exec -it mysql /bin/bash
k8s中常用资源类型简写
- Ing:ingresses的简写
- no:表示集群的nodes节点
- ns:namespace命名空间的简写
- rs:replicasets的简写
- svc:代表服务services
- ep:endpoints的简写