自己做网站怎么挣钱,免费画图网站,医院 网站建设 新闻,h5模板是什么Kubernetes(K8S)中文文档_Kubernetes中文社区
Kubernetes 文档 | Kubernetes K8S 是负责自动化运维管理多个跨机器 Docker 程序的 集群。 kubeadm快速部署K8s集群的工具#xff0c;如#xff1a; 创建master node#xff1a;kubeadm init 将worker node加入到集群中#x…Kubernetes(K8S)中文文档_Kubernetes中文社区
Kubernetes 文档 | Kubernetes K8S 是负责自动化运维管理多个跨机器 Docker 程序的 集群。 kubeadm快速部署K8s集群的工具如 创建master nodekubeadm init 将worker node加入到集群中kubeadm join
kubectl是K8s的命令行工具可以对集群本身进行管理也能在集群中对容器化应用程序进行安装部署。
kubelet是master node派到worker node的代表管理本机容器
一个集群中每个节点上运行的代理它保证容器都运行在Pod中负责维护容器的生命周期同时也负责Volume(CSI) 和 网络(CNI)的管理 一、理解Kubernetes是由哪些组件构成以及各组件的功能
组件 1、控制平面组件control plane componentsMaster Node 控制平面组件为集群做出全局决策如资源的调度以及检测和响应集群事件。 1Kube-apiserver K8s的请求入口服务。负责公开K8s的API负责处理接受请求的工作是K8s的前端。可以运行多个Kube-apiserver的实例并在这些实例之间平衡流量。 API Server 负责接收 K8S 所有请求来自 UI 界面或者 CLI 命令行工 具然后API Server 根据用户的具体请求去通知其他组件干活。 2键值存储的后台数据库etcd K8s的存储服务。一致且高可用的键值存储用作K8s所有集群数据的后台数据库。注意数据备份。 etcd 存储了 K8S 的关键配置和用户配置K8S 中仅 API Server 才具备读写权限其 他组件必须通过 API Server 的接口才能读写数据。 3调度器kube-scheduler K8s所有工作节点的调度器。负责监视新创建的、未指定运行节点的Pods并选择节点来让Pod在上面运行。 当用户要部署服务时Scheduler 会选择最合适的 Worker Node服务器来部署。 调度决策考虑的因素包括单个Pod及Pod集合的资源需求、软硬件及策略约束、亲和性和反亲和性规范、数据位置、工作负载间对的干扰及最后时限。 4控制器管理器kube-controller-manager K8s所有工作节点的监视器。 负责运行控制器进程。如节点控制器、任务控制器、端点分片控制器、服务账号控制器等。 Controller 负责监控和调整在 Worker Node 上部署的服务的状态比如用户要求 A 服务部署 2 个副本那么当其中一个服务挂了的时候 Controller 会马上调整让 Scheduler 再选择一个 Worker Node 重新部署服务。 5云控制器管理器cloud-controller-manager 嵌入了特定于云平台的控制逻辑。该管理器允许将集群连接到云提供商的API之上并将与该云平台交互的组件同与你的集群交互的组件分离开来。 2、Node节点组件 节点组件在每个节点上运行负责维护运行的Pod并提供K8s运行环境。 1kubelet 工作节点的监视器主节点的通讯器。 kubelet会在集群中每个节点上运行。它保证容器都运行在Pod中。 kubelet接收一组通过各类机制提供给它的PodSpec确保这些PodSpec中描述的容器处于运行状态且健康。 Kubelet 是 Master Node 派到Worker Node 上的“代表”它会定期向 Master Node 汇报自己 Node 上运行的服务的状态并接受来自 Master Node 的指示采取调整措施。负责控制所有容器的启动停止保证节点工作正常。 2kubelet-proxy K8s的网络代理。kubelet-proxy是集群中每个节点上所运行的网络代理实现K8s中service概念的一部分。kubelet-proxy维护节点上的一些网络规则这些规则运行从集群内部或外部的网络会话与Pod进行网络通信。 Kube-Proxy 负责 Node 在 K8S 的网络通讯、以及对外部网络流量的负载均 衡。 3容器运行时contariner runtime Worker Node 的运行环境即安装了容器化所需的软件环境确保容器化程序能够跑起 来比如 Docker Engine运行环境。容器运行环境是负责运行容器的软件如containerd, CRI-OK8s CRI等。 3、插件Addons 插件使用K8s资源DaemonSetDeployment等实现集群功能。插件提供集群级别的功能插件中命名空间域的资源属于kube-system命名空间。下面是常见的插件。 1 DNS 集群DNS是一个DNS服务器和环境中的其他DNS服务器一起工作它为K8s服务提供DNS记录。 2仪表盘Web界面Dashboard Dashboard是K8s集群的通用、基于web的用户界面。用于管理集群中运行的应用程序以及集群本身并进行故障排除。 3容器资源监控 将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中并提供浏览这些数据的界面。 4集群层面日志 负责将容器的日志数据保存到一个集中的日志存储中集中日志存储提供搜索和浏览接口。 5网络插件 实现容器网络接口CNIcontainer network interface规范的软件组件负责为Pod分配IP地址并使用这些Pod能在集群内部相互通信。 二、Pod是什么他和容器有什么关系
1Cluster——nNode——nPod——nContainer——1/nApplication
容器放入PodPod运行在节点上节点可能是虚拟机或物理机。节点由Master Node控制面管理。
Pod和容器是包含关系Pod包含容器。 Pod表示包含一个或多个应用容器如Docker以及这些容器一些共享资源的一个集合。
Pod中若干个应用容器共享的资源包括共享存储、网络作为唯一的集群IP地址、有关每个容器如何运行的信息如容器镜像版本或端口。
Pod可以包含若干个相对紧耦合的应用容器。例如一个Pod包含两个应用容器一个应用容器是Node.js应用另一个是提供Node.js应用服务器要发布的数据的应用。
Pod中的若干个应用容器共享IP地址和端口始终位于同一位置并且共享调度并在同一节点上的共享上下文中运行。
Pod是K8s集群中创建、管理和调度的最小单位即原子单位。当在K8s中创建Deployment时会创建包含容器的Pod而不是直接创建容器。每个Pod与调度它的Node节点绑定并保持在那里直到终止或删除。如果节点发生故障则会在集群中的其他可用节点上调度相同的Pod。 三、Deployment是什么他为什么适合无状态服务
Deployments | Kubernetes
kubernetes-Deployment部署无状态服务的原理详解二十五 - Andya_net - 博客园 (cnblogs.com)
无状态服务VS有状态服务
K8S: 有状态 vs 无状态服务 - 知乎
无状态服务
无状态服务不会在本地存储持久化数据。多个服务实例对于同一个用户请求的响应结果是完全一致的。这种多服务实例之间是没有依赖关系比如web应用在k8s控制器 中动态启停无状态服务的pod并不会对其它的pod产生影响。
有状态服务
有状态服务需要在本地存储持久化数据。典型的是分布式数据库的应用分布式节点实例之间有依赖的拓扑关系。比如主从关系如果K8S停止分布式集群中任 一实例pod就可能会导致数据丢失或者集群的crash。
ReplicaSet
ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此它通常用来保证给定数量的、完全相同的 Pod 的可用性。ReplicaSet 主要用途是提供给 Deployment 作为编排 Pod 创建、删除和更新的一种机制。
Deployment
创建了K8s集群后就可以在其上面部署容器化应用程序。先创建K8s Deployment配置以指挥K8s创建和更新应用程序的实例。创建Deployment后Master Node将应用程序实例调度到集群中的各个Worker Node上。Deployment控制器会持续监视这些实例。若节点关闭或被删除则Deployment控制器会将应用程序实例替换为集群中另一个节点上的实例自我修复机制以解决机器故障维护问题。
一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力。 • 部署无状态应用 • 管理Pod和ReplicaSet副本控制、更新回滚 • 具有上线部署、副本设定、滚动升级、回滚等功能 • 提供声明式更新例如只更新一个新的Image
Deployment被设计用来管理无状态服务的pod每个pod完全一致 •无状态服务内的多个Pod创建的顺序是没有顺序的 •无状态服务内的多个Pod的名称是随机的。p0d被重新启动调度后它的名称与P都会发生变化 •无状态服务内的多个Pod背后是共享存储的。 Deployment可以管理多个副本的Pod实现无缝迁移、自动扩容缩容、自动灾难恢复、一键回滚等功能。 Deployment组件是为无状态服务而设计的其中的Pod名称、主机名、存储都是随机、不稳定的并且Pod的创建与销毁也是无序的。这个设计决定了无状态服务并不适合数据库领域的应用。 如果应用程序不需要任何稳定的标识符或有序的部署、删除或扩缩 则应该使用由一组无状态的副本控制器提供的工作负载来部署应用程序比如 Deployment 或者 ReplicaSet。 四、StatusfulSet是什么他为什么适合有状态服务他有什么特性
StatefulSet | Kubernetes
概念
StatefulSet 是用来管理有状态应用的工作负载 API 对象。
StatefulSet 用来管理某 Pod 集合的部署和扩缩 并为这些 Pod 提供持久存储和持久标识符。
特征
Stateful管理有状态的应用它的Pod有如下特征 •唯一性每个Pod会被分配一个唯一序号 •顺序性Pod启动更新销毁是按顺序进行 •稳定的网络标识Pod主机名DNS地址不会随着Pod被重新调度而发生变化 •稳定的持久化存储Pod被重新调度后仍然能挂载原有的PV,从而保证了数据的完整性和一致性。 五、DaemonSet概念及其特性
DaemonSet | Kubernetes
概念
DaemonSet守护进程集缩写为ds在所有节点或者是匹配的节点上都部署一个Pod。
DaemonSet使用场景 • 运行集群存储的daemon比如ceph或者glusterd •节点的CNI网络插件calico •节点日志的收集fluentd或者是filebeat •节点的监控node exporter • 服务暴露部署一个ingress nginx DaemonSet 确保全部或者某些节点上运行一个 Pod 的副本。 当有节点加入集群时 也会为他们新增一个 Pod 。 当有节点从集群移除时这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
DaemonSet 的一些典型用法
在每个节点上运行集群守护进程在每个节点上运行日志收集守护进程在每个节点上运行监控守护进程 六、Service通过网络暴露 Pod 组合 使用 Service 暴露你的应用 | Kubernetes
服务Service | Kubernetes Service服务用于对外部暴露应用。 Service 允许应用程序接收流量。
Service API 是 Kubernetes 的组成部分它是一种抽象帮助你通过网络暴露 Pod 组合。 每个 Service 对象定义一个逻辑组的端点通常这些端点是 Pod以及如何才能访问这些 Pod 的策略。 七、阐述ClusterIP、NodePort、Headless、Ingress、LoadBalance等Service的区别
服务Service | Kubernetes
k8s 之如何从集群外部访问内部服务的三种方法 - 春光牛牛 - 博客园 (cnblogs.com)
深入了解Kubernetes服务类型ClusterIP、NodePort、LoadBalancer和ExternalName - 掘金 (juejin.cn)
Kubernetes的集群外部访问方式NodePort、LoadBalancer和Ingress。
Kubernetes的集群内部访问方式ClusterIP
ClusterIP
ClusterIP 服务是 Kubernetes 的默认服务是K8s系统自动分配的虚拟IP只能在集群内部访问。它给你一个集群内的服务集群内的其它应用都可以访问该服务。集群外部无法访问它但是可以通过在cluster里提供proxy代理方式访问kubectl proxy。如Dashboard的访问。
当您创建一个Service资源对象而没有指定服务类型时默认会被设置为ClusterIP类型。ClusterIP只能通过内部DNS进行访问因此它适合处理内部流量。
ClusterIP根据是否生成ClusterIP又可分为普通Service和Headless Service Service两类
普通Service为Kubernetes的Service分配一个集群内部可访问的固定虚拟IP(Cluster IP), 实现集群内的访问。service name解析为cluster ip,然后cluster ip对应到后面的Pod IpHeadless Service 该服务不会分配Cluster IP, 也不通过kube-proxy做反向代理和负载均衡。而是通过DNS提供稳定的网络ID来访问DNS会将headless service的后端直接解析为Pod Ip列表。无头服务service name 直接解析为后面的Pod Ip
使用 Kubernetes 的 proxy 模式来访问你的服务的场景
由于某些原因你需要调试你的服务或者需要直接通过笔记本电脑去访问它们。容许内部通信展示内部仪表盘等。
这种方式要求运行 kubectl 作为一个未认证的用户因此不能用这种方式把服务暴露到 internet 或者在生产环境使用。 NodePort
将Service通过指定的Node上的端口暴露给外部通过此方法就可以在集群外部访问服务。(在每个Node上分配一个端口作为外部访问入口)。
NodePort 服务是引导外部流量到你的服务的最原始方式。NodePort在所有节点虚拟机上开放一个特定端口任何发送到该端口的流量都被转发到对应服务。
使用场景
这种方法有许多缺点每个端口只能是一种服务端口范围只能是 30000-32767
如果运行的服务不要求一直可用或者对成本比较敏感可以使用这种方法。这样的应用的最佳例子是 demo 应用或者某些临时应用。 LoadBalancer
LoadBalancer服务类型是一种Kubernetes扩展它可以通过云提供商支持的负载均衡器来暴露服务。这种类型的服务适用于处理公共流量并且需要在外部进行访问。
LoadBalancer 服务是暴露服务到 internet 的标准方式。在 GKE 上这种方式会启动一个 Network Load Balancer它将给一个单独的 IP 地址转发所有流量到服务。
工作在特定的Cloud Provider上例如Google CloudAWSOpenStack。
如果想要直接暴露服务这就是默认方式。所有通往指定的端口的流量都会被转发到对应的服务。它没有过滤条件没有路由等。这意味着几乎可以发送任何种类的流量到该服务像 HTTPTCPUDPWebsocketgRPC 或其它任意种类。
这个方式的最大缺点是每一个用 LoadBalancer 暴露的服务都会有它自己的 IP 地址每个用到的 LoadBalancer 都需要付费这将是非常昂贵的。 Ingress Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。
一个将所有流量都发送到同一 Service 的简单 Ingress 示例 有别于以上所有例子Ingress 事实上不是一种服务类型。相反它处于多个服务的前端扮演着“智能路由”或者集群入口的角色。
使用Ingress可以做很多事情不同类型的Ingress控制器有不同的功能。
默认的GKE ingress控制器会启动一个 HTTP(S) Load Balancer可以通过基于路径或者是基于子域名的方式路由到后端服务。例如可以通过foo.yourdomain.com 发送任何东西到foo服务或者是发送yourdomain.com/bar/路径下的任何东西到bar服务。 八、FQDN概念及其使用场景
FQDNFully Qualified Domain Name完全限定域名。
FQDN Hostname DomainName主机域名。 例如申请了域名comp.com有一台主机名为web则可以使用web.comp.com得到这个主机IP。
若还有两台提供邮件和OA服务的主机cmailoa则这时候可以用以下FQDN
cmail.comp.com
oa.comp.com 如果希望跨名字空间访问则需要使用完全限定域名FQDN。 九、如何挂载文件如果挂载本地文件
https://www.cnblogs.com/limeiyang/p/16575628.html
kubernetes学习总结之文件挂载_helm 挂载文件_望长安于日下的博客-CSDN博客 一个运行中的容器缺省情况下对文件系统的写入都是发生在其分层文件系统的可写层的一旦容器运行结束所有写入都会被丢弃。因此需要对持久化支持。Kubernetes 中通过 Volume 的方式提供对存储的支持。 十、如何配置节点调度策略有几种方式各有什么区别 调度 是指将 Pod 放置到合适的节点上以便对应节点上的 Kubelet 能够运行这些 Pod。 十一、边车实现的原理
https://blog.csdn.net/knight_zhou/article/details/126241319
k8s总结之边车模式sidecar – 云原生之路 (361way.com)
边车模式sidecar是在不改变原有container功能的情况下在同一个pod下增加其他container来增加对应的功能。
因为在同一个Pod下的容是共享一个namespace空间的所以对应的网络、存储等资源也是同一个空间下的这就可以很方便的进行两个containers之间交互。 十二、如何使用Init容器初始化环境
快速理解initContainer概念、用法、使用场景_initcontainers_[shenhonglei]的博客-CSDN博客
Init 容器 | Kubernetes
k8s中初始化容器init container的作用及其使用方法 - 安大 - 博客园 (cnblogs.com)
在容器的部署过程中有的时候需要在容器运行之前进行一些预配置的工作比如下载配置判断某些服务是否启动修改配置等一些准备的工作想要实现这些功能在k8s中可以使用初始化容器在应用容器运行之前进行一些预处理的工作。
Init 容器是一种特殊容器在 Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。
使用 Init 容器
因为 Init 容器具有与应用容器分离的单独镜像其启动相关代码具有如下优势 Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。 例如没有必要仅为了在安装过程中使用类似 sed、awk、python 或 dig 这样的工具而去 FROM 一个镜像来生成一个新的镜像。 应用镜像的创建者和部署者可以各自独立工作而没有必要联合构建一个单独的应用镜像。 与同一 Pod 中的多个应用容器相比Init 容器能以不同的文件系统视图运行。因此Init 容器可以被赋予访问应用容器不能访问的 Secret 的权限。 由于 Init 容器必须在应用容器启动之前运行完成因此 Init 容器提供了一种机制来阻塞或延迟应用容器的启动直到满足了一组先决条件。 一旦前置条件满足Pod 内的所有的应用容器会并行启动。 Init 容器可以安全地运行实用程序或自定义代码而在其他方式下运行这些实用程序或自定义代码可能会降低应用容器镜像的安全性。 通过将不必要的工具分开你可以限制应用容器镜像的被攻击范围。 参考文献
k8s的安装与简单使用 - 大数据 - 亿速云 (yisu.com)