首页 文章 精选 留言 我的

精选列表

搜索[k8s],共3940篇文章
优秀的个人博客,低调大师

影响 K8S Pod 分配和调度策略的两大关键特性

在Kubernetes中有一个最复杂的调度器可以处理pod的分配策略。基于在pod规范中所提及的资源需求,Kubernetes调度器会自动选择最合适的节点来运行pod。 但在许多实际场景下,我们必须干预调度过程才能在pod和一个节点或两个特定pod之间进行匹配。因此,Kubernetes中有一种十分强大的机制来管理及控制pod的分配逻辑。 那么,本文将探索影响Kubernetes中默认调度决定的关键特性。 节点亲和性/反亲和性 Kubernetes一向以来都是依赖label和selector来对资源进行分组。例如,某服务使用selector来过滤具有特定label的pod,这些label可以选择性地接收流量。Label和selector可以使用简单的基于等式的条件(=and!=)来评估规则。通过nodeSelector的特性(即强制将pod调度到特定节点上),可以将这一技术扩展到节点中。 此外,label和selector开始支持基于集合的query,它带来了基于in、notin和exist运算符的高级过滤技术。与基于等式的需求相结合,基于集合的需求提供了复杂的技术来过滤Kubernetes中的资源。 节点亲和性/反亲和性使用label和annotation的基于表达集的过滤技术来定义特定节点上的pod的分配逻辑。Annotation可以提供不会暴露到selector的其他元数据,这意味着用于annotation的键不会包含在query和过滤资源中。但是节点亲和性可以在表达式中使用annotation。反亲和性可以确保pod不会被强制调度到与规则匹配的节点上。 除了能够在query中使用复杂的逻辑之外,节点亲和性/反亲和性能够为分配逻辑强制施加硬性和软性规则。硬性规则将会执行严格的策略,可能会阻止将pod分配到不符合条件的节点上。而软性规则则会首先确认节点是否与特定的条件相匹配,如果它们不匹配,它将使用默认的调度模式来分配Pod。表达式requiredDuringSchedulingIgnoredDuringExecution和preferredDuringSchedulingIgnoredDuringExecution将会分别执行硬性规则和软性规则。 以下是在硬性和软性规则下使用节点亲和性/反亲和性的示例: affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "failure-domain.beta.kubernetes.io/zone" operator: In values: ["asia-south1-a"] 以上规则将指示Kubernetes调度器尝试将Pod分配到在GKE集群的asia-south1-a区域中运行的节点上。如果没有可用的节点,则调度器将会直接应用标准的分配逻辑。 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "failure-domain.beta.kubernetes.io/zone" operator: NotIn values: ["asia-south1-a"] 以上规则通过使用NotIn运算符来强制执行反亲和性。这是一个硬性规则,它能够确保没有pod被分配到运行在asia-south1-a空间中的GKE节点。 Pod亲和性/反亲和性 尽管节点亲和性/反亲和性能够处理pod和节点之间的匹配,但是有些场景下我们需要确保pod在一起运行或在相同的节点上不运行2个pod。Pod亲和性/反亲和性将帮助我们应用强制实施粒度分配逻辑。 与节点亲和性/反亲和性中的表达式类似,pod亲和性/反亲和性也能够通过requiredDuringSchedulingIgnoredDuringExecution和preferredDuringSchedulingIgnoredDuringExecution强制实施硬性以及软性规则。还可以将节点亲和性与pod亲和性进行混合和匹配,以定义复杂的分配逻辑。 为了能够更好地理解概念,想象一下我们有一个web和缓存deployment,其中三个副本在一个3节点的集群中运行。为了确保在web和缓存pod之间低延迟,我们想要在用一个节点上运行它们。与此同时,我们不想在相同的节点上运行超过1个缓存pod。基于此情况,我们需要实施以下策略:每个节点仅运行1个且只有1个缓存Pod的web pod。 首先,我们将使用反亲和性规则来部署缓存,它将阻止超过1个pod运行在1个节点上: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - redis topologyKey: "kubernetes.io/hostname" topoloyKey使用附加到节点的默认label动态过滤节点的名称。请注意,我们使用podAntiAffinity表达式和in运算符来应用规则的方式。 假设在集群的某个节点上安排了3个pod缓存,那么现在我们想要在与缓存Pod相同的节点上部署web pod。我们将使用podAffinity来实施这一逻辑: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - redis topologyKey: "kubernetes.io/hostname" 以上代码表明Kubernetes调度器要寻找有缓存Pod的节点并部署web pod。 除了节点和pod的亲和性/反亲和性之外,我们还能使用taints和tolerations来定义自定义分配逻辑。此外,我们还能写自定义调度程序,它可以从默认的调度程序中接管调度逻辑。

优秀的个人博客,低调大师

阿里云如何基于标准 K8s 打造边缘计算云原生基础设施

作者 | 黄玉奇(徙远) 阿里巴巴高级技术专家 导读:伴随 5G、IoT的发展,边缘计算正在成为云计算的新边界,而规模和复杂度的日益提升对边缘计算的效率、可靠性、资源利用率等一系列能力又提出了新的诉求。试想,如果能将云能力从中心往边缘触达,上述问题是不是将迎刃而解?在云原生时代构建云到边的触达通路,保持云边一致性体验,我们的抓手又在哪里呢?本文将一一为你揭晓。 云原生的理念现今正如火如荼。它不仅仅是一种技术,更是随着云生态的发展而被逐渐提炼出的一系列技术、最佳实践与方法论的集合;它带来了资源利用率提升、分布式系统的弹性扩展与可靠性等能力,能够让 IT系统最大程度的享受云计算红利,业界全面拥抱云原生就是最好的佐证。 云原生概念 云原生的概念最早是在 2013 年被提出,经过近几年的发展,尤其是从 2015 年 Google 牵头成立

优秀的个人博客,低调大师

高手问答 —— K8S 从懵圈到熟练,资深架构师在线解答

近几年,Kubernetes 已从一个新生事物发展为一个影响全球 IT 技术的基础设施平台,也推动了云原生应用、微服务架构、ServiceMesh 等热门技术的普及和落地。现在,Kubernetes 已经成为明星项目,成为开源历史上发展速度超快的项目之一。 与此同时,关注 Kubernetes 的读者量一直在增加,读者抛出 Kubernetes 相关问题的频率也很高,因此本期高手问答以期为大家提供一个与权威专家在线讨论的渠道。 OSCHINA 本期高手问答(10 月 28 日 - 11月 03日)特邀请到《Kubernetes 权威指南》主要作者吴治辉@zzzxgswd 在线答疑,解答各位读者或者 Kubernetes 爱好者的各种技术疑问。 嘉宾简介 吴治辉,HPE 资深架构师,拥有近 20 年软件研发经验,专注于电信软件和云计算方面的软件研发,拥有丰富的大型项目架构设计经验,是业界少有的具备很强 Coding 能力的资深架构师,也是《架构解密:从分布式到微服务》《Kubernetes 权威指南:企业级容器云实战》等书作者。 为了鼓励踊跃提问,@博文视点 会在问答结束后从提问者中抽取5名幸运网友赠予《Kubernetes 权威指南:从 Docker 到 Kubernetes 实践全接触(第4版)》一书。 购书地址:https://u.jd.com/j1FkFE OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。 下面欢迎大家向吴治辉老师@zzzxgswd 积极提问,直接回帖提问即可。

优秀的个人博客,低调大师

云原生生态周报 Vol. 9 | K8s 1.15 后的性能提升

业界要闻 Helm这款包管理工具,作为业界Kubernetes上应用分发的事实标准,其 v3.0.0-alpha.1正式发布,这是Helm 3的第一个Alpha版本。(https://github.com/helm/helm/releases/tag/v3.0.0-alpha.1),标志着 Tiller 这个 Server 端组件正式从 Helm 体系中谢幕 Talos发布。Talos是一款专门用于部署Kubernetes的操作系统。相对于CoreOS,RancherOS或者LinuxKit这些容器操作系统,Talos更为精简。但是由于去除了ssh等基础工具,这对于Ansible等基于ssh的Kubernetes部署工具影响巨大。(https://github.com/talos-systems/talos) Google推出深度学习容

优秀的个人博客,低调大师

k8s 各种网络方案 - 每天5分钟玩转 Docker 容器技术(170)

网络模型有了,如何实现呢? 为了保证网络方案的标准化、扩展性和灵活性,Kubernetes 采用了 Container Networking Interface(CNI)规范。 CNI 是由 CoreOS 提出的容器网络规范,它使用了插件(Plugin)模型创建容器的网络栈。 CNI 的优点是支持多种容器 runtime,不仅仅是 Docker。CNI 的插件模型支持不同组织和公司开发的第三方插件,这对运维人员来说很有吸引力,可以灵活选择适合的网络方案。 目前已有多种支持 Kubernetes 的网络方案,比如 Flannel、Calico、Canal、Weave Net 等。因为它们都实现了 CNI 规范,用户无论选择哪种方案,得到的网络模型都一样,即每个 Pod 都有独立的 IP,可以直接通信。区别在于不同方案的底层实现不同,有的采用基于 VxLAN 的 Overlay 实现,有的则是 Underlay,性能上有区别。再有就是是否支持 Network Policy。 书籍: 1.《每天5分钟玩转Kubernetes》https://item.jd.com/26225745440.html 2.《每天5分钟玩转Docker容器技术》https://item.jd.com/16936307278.html 3.《每天5分钟玩转OpenStack》https://item.jd.com/12086376.html

优秀的个人博客,低调大师

部署 k8s Cluster(下)- 每天5分钟玩转 Docker 容器技术(119)

上节我们通过 kubeadm 在 k8s-master 上部署了 Kubernetes,本节安装 Pod 网络并添加 k8s-node1 和 k8s-node2,完成集群部署。 安装 Pod 网络 要让 Kubernetes Cluster 能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信。 Kubernetes 支持多种网络方案,这里我们先使用 flannel,后面还会讨论 Canal。 执行如下命令部署 flannel: kubectlapply-fhttps://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 添加 k8s-node1 和 k8s-node2 在 k8s-node1 和 k8s-node2 上分别执行如下命令,将其注册到 Cluster 中: kubeadmjoin--tokend38a01.13653e584ccc1980192.168.56.105:6443 这里的--token来自前面kubeadm init输出的第 ⑨ 步提示,如果当时没有记录下来可以通过kubeadm token list查看。 kubeadm join执行如下: 根据提示,我们可以通过kubectl get nodes查看节点的状态。 目前所有节点都是NotReady,这是因为每个节点都需要启动若干组件,这些组件都是在 Pod 中运行,需要首先从 google 下载镜像,我们可以通过如下命令查看 Pod 的状态: kubectlgetpod--all-namespaces Pending、ContainerCreating、ImagePullBackOff都表明 Pod 没有就绪,Running才是就绪状态。我们可以通过kubectl describe pod <Pod Name>查看 Pod 具体情况,比如: kubectldescribepodkube-flannel-ds-v0p3x--namespace=kube-system 为了节省篇幅,这里只截取命令输出的最后部分,可以看到在下载 image 时失败,如果网络质量不好,这种情况是很常见的。我们可以耐心等待,因为 Kubernetes 会重试,我们也可以自己手工执行docker pull去下载这个镜像。 等待一段时间,image 都成功下载后,所有 Pod 会处于Running状态。 这时,所有的节点都已经Ready,Kubernetes Cluster 创建成功,一切准备就绪。 小结 本章通过 kubeadm 部署了三节点的 Kubernetes 集群,后面章节我们都将在这个实验环境中学习 Kubernetes 的各项技术。 本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/2060919

优秀的个人博客,低调大师

部署 k8s Cluster(上)- 每天5分钟玩转 Docker 容器技术(118)

我们将部署三个节点的 Kubernetes Cluster。 k8s-master 是 Master,k8s-node1 和 k8s-node2 是 Node。 所有节点的操作系统均为 Ubuntu 16.04,当然其他 Linux 也是可以的。 官方安装文档可以参考https://kubernetes.io/docs/setup/independent/install-kubeadm/ 注意:Kubernetes 几乎所有的安装组件和 Docker 镜像都放在 goolge 自己的网站上,这对国内的同学可能是个不小的障碍。建议是:网络障碍都必须想办法克服,不然连 Kubernetes 的门都进不了。 安装 Docker 所有节点都需要安装 Docker。 apt-getupdate&&apt-getinstalldocker.io 安装 kubelet、kubeadm 和 kubectl 在所有节点上安装 kubelet、kubeadm 和 kubectl。 kubelet 运行在 Cluster 所有节点上,负责启动 Pod 和容器。 kubeadm 用于初始化 Cluster。 kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。 apt-getupdate&&apt-getinstall-yapt-transport-httpscurl-shttps://packages.cloud.google.com/apt/doc/apt-key.gpg|apt-keyadd-cat<<EOF>/etc/apt/sources.list.d/kubernetes.listdebhttp://apt.kubernetes.io/kubernetes-xenialmainEOFapt-getupdateapt-getinstall-ykubeletkubeadmkubectl 用 kubeadm 创建 Cluster 完整的官方文档可以参考https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/ 初始化 Master 在 Master 上执行如下命令: kubeadminit--apiserver-advertise-address192.168.56.105--pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。 --pod-network-cidr指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对--pod-network-cidr有自己的要求,这里设置为10.244.0.0/16是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。在后面的实践中我们会切换到其他网络方案,比如 Canal。 初始化过程如下: ① kubeadm 执行初始化前的检查。 ② 生成 token 和证书。 ③ 生成 KubeConfig 文件,kubelet 需要这个文件与 Master 通信。 ④ 安装 Master 组件,会从 goolge 的 Registry 下载组件的 Docker 镜像,这一步可能会花一些时间,主要取决于网络质量。 ⑤ 安装附加组件 kube-proxy 和 kube-dns。 ⑥ Kubernetes Master 初始化成功。 ⑦ 提示如何配置 kubectl,后面会实践。 ⑧ 提示如何安装 Pod 网络,后面会实践。 ⑨ 提示如何注册其他节点到 Cluster,后面会实践。 配置 kubectl kubectl 是管理 Kubernetes Cluster 的命令行工具,前面我们已经在所有的节点安装了 kubectl。Master 初始化完成后需要做一些配置工作,然后 kubectl 就能使用了。 依照kubeadm init输出的第 ⑦ 步提示,推荐用 Linux 普通用户执行 kubectl(root 会有一些问题)。 我们为 ubuntu 用户配置 kubectl: su - ubuntumkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config 为了使用更便捷,启用 kubectl 命令的自动补全功能。 echo"source<(kubectlcompletionbash)">>~/.bashrc 这样 ubuntu 用户就可以使用 kubectl 了。 下节我们将安装 Pod 网络并添加 k8s-node1 和 k8s-node2,完成集群部署。 书籍: 1.《每天5分钟玩转Docker容器技术》https://item.jd.com/16936307278.html2.《每天5分钟玩转OpenStack》https://item.jd.com/12086376.html 本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/2060068

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册