kubernetes详解
2023-12-21 18:21:46 15 举报
AI智能生成
kubernetes详解
作者其他创作
大纲/内容
kubernetes 概念
Master
集群控制节点,每个集群需要至少一个master节点负责集群的管控
Node
集群工作节点,由master分配容器到这些node节点上,然后node节点上的docker负责容器的运行
Pod
kubernetes的最小控制单元,容器都是运行在pod中,一个pod中可以有1个或多个容器
Controller
控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
Service
pod对外服务的统一入口,可以维护同一类的多个pod
Label
标签,用于对pod进行分类,同一类pod会拥有相同的标签
NameSpace
命名空间,用来隔离pod的运行环境
kubernetes 组件
master控制节点
ApiServer
资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制
Scheduler
负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上
ControllerManager
负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
Etcd
负责存储集群中各种资源对象的信息
node工作节点
kubelet
负责维护容器的生命周期,既通过控制docker,创建、更新、销毁容器
Docker
负责节点上容器的各种操作
kubeProxy
在node节点对外接收客户端请求
kubernetes 五大资源
五大资源之Namespace
五大资源之POD
五大资源之Label
五大资源之Deployment
五大资源之Service
暴露方式
ClusterIP
clusterIP 是 Service 默认的暴露方式。
这个 IP 地址只在集群内部可用,对集群外部不可见。
它为同一个 Service 中的不同 Pod 提供了一个稳定的虚拟 IP 地址。
适用于在集群内部的 Pod 之间进行通信,一般用于微服务之间的相互调用。
这个 IP 地址只在集群内部可用,对集群外部不可见。
它为同一个 Service 中的不同 Pod 提供了一个稳定的虚拟 IP 地址。
适用于在集群内部的 Pod 之间进行通信,一般用于微服务之间的相互调用。
NodePort
NodePort 是 Service 的一种类型,它通过在每个节点上开放相同的端口,将 Service 暴露到集群外部。
当你暴露一个 Service 为 NodePort 时,Kubernetes会在每个节点上选择一个端口,并将该端口映射到 Service 上,从而可以从集群外部通过节点的 IP 地址和选择的端口访问 Service。
这个方式是一种简单的暴露方式,不需要额外的负载均衡器或代理,但对于大型生产环境可能不够灵活。
当你暴露一个 Service 为 NodePort 时,Kubernetes会在每个节点上选择一个端口,并将该端口映射到 Service 上,从而可以从集群外部通过节点的 IP 地址和选择的端口访问 Service。
这个方式是一种简单的暴露方式,不需要额外的负载均衡器或代理,但对于大型生产环境可能不够灵活。
LoadBalancer类型
ExternaIName类型
kubernetes Pod控制器
控制器类型
ReplicaSet
负责维护一组 Pod 的稳定副本数量。Deployment 实际上管理着 ReplicaSet,用于确保指定数量的 Pod 副本在集群中运行。
Deployment
用于在集群中部署应用程序,提供了对 Pod 副本的声明式定义,支持滚动更新和回滚。
StatefulSet
用于有状态应用程序的部署,确保 Pod 拥有稳定的标识符、持久性存储等特性,适用于需要唯一标识符和持久性的应用程序,如数据库。
DaemonSet
用于确保集群中的每个节点都运行相同的 Pod 副本,常用于运行监控、日志收集等任务。
Job 和 CronJob
用于执行一次性任务或定期任务。Job 用于一次性任务,而 CronJob 用于按计划执行的任务。
helm chart
概念释义
Helm 是 Kubernetes(K8s)的一个包管理工具,用于简化在 Kubernetes 集群中部署和管理应用程序。Helm Chart 是 Helm 的一个核心概念,它是一个预先配置好的应用程序资源包。
组成部分
Chart.yaml
一个描述文件,包含了 Chart 的名称、版本、描述等元数据。
values.yaml
一个或多个配置文件,用于定义安装 Chart 时可以或必须覆盖的默认参数。
templates/
这是一个目录,其中包含一组用于生成 Kubernetes 清单文件(如 Deployments、Services、ConfigMaps 等)的模板。
依赖(可选)
一个 requirements.yaml 文件或在 Chart.yaml 中定义的依赖项,用于指定该 Chart 依赖于哪些其他 Charts。
如何工作
打包: Helm Chart 是一个目录结构,可以被打包成一个 .tgz 文件进行分发。
自定义: 通过修改 values.yaml 文件或通过命令行参数,用户可以自定义 Chart 的行为。
安装: 使用 Helm 命令(如 helm install)可以将 Chart 安装到 Kubernetes 集群。
更新: 使用 helm upgrade 命令,可以更新已经部署的 Chart。
回滚: 如果更新失败,使用 helm rollback 可以轻松地将应用回滚到之前的版本。
共享: Charts 可以被存储在 Helm 仓库(可以是公共的或私有的)中,以便于共享和协作。
为什么使用helm chart
简化部署: Helm Chart 提供了一种简单的方式来打包和分发 Kubernetes 应用。
版本控制: Helm 支持 Chart 的版本管理,方便回滚和更新。
复用性和共享: 通过 Helm 仓库,Charts 可以被复用和共享给其他用户或项目。
参数化和模板化: 通过 values.yaml 和模板,Charts 可以被自定义以适应不同的环境和配置。
依赖管理: Helm 支持 Chart 依赖,使得复杂应用的部署和管理更加简单。
kubernetes 命令
kubectl
kubectl expose <资源类型> <资源名称> --type=<服务类型> --port=<暴露端口> --target-port=<目标端口>
kubectl explain HorizontalPodAutoscaler.spec
kubectl get svc service -n dev
kubectl describe svc service -n dev
持续学习并更新中
0 条评论
下一页