赛车pk10计划网站建设,东莞网络营销代运营,让别人看到自己做的网站,那些网站使用vue做的点击上方蓝色“火丁笔记”关注我们#xff0c;设个星标#xff0c;每天学习全栈知识在撰写本文时#xff0c;Kubernetes 已有 6 年历史[1]了#xff0c;在过去的两年中#xff0c;它的流行度不断提高#xff0c;一直是最受欢迎的平台之一[2]。今年#xff0c;它成为最受… 点击上方蓝色“火丁笔记”关注我们设个星标每天学习全栈知识在撰写本文时Kubernetes 已有 6 年历史[1]了在过去的两年中它的流行度不断提高一直是最受欢迎的平台之一[2]。今年它成为最受欢迎的第三大平台[3]。如果您还没有听说过 Kubernetes告诉你它是一个平台可以让您运行和协调容器工作负载。容器最初是一个 Linux 内核进程隔离结构其中包含 2007 年的 cgroups[4] 和 2002 年的 namespaces[5](命名空间)。当 LXC[6] 在 2008 年可用时容器变得越来越重要而 Google 开发了自己的内部“在容器中运行所有机制”系统称为 Borg[7]。快进到 2013 年Docker 正式发布并完全面向大众。当时Mesos[8] 是编排容器的主要工具但并未得到广泛采用。Kubernetes 于 2015 年发布并迅速成为事实上的容器编排标准。为了尝试了解 Kubernetes 的受欢迎程度请考虑一些问题。开发人员最后一次可以在何时达成部署生产应用程序的方式您知道有多少开发人员开箱即用地运行工具如今有多少云运营工程师不了解应用程序如何工作我们将在本文中探讨答案。以数据(YAML)为基础的的架构 来自 Puppet[9] 和 Chef[10] 的世界Kubernetes 的重大转变之一就是从以代码为基础的基础架构过渡到以数据为基础的基础架构(特别是 YAML)。Kubernetes 中的所有资源包括 Pod配置部署卷等都可以简单地在 YAML 文件中表示。apiVersion: v1kind: Podmetadata: name: site labels: app: webspec: containers: - name: front-end image: nginx ports: - containerPort: 80这种表示形式使 DevOps 或站点可靠性工程师可以更轻松地完全表达其工作负载而无需使用 PythonRuby 或 Javascript 等编程语言编写代码。以数据为基础的架构的其他好处包括GitOps 或 Git Operations 版本控制。使用这种方法您可以将所有 Kubernetes YAML 文件保留在 git 存储库下这使您可以准确地知道何时进行更改由谁进行更改以及究竟进行了哪些更改。这样可以避免整个组织需要成员去寻找可能模棱两可的内容从而提高了整个组织的透明度并提高了效率。同时通过合并请求可以更轻松地自动更改 Kubernetes 资源。可扩展性。将资源定义为 YAML使集群运营商可以非常轻松地更改 Kubernetes 资源中的一个或两个数字来更改缩放行为。Kubernetes 具有水平 Pod 自动缩放器可帮助您确定特定部署必须能够处理的最小和最大数量的 Pod才能处理低流量和高流量时间。例如如果您运行的部署可能由于流量突然增加而可能需要更多容量则可以将 maxReplicas 从 10 更改为 20apiVersion: autoscaling/v2beta2kind: HorizontalPodAutoscalermetadata: name: myapp namespace: defaultspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: myapp-deployment minReplicas: 1 maxReplicas: 20 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50安全和控制。YAML 是验证在 Kubernetes 中部署什么以及如何部署的好方法。例如有关安全性的主要问题之一是您的工作负载是否以非 root 用户身份运行。我们可以使用 conftest[11](一种 YAML /JSON 验证器)之类的工具以及Open Policy Agent[12](一种策略验证器)来检查您的工作负载的 SecurityContext[13] 是否允许容器作为 root 运行。为此用户可以使用一个简单的开放策略代理重新注册策略如下所示package maindeny[msg] { input.kind Deployment not input.spec.template.spec.securityContext.runAsNonRoot true msg Containers must not run as root}云提供商集成。科技行业的主要趋势之一是在公有云提供商中运行工作负载。借助云提供商组件Kubernetes 允许每个群集与其运行的云提供商进行集成。例如如果用户正在 AWS 的 Kubernetes 中运行某个应用程序并且希望通过服务访问该应用程序则云提供商将帮助自动创建 LoadBalancer 服务该服务将自动设置 Amazon Elastic Load Balancer 来将流量转发给应用程序 pods。可扩展性 Kubernetes 具有很好的可扩展性开发人员对此非常满意。内置一些资源例如 PodDeploymentStatefulSetSecretsConfigMap 等。同时用户和开发人员可以通过“自定义资源定义[14]”添加更多资源。例如如果我们想定义 CronTab 资源则可以使用以下方法来做到这一点apiVersion: apiextensions.k8s.io/v1kind: CustomResourceDefinitionmetadata: name: crontabs.my.orgspec: group: my.org versions: - name: v1 served: true storage: true Schema: openAPIV3Schema: type: object properties: spec: type: object properties: cronSpec: type: string pattern: ^(\d|\*)(/\d)?(\s(\d|\*)(/\d)?){4}$ replicas: type: integer minimum: 1 maximum: 10 scope: Namespaced names: plural: crontabs singular: crontab kind: CronTab shortNames: - ct我们可以稍后使用以下内容创建 CronTab 资源apiVersion: my.org/v1kind: CronTabmetadata: name: my-cron-objectspec: cronSpec: * * * * */5 image: my-cron-image replicas: 5Kubernetes 可扩展性的另一种形式是开发人员编写自己的 Operators[15] 的能力Operator 是在 Kubernetes 集群中运行的遵循 control loop pattern[16] 的特定进程。操作员允许用户通过与 Kubernetes API 进行对话来自动管理 CRD(自定义资源定义)。该社区有几种工具允许开发人员创建自己的 Operators。这些工具之一是 Operator Framework[17] 及其 Operator SDK[18]。SDK 为开发人员提供了一个框架使他们可以快速开始创建 operator。例如您可以从命令行[19]输入以下命令开始$ operator-sdk new my-operator --repo github.com/myuser/my-operator它将为您的 operator 创建整个样板包括 YAML 文件和 Go 代码.|____cmd| |____manager| | |____main.go|____go.mod|____deploy| |____role.yaml| |____role_binding.yaml| |____service_account.yaml| |____operator.yaml|____tools.go|____go.sum|____.gitignore|____version| |____version.go|____build| |____bin| | |____user_setup| | |____entrypoint| |____Dockerfile|____pkg| |____apis| | |____apis.go| |____controller| | |____controller.go然后您可以添加 API 和类似的控制器$ operator-sdk add api --api-versionmyapp.com/v1alpha1 --kindMyAppService$ operator-sdk add controller --api-versionmyapp.com/v1alpha1 --kindMyAppService最后构建并将 operator 推送到您的容器注册表$ operator-sdk build your.container.registry/youruser/myapp-operator如果开发人员需要更多控制权则可以修改 Go 文件中的样板代码。例如要修改控制器的详细信息他们可以对 controller.go 文件进行更改。另一个项目 KUDO[20] 允许您仅使用声明性 YAML 文件来创建运算符。例如Apache Kafka 的运算符将定义为以下内容[21]它允许用户使用以下命令在 Kubernetes 上安装 Kafka 集群$ kubectl kudo install zookeeper$ kubectl kudo install kafka然后还使用另一个命令对其进行调整$ kubectl kudo install kafka --instancemy-kafka-name \ -p ZOOKEEPER_URIzk-zookeeper-0.zk-hs:2181 \ -p ZOOKEEPER_PATH/my-path -p BROKER_CPUS3000m \ -p BROKER_COUNT5 -p BROKER_MEM4096m \ -p DISK_SIZE40Gi -p MIN_INSYNC_REPLICAS3 \ -p NUM_NETWORK_THREADS10 -p NUM_IO_THREADS20革新 在过去的几年中Kubernetes 每三四个月发布一次主要版本这意味着每年都有三到四个主要版本。推出的新功能的数量并未减慢最新版本[22]的 30 多种新增功能和更改证明了这一点。此外Kubernetes 项目 GitHub 活动表明[23]即使在这些困难时期贡献也没有放缓的迹象。这些新功能使集群运营商在运行各种不同的工作负载时具有更大的灵活性。软件工程师还喜欢拥有更多控件以将其应用程序直接部署到生产环境中。社区 Kubernetes 受欢迎的另一个重要方面是其强大的社区。首先Kubernetes 在 2015 年发布 1.0 版本时捐赠给了一个与供应商无关的家庭Cloud Native Computing Foundation[24]。随着项目的推进针对 Kubernetes 中的不同区域还有各种各样的社区 SIG[25](特殊兴趣小组)。他们不断添加新功能并使其对用户更加友好。Cloud Native Foundation 还组织了 CloudNativeCon/KubeCon截至撰写本文时CloudNativeCon/KubeCon 是世界上最大的开源活动。该活动通常每年举行三届吸引了数千名希望改善 Kubernetes 及其生态系统以及利用每三个月发布的新功能的技术人员和专业人士。此外Cloud Native Foundation 拥有一个技术监督委员会[26]与 SIGs[27] 一起研究基金会在云原生生态系统中的新项目和现有项目[28]。大多数项目都有助于增强 Kubernetes 的价值主张。最后我相信如果没有社区的有意识的努力来互相包容并欢迎任何新来者Kubernetes 就不会取得成功。未来 开发人员未来面临的主要挑战之一是如何将更多的精力放在代码的细节上而不是代码运行所在的基础结构上。为此无服务器[29]正在成为应对这一挑战的领先架构范例之一。已经有非常高级的框架例如 Knative[30] 和 OpenFaas[31]它们使用 Kubernetes 从开发人员那里提取基础架构。我们在本文中对 Kubernetes 进行了简要介绍但这只是冰山一角。用户可以利用更多资源功能和配置。我们将持续看到可增强或发展 Kubernetes 的新开源项目和技术正如我们所提到的贡献和社区无处不在。原文链接https://stackoverflow.blog/2020/05/29/why-kubernetes-getting-so-popular/作者Ricardo Aravena[32]译者Go语言中文网 polaris参考资料[1]已有 6 年历史: https://en.wikipedia.org/wiki/Kubernetes[2]最受欢迎的平台之一: https://insights.stackoverflow.com/survey/2019#most-loved-dreaded-and-wanted[3]第三大平台: https://dev.insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-platforms[4]cgroups: https://en.wikipedia.org/wiki/Cgroups[5]namespaces: https://en.wikipedia.org/wiki/Linux_namespaces[6]LXC: https://en.wikipedia.org/wiki/LXC[7]Borg: https://kubernetes.io/blog/2015/04/borg-predecessor-to-kubernetes/[8]Mesos: http://mesos.apache.org/[9]Puppet: https://github.com/puppetlabs/puppet[10]Chef: https://github.com/chef/chef[11]conftest: https://www.conftest.dev/[12]Open Policy Agent: https://www.openpolicyagent.org/[13]SecurityContext: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[14]自定义资源定义: https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/[15]Operators: https://kubernetes.io/docs/concepts/extend-kubernetes/operator/[16]control loop pattern: https://kubernetes.io/docs/concepts/#kubernetes-control-plane[17]Operator Framework: https://github.com/operator-framework[18]Operator SDK: https://github.com/operator-framework/operator-sdk[19]命令行: https://github.com/operator-framework/operator-sdk#create-and-deploy-an-app-operator[20]KUDO: https://kudo.dev/[21]以下内容: https://github.com/kudobuilder/operators/blob/master/repository/kafka/operator/operator.yaml[22]最新版本: https://kubernetes.io/docs/setup/release/notes/#changes-by-kind[23]GitHub 活动表明: https://k8s.devstats.cncf.io/d/12/dashboards?orgId1refresh15mfromnow-1ytonow-1h[24]Cloud Native Computing Foundation: https://www.cncf.io/[25]社区 SIG: https://github.com/kubernetes/community/blob/master/sig-list.md[26]技术监督委员会: https://github.com/cncf/toc[27]SIGs: https://github.com/cncf/toc/blob/master/sigs/README.md[28]现有项目: https://www.cncf.io/projects/[29]无服务器: https://stackoverflow.blog/2020/05/18/you-want-efficient-application-scaling-go-serverless/[30]Knative: https://github.com/knative[31]OpenFaas: https://github.com/openfaas/faas[32]Ricardo Aravena: https://stackoverflow.blog/author/ricardo-aravena/