update
parent
be643b7ce7
commit
338d7888bd
15
SUMMARY.md
15
SUMMARY.md
|
@ -77,7 +77,7 @@
|
||||||
* [Service API 简介](concepts/service-api-overview.md)
|
* [Service API 简介](concepts/service-api-overview.md)
|
||||||
* [身份与权限控制](concepts/authentication-and-permission.md)
|
* [身份与权限控制](concepts/authentication-and-permission.md)
|
||||||
* [ServiceAccount](concepts/serviceaccount.md)
|
* [ServiceAccount](concepts/serviceaccount.md)
|
||||||
* [RBAC—— 基于角色的访问控制](concepts/rbac.md)
|
* [基于角色的访问控制(RBAC)](concepts/rbac.md)
|
||||||
* [NetworkPolicy](concepts/network-policy.md)
|
* [NetworkPolicy](concepts/network-policy.md)
|
||||||
* [网络](concepts/networking.md)
|
* [网络](concepts/networking.md)
|
||||||
* [Kubernetes 中的网络解析 —— 以 flannel 为例](concepts/flannel.md)
|
* [Kubernetes 中的网络解析 —— 以 flannel 为例](concepts/flannel.md)
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
* [ConfigMap](concepts/configmap.md)
|
* [ConfigMap](concepts/configmap.md)
|
||||||
* [ConfigMap 的热更新](concepts/configmap-hot-update.md)
|
* [ConfigMap 的热更新](concepts/configmap-hot-update.md)
|
||||||
* [Volume](concepts/volume.md)
|
* [Volume](concepts/volume.md)
|
||||||
* [Persistent Volume(持久化卷)](concepts/persistent-volume.md)
|
* [持久化卷(Persistent Volume)](concepts/persistent-volume.md)
|
||||||
* [Storage Class](concepts/storageclass.md)
|
* [Storage Class](concepts/storageclass.md)
|
||||||
* [本地持久化存储](concepts/local-persistent-storage.md)
|
* [本地持久化存储](concepts/local-persistent-storage.md)
|
||||||
* [集群扩展](concepts/extension.md)
|
* [集群扩展](concepts/extension.md)
|
||||||
|
@ -99,9 +99,10 @@
|
||||||
* [APIService](concepts/apiservice.md)
|
* [APIService](concepts/apiservice.md)
|
||||||
* [Service Catalog](concepts/service-catalog.md)
|
* [Service Catalog](concepts/service-catalog.md)
|
||||||
* [多集群管理](concepts/multicluster.md)
|
* [多集群管理](concepts/multicluster.md)
|
||||||
* [Multi-Cluster Services API(多集群服务 API )](concepts/multi-cluster-services-api.md)
|
* [多集群服务 API(Multi-Cluster Services API)](concepts/multi-cluster-services-api.md)
|
||||||
|
* [集群联邦(Cluster Federation)](practice/federation.md)
|
||||||
* [资源调度](concepts/scheduling.md)
|
* [资源调度](concepts/scheduling.md)
|
||||||
* [QoS(服务质量等级)](concepts/qos.md)
|
* [服务质量等级(QoS)](concepts/qos.md)
|
||||||
|
|
||||||
## 用户指南
|
## 用户指南
|
||||||
|
|
||||||
|
@ -173,7 +174,6 @@
|
||||||
* [集群及应用监控](practice/monitor.md)
|
* [集群及应用监控](practice/monitor.md)
|
||||||
* [数据持久化问题](practice/data-persistence-problem.md)
|
* [数据持久化问题](practice/data-persistence-problem.md)
|
||||||
* [管理容器的计算资源](practice/manage-compute-resources-container.md)
|
* [管理容器的计算资源](practice/manage-compute-resources-container.md)
|
||||||
* [集群联邦(Cluster Federation)](practice/federation.md)
|
|
||||||
* [存储管理](practice/storage.md)
|
* [存储管理](practice/storage.md)
|
||||||
* [GlusterFS](practice/glusterfs.md)
|
* [GlusterFS](practice/glusterfs.md)
|
||||||
* [使用 GlusterFS 做持久化存储](practice/using-glusterfs-for-persistent-storage.md)
|
* [使用 GlusterFS 做持久化存储](practice/using-glusterfs-for-persistent-storage.md)
|
||||||
|
@ -193,7 +193,7 @@
|
||||||
* [Heapster](practice//heapster.md)
|
* [Heapster](practice//heapster.md)
|
||||||
* [使用 Heapster 获取集群和对象的 metric 数据](practice/using-heapster-to-get-object-metrics.md)
|
* [使用 Heapster 获取集群和对象的 metric 数据](practice/using-heapster-to-get-object-metrics.md)
|
||||||
* [Prometheus](practice/prometheus.md)
|
* [Prometheus](practice/prometheus.md)
|
||||||
* [使用 Prometheus 监控 kubernetes 集群](practice/using-prometheus-to-monitor-kuberentes-cluster.md)
|
* [使用 Prometheus 监控 Kubernetes 集群](practice/using-prometheus-to-monitor-kuberentes-cluster.md)
|
||||||
* [Prometheus 查询语言 PromQL 使用说明](practice/promql.md)
|
* [Prometheus 查询语言 PromQL 使用说明](practice/promql.md)
|
||||||
* [使用 Vistio 监控 Istio 服务网格中的流量](practice/vistio-visualize-your-istio-mesh.md)
|
* [使用 Vistio 监控 Istio 服务网格中的流量](practice/vistio-visualize-your-istio-mesh.md)
|
||||||
* [分布式追踪](practice/distributed-tracing.md)
|
* [分布式追踪](practice/distributed-tracing.md)
|
||||||
|
@ -211,7 +211,7 @@
|
||||||
* [OpenKruise](practice/openkruise.md)
|
* [OpenKruise](practice/openkruise.md)
|
||||||
* [原地升级](practice/in-place-update.md)
|
* [原地升级](practice/in-place-update.md)
|
||||||
* [安全策略](practice/security-policy.md)
|
* [安全策略](practice/security-policy.md)
|
||||||
* [OPA(开放策略代理)](practice/open-policy-agent.md)
|
* [开放策略代理(OPA)](practice/open-policy-agent.md)
|
||||||
* [云原生安全](practice/cloud-native-security.md)
|
* [云原生安全](practice/cloud-native-security.md)
|
||||||
|
|
||||||
## 服务网格
|
## 服务网格
|
||||||
|
@ -284,7 +284,6 @@
|
||||||
* [开源项目加入 CNCF Sandbox 的要求](cloud-native/cncf-sandbox-criteria.md)
|
* [开源项目加入 CNCF Sandbox 的要求](cloud-native/cncf-sandbox-criteria.md)
|
||||||
* [CNCF 中的项目治理](cloud-native/cncf-project-governing.md)
|
* [CNCF 中的项目治理](cloud-native/cncf-project-governing.md)
|
||||||
* [CNCF Ambassador](cloud-native/cncf-ambassador.md)
|
* [CNCF Ambassador](cloud-native/cncf-ambassador.md)
|
||||||
* [云原生社区](cloud-native/cnc.md)
|
|
||||||
* [认证及培训](cloud-native/certification.md)
|
* [认证及培训](cloud-native/certification.md)
|
||||||
* [认证 Kubernetes 服务提供商(KCSP)说明](appendix/about-kcsp.md)
|
* [认证 Kubernetes 服务提供商(KCSP)说明](appendix/about-kcsp.md)
|
||||||
* [认证 Kubernetes 管理员(CKA)说明](appendix/about-cka-candidate.md)
|
* [认证 Kubernetes 管理员(CKA)说明](appendix/about-cka-candidate.md)
|
||||||
|
|
|
@ -1,35 +1,35 @@
|
||||||
# 云原生编程语言Pulumi
|
# 云原生编程语言 Pulumi
|
||||||
|
|
||||||
2018年6月18日 Joe Duffy在[他的博客](http://joeduffyblog.com/2018/06/18/hello-pulumi/)中宣布开源了云原生编程语言[Pulumi](https://pulumi.io)。这是继[Ballerina](https://ballerina.io)之后我看到的另一款云原生编程语言,他们之间有一些共同的特点,例如都是为了支持多种云环境,基于不可变基础设施和基础设施即代码的理念构建,使云原生应用的集成更加方便,但也有一些不同,Ballerina是直接创建了一个基于JVM的语言,而Pulumi是为不同编程语言构建了SDK。
|
2018 年 6 月 18 日 Joe Duffy 在[他的博客](http://joeduffyblog.com/2018/06/18/hello-pulumi/)中宣布开源了云原生编程语言 [Pulumi](https://www.pulumi.com/)。这是继 [Ballerina](https://ballerina.io/) 之后我看到的另一款云原生编程语言,他们之间有一些共同的特点,例如都是为了支持多种云环境,基于不可变基础设施和基础设施即代码的理念构建,使云原生应用的集成更加方便,但也有一些不同,Ballerina 是直接创建了一个基于 JVM 的语言,而 Pulumi 是为不同编程语言构建了 SDK。
|
||||||
|
|
||||||
下文部分来自Joe Duffy的博客[Hello, Pulumi](http://joeduffyblog.com/2018/06/18/hello-pulumi/)!
|
下文部分来自 Joe Duffy 的博客 [Hello, Pulumi](http://joeduffyblog.com/2018/06/18/hello-pulumi/)!
|
||||||
|
|
||||||
![云原生编程语言Pulumi](../images/00704eQkgy1fsm4v0a6qwj30xc0m8t9d.jpg)
|
![云原生编程语言Pulumi](../images/pulumi.jpg)
|
||||||
|
|
||||||
TL;DR 有了Pulumi,38页的手动操作说明将变成了38行代码。25000行YAML配置变成了使用真实编程语言的500行语句。
|
TL;DR 有了 Pulumi,38 页的手动操作说明将变成了 38 行代码。25000 行 YAML 配置变成了使用真实编程语言的 500 行语句。
|
||||||
|
|
||||||
Pulumi的整个运行时、CLI、支持的库都可以在GitHub上免费下载。我们的团队正急切的等待您的反馈。与此同时,我需要告诉您一些关于Pulumi的事情,为什么我们会创造它。
|
Pulumi 的整个运行时、CLI、支持的库都可以在 GitHub 上免费下载。我们的团队正急切的等待您的反馈。与此同时,我需要告诉您一些关于 Pulumi 的事情,为什么我们会创造它。
|
||||||
|
|
||||||
## Pulumi是什么?
|
## Pulumi 是什么?
|
||||||
|
|
||||||
Pulumi是一个支持多语言和混合云开发平台。它可以让您使用真实语言和真实代码创建云计算的各个方面,从基础设施到应用程序本身。只需编写程序并运行它们,Pulumi就能帮你完成出其余部分。
|
Pulumi 是一个支持多语言和混合云开发平台。它可以让您使用真实语言和真实代码创建云计算的各个方面,从基础设施到应用程序本身。只需编写程序并运行它们,Pulumi 就能帮你完成出其余部分。
|
||||||
|
|
||||||
Pulumi的中心是一个云对象模型,与运行时相结合以了解如何以任何语言编写程序,理解执行它们所需的云资源,然后以强大的方式规划和管理您的云资源。这种云运行时和对象模型本质上是与语言、云中立的,这就是为什么我们能够支持如此多的语言和云平台。更多支持正在路上。
|
Pulumi 的中心是一个云对象模型,与运行时相结合以了解如何以任何语言编写程序,理解执行它们所需的云资源,然后以强大的方式规划和管理您的云资源。这种云运行时和对象模型本质上是与语言、云中立的,这就是为什么我们能够支持如此多的语言和云平台。更多支持正在路上。
|
||||||
|
|
||||||
Pulumi采用了基础设施即代码以及不可变基础设施的概念,并可让您从您最喜欢的语言(而不是YAML或DSL)中获得自动化和可重复性优势。在部署它们之前,您可以对变更进行区分,并且我们会对谁更改了什么以及何时更改进行完善的审计追踪。核心模型因此是陈述性的。
|
Pulumi 采用了基础设施即代码以及不可变基础设施的概念,并可让您从您最喜欢的语言(而不是 YAML 或 DSL)中获得自动化和可重复性优势。在部署它们之前,您可以对变更进行区分,并且我们会对谁更改了什么以及何时更改进行完善的审计追踪。核心模型因此是陈述性的。
|
||||||
|
|
||||||
使用真正的语言可以带来巨大的好处:
|
使用真正的语言可以带来巨大的好处:
|
||||||
|
|
||||||
- **熟悉**:不需要学习新的定制DSL或基于YAML的模板语言
|
- **熟悉**:不需要学习新的定制 DSL 或基于 YAML 的模板语言
|
||||||
- **抽象**:正如我们喜爱的编程语言那样,我们可以用更小的东西来构建更大的东西
|
- **抽象**:正如我们喜爱的编程语言那样,我们可以用更小的东西来构建更大的东西
|
||||||
- **共享和重用**:利用现有的语言包管理器共享和重用这些抽象,无论是与社区、团队内部共享
|
- **共享和重用**:利用现有的语言包管理器共享和重用这些抽象,无论是与社区、团队内部共享
|
||||||
- **表现力**:充分利用您的编程语言,包括异步、循环和条件
|
- **表现力**:充分利用您的编程语言,包括异步、循环和条件
|
||||||
- **工具**:通过使用真正的语言,我们可以即时访问IDE、重构、测试、静态分析和编排等等
|
- **工具**:通过使用真正的语言,我们可以即时访问 IDE、重构、测试、静态分析和编排等等
|
||||||
- **生产力**:将以上所有好处加在一起,一起将变得更快,我们也会变得更快乐
|
- **生产力**:将以上所有好处加在一起,一起将变得更快,我们也会变得更快乐
|
||||||
|
|
||||||
当提供原始云资源时,这些好处当然最重要,但是我们在团队中发现,您只能使用抽象。这包括在函数中包装事物以消除样板并创建引入更高级别概念的自定义类,通常将它们打包并重复使用。
|
当提供原始云资源时,这些好处当然最重要,但是我们在团队中发现,您只能使用抽象。这包括在函数中包装事物以消除样板并创建引入更高级别概念的自定义类,通常将它们打包并重复使用。
|
||||||
|
|
||||||
例如,此代码在AWS中创建一个DynamoDB数据库:
|
例如,此代码在 AWS 中创建一个 DynamoDB 数据库:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import * as aws from "@pulumi/aws";
|
import * as aws from "@pulumi/aws";
|
||||||
|
@ -66,38 +66,38 @@ bucket.onPut("onNewVideo", bucketArgs => {
|
||||||
|
|
||||||
更好的是,这些代码可以根据您的需求部署到任何公共或私有云中。
|
更好的是,这些代码可以根据您的需求部署到任何公共或私有云中。
|
||||||
|
|
||||||
最后,这个例子创建了一个Redis缓存。我们怎么知道?我们不需要。缓存组件是一个抽象,它封装了我们可以安全忽略的不重要的细节:
|
最后,这个例子创建了一个 Redis 缓存。我们怎么知道?我们不需要。缓存组件是一个抽象,它封装了我们可以安全忽略的不重要的细节:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import {Cache} from "./cache";
|
import {Cache} from "./cache";
|
||||||
let cache = new Cache("url-cache");
|
let cache = new Cache("url-cache");
|
||||||
```
|
```
|
||||||
|
|
||||||
在使用Pulumi之后,你不会再以同样的方式考虑基础设施。你的大脑将不再是一个独立于应用程序的独特“事物”,而是开始将分布式云系统看作是你的程序架构的核心部分,而不是事后的想法。
|
在使用 Pulumi 之后,你不会再以同样的方式考虑基础设施。你的大脑将不再是一个独立于应用程序的独特 “事物”,而是开始将分布式云系统看作是你的程序架构的核心部分,而不是事后的想法。
|
||||||
|
|
||||||
由于抽象,我们已经能够提供一些强大的库。该库是提炼和执行最佳实践的绝佳方式。当然,对于我们自己的库来说没有什么特别的,因为它们只是功能、类和代码,我们期待着看到你为自己、你的团队或者社区建立的那些库。
|
由于抽象,我们已经能够提供一些强大的库。该库是提炼和执行最佳实践的绝佳方式。当然,对于我们自己的库来说没有什么特别的,因为它们只是功能、类和代码,我们期待着看到你为自己、你的团队或者社区建立的那些库。
|
||||||
|
|
||||||
我们最复杂的库——Pulumi云框架——提供了一些令人兴奋的正在进行的工作的早期预览,展示如何创建跨越云提供商自己对诸如容器、无服务器功能和存储桶等核心概念的抽象。以同样的方式,您可以用Node.js、Python、Java、.NET等语言编写功能强大的应用程序,利用进程、线程和文件系统,无论是在macOS、Linux还是Windows上,这种方法都可以让您创建针对任何云提供商的现代混合云应用程序。像Kubernetes和其他CNCF产品组合这样的技术正在帮助推动这一不可避免的结果,因为它们在整个云基板上实现了对基本计算抽象的民主化和共识。
|
我们最复杂的库 ——Pulumi 云框架 —— 提供了一些令人兴奋的正在进行的工作的早期预览,展示如何创建跨越云提供商自己对诸如容器、无服务器功能和存储桶等核心概念的抽象。以同样的方式,您可以用 Node.js、Python、Java、.NET 等语言编写功能强大的应用程序,利用进程、线程和文件系统,无论是在 macOS、Linux 还是 Windows 上,这种方法都可以让您创建针对任何云提供商的现代混合云应用程序。像 Kubernetes 和其他 CNCF 产品组合这样的技术正在帮助推动这一不可避免的结果,因为它们在整个云基板上实现了对基本计算抽象的民主化和共识。
|
||||||
|
|
||||||
Pulumi不是PaaS,尽管它提供类似PaaS的生产力;您的程序总是直接针对您选择的云运行,并且始终可以访问该基础云的全部功能。即使您选择使用更高级别的组件,它也会向下兼容,并且您可以随时直接使用原始资源。它就像任何复杂的现代软件:有时,整个事情必须用C++编写,以便访问底层平台的全部功能,但对于大多数常见情况,70%到100%可以是平台独立代码,而只有不到30%的专业化才能真正需要直接与操作系统交互。
|
Pulumi 不是 PaaS,尽管它提供类似 PaaS 的生产力;您的程序总是直接针对您选择的云运行,并且始终可以访问该基础云的全部功能。即使您选择使用更高级别的组件,它也会向下兼容,并且您可以随时直接使用原始资源。它就像任何复杂的现代软件:有时,整个事情必须用 C++ 编写,以便访问底层平台的全部功能,但对于大多数常见情况,70% 到 100%可以是平台独立代码,而只有不到 30% 的专业化才能真正需要直接与操作系统交互。
|
||||||
|
|
||||||
接下来我还将发布十几篇博客文章来介绍Pulumi所有方面的更多细节。然而,为了保持这篇文章尽量简短,我将首先介绍下Pulumi的一些我最喜欢的方面。
|
接下来我还将发布十几篇博客文章来介绍 Pulumi 所有方面的更多细节。然而,为了保持这篇文章尽量简短,我将首先介绍下 Pulumi 的一些我最喜欢的方面。
|
||||||
|
|
||||||
## 我最喜欢的东西
|
## 我最喜欢的东西
|
||||||
|
|
||||||
这很难选择,但这里有一些关于Pulumi我最喜欢的东西:
|
这很难选择,但这里有一些关于 Pulumi 我最喜欢的东西:
|
||||||
|
|
||||||
**开源**。我坚信所有开发人员工具都应该是开源的。当然,Pulumi也是一家公司,但是有充足的机会通过增加便利性以建立商业模式。(可以认为是Git与GitHub的关系)我们从以前的工作中受益匪浅,其中包括Docker、Terraform、Kubernetes、TypeScript以及其他许多明确提及的工作。我们期待成为生态系统的一部分。因为我们在开放源代码方面下了很大功夫,所以我很高兴看到社区给我们带来什么,特别是在更高级别的软件包领域。
|
**开源**。我坚信所有开发人员工具都应该是开源的。当然,Pulumi 也是一家公司,但是有充足的机会通过增加便利性以建立商业模式。(可以认为是Git 与 GitHub 的关系)我们从以前的工作中受益匪浅,其中包括 Docker、Terraform、Kubernetes、TypeScript 以及其他许多明确提及的工作。我们期待成为生态系统的一部分。因为我们在开放源代码方面下了很大功夫,所以我很高兴看到社区给我们带来什么,特别是在更高级别的软件包领域。
|
||||||
|
|
||||||
**多语言**。就像使用Java和.NET一样,Pulumi运行时的架构可以支持多种语言,并以目标语言的所有方面(风格、语法、软件包等)的惯用方式来实现。因为我们是开源的,任何人都可以贡献自己的力量。
|
**多语言**。就像使用 Java 和.NET 一样,Pulumi 运行时的架构可以支持多种语言,并以目标语言的所有方面(风格、语法、软件包等)的惯用方式来实现。因为我们是开源的,任何人都可以贡献自己的力量。
|
||||||
|
|
||||||
**混合云**。我们的云对象模型是一个强大的基础,可以支持任何云提供商。这提供了一个统一的编程模型,工具和控制平面,用于在任何地方管理云软件。如果仅仅是为了让一个简单的基于容器的应用程序在生产中运行起来,没有必要学习三种不同的YAML方言和五种不同的CLI。
|
**混合云**。我们的云对象模型是一个强大的基础,可以支持任何云提供商。这提供了一个统一的编程模型,工具和控制平面,用于在任何地方管理云软件。如果仅仅是为了让一个简单的基于容器的应用程序在生产中运行起来,没有必要学习三种不同的 YAML 方言和五种不同的 CLI。
|
||||||
|
|
||||||
**云对象模型**。这个底层云对象模型为您的云计算构建方式提供了丰富的视图。所得到的对象使用程序中的依赖关系组成一个DAG,系统可以分析和理解这些依赖关系以提供洞察力,这是我们打算随着时间的推移解锁复杂的静态分析和可视化的功能。
|
**云对象模型**。这个底层云对象模型为您的云计算构建方式提供了丰富的视图。所得到的对象使用程序中的依赖关系组成一个 DAG,系统可以分析和理解这些依赖关系以提供洞察力,这是我们打算随着时间的推移解锁复杂的静态分析和可视化的功能。
|
||||||
|
|
||||||
**可重复使用的组件**。由于拥有真正的语言,我们可以构建更高层次的抽象。我最喜欢的例子之一是帮助我们的客户定期从部署中排除1000行YAML,这是我们的AWS基础架构软件包。它采用AWS最佳实践来设置虚拟私有云,并提供专用子网和多可用区域支持,并将其转变为几行代码以配置整个网络:
|
**可重复使用的组件**。由于拥有真正的语言,我们可以构建更高层次的抽象。我最喜欢的例子之一是帮助我们的客户定期从部署中排除 1000 行 YAML,这是我们的 AWS 基础架构软件包。它采用 AWS 最佳实践来设置虚拟私有云,并提供专用子网和多可用区域支持,并将其转变为几行代码以配置整个网络:
|
||||||
|
|
||||||
```python
|
```
|
||||||
import * as awsinfra from "@pulumi/aws-infra";
|
import * as awsinfra from "@pulumi/aws-infra";
|
||||||
let network = new awsinfra.Network(`${prefix}-net`, {
|
let network = new awsinfra.Network(`${prefix}-net`, {
|
||||||
numberOfAvailabilityZones: 3, // Create subnets in many AZs
|
numberOfAvailabilityZones: 3, // Create subnets in many AZs
|
||||||
|
@ -105,13 +105,13 @@ let network = new awsinfra.Network(`${prefix}-net`, {
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
迄今为止,我最喜欢的成功案例是将客户的25,000行AWS CloudFormation YAML文件(其中使用无服务器、容器、基础设施和三个自定义部署管道)使用500行TypeScript和一个Pulumi的持续部署架构来替换。这不仅仅使得公司所有工程师都可以理解的代码变得少得多,这样他们可以将过去需要花费数周时间才能完成的事情现在用一个下午就可以搞定,而且现在可以在任何云或原生的Kubernetes上运行,而不仅是在AWS。管理团队的CloudFormation堆栈,而不是一个工作量过饱和的工程师,整个团队可以更加高效。
|
迄今为止,我最喜欢的成功案例是将客户的 25,000 行 AWS CloudFormation YAML 文件(其中使用无服务器、容器、基础设施和三个自定义部署管道)使用 500 行 TypeScript 和一个 Pulumi 的持续部署架构来替换。这不仅仅使得公司所有工程师都可以理解的代码变得少得多,这样他们可以将过去需要花费数周时间才能完成的事情现在用一个下午就可以搞定,而且现在可以在任何云或原生的 Kubernetes 上运行,而不仅是在 AWS。管理团队的 CloudFormation 堆栈,而不是一个工作量过饱和的工程师,整个团队可以更加高效。
|
||||||
|
|
||||||
**统一的容器构建/发布管道**。尝试将容器投入生产时有个问题让我早就感到很沮丧,就是同步我的应用程序、容器和基础架构管理,因为每个容器都倾向于使用不同的工具。我们的云框架演示了一个集成的工作流程,在这个工作流程中,只需简单地运行Pulumi构建、diff、推送和拉取新的容器镜像,所有这些都经过精心安排,以消除停机时间。
|
**统一的容器构建 / 发布管道**。尝试将容器投入生产时有个问题让我早就感到很沮丧,就是同步我的应用程序、容器和基础架构管理,因为每个容器都倾向于使用不同的工具。我们的云框架演示了一个集成的工作流程,在这个工作流程中,只需简单地运行 Pulumi 构建、diff、推送和拉取新的容器镜像,所有这些都经过精心安排,以消除停机时间。
|
||||||
|
|
||||||
**Lambda无服务器功能 **。 AWS的取了个好名字:Lambda。在Pulumi中,我现在可以用我最喜欢的语言使用lambda表达式来编写我的无服务器函数,而不需要一行YAML:
|
**Lambda 无服务器功能 **。 AWS 的取了个好名字:Lambda。在 Pulumi 中,我现在可以用我最喜欢的语言使用 lambda 表达式来编写我的无服务器函数,而不需要一行 YAML:
|
||||||
|
|
||||||
```python
|
```
|
||||||
import * as aws from "@pulumi/aws";
|
import * as aws from "@pulumi/aws";
|
||||||
import * as serverless from "@pulumi/aws-serverless";
|
import * as serverless from "@pulumi/aws-serverless";
|
||||||
let topic = new aws.sns.Topic("topic");
|
let topic = new aws.sns.Topic("topic");
|
||||||
|
@ -124,31 +124,31 @@ serverless.cloudwatch.onEvent("hourly", "rate(60 minutes)", event => {
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
此功能允许您捕获对变量的引用:常量、配置设置或加密,甚至可以引用其他资源,以便与它们进行通信。当你第一次这样做的时候,我保证你会有一个“哇塞”的时刻,将无服务器连接到你写过的每一个事件驱动的代码片段。
|
此功能允许您捕获对变量的引用:常量、配置设置或加密,甚至可以引用其他资源,以便与它们进行通信。当你第一次这样做的时候,我保证你会有一个 “哇塞” 的时刻,将无服务器连接到你写过的每一个事件驱动的代码片段。
|
||||||
|
|
||||||
**使用API的资源**。因为我可以捕获对其他云资源的引用,所以我可以在其上创建API以使它们更易于在我的运行时代码中使用。这使得“演员般的”编程模型无需处理配置和服务发现。
|
**使用 API 的资源**。因为我可以捕获对其他云资源的引用,所以我可以在其上创建 API 以使它们更易于在我的运行时代码中使用。这使得 “演员般的” 编程模型无需处理配置和服务发现。
|
||||||
|
|
||||||
**堆栈**。 Pulumi的核心是“堆栈”的概念。堆栈是您的云计算的独立实例,其资源和配置与所有其他堆栈不同。您可能有一堆用于生产、暂存和测试的堆栈,或者可能是每个单一租户的环境。Pulumi的CLI使得启动和卸载大量堆栈变得轻而易举。这会打开以前可能没有尝试过的工作流,例如每个开发人员都拥有自己的堆栈,将新堆叠起来(并拆除)以测试每个Pull请求,甚至将服务的层拆分成多个链接在一起的堆栈。
|
**堆栈**。 Pulumi 的核心是 “堆栈” 的概念。堆栈是您的云计算的独立实例,其资源和配置与所有其他堆栈不同。您可能有一堆用于生产、暂存和测试的堆栈,或者可能是每个单一租户的环境。Pulumi 的 CLI 使得启动和卸载大量堆栈变得轻而易举。这会打开以前可能没有尝试过的工作流,例如每个开发人员都拥有自己的堆栈,将新堆叠起来(并拆除)以测试每个 Pull 请求,甚至将服务的层拆分成多个链接在一起的堆栈。
|
||||||
|
|
||||||
我将在未来的博客文章介绍如何做。现在Pulumi已经公开,期望在接下来的几天和几周内听到更多的消息。我希望这能让您更好地了解整体平台,其方法和独特优势。
|
我将在未来的博客文章介绍如何做。现在 Pulumi 已经公开,期望在接下来的几天和几周内听到更多的消息。我希望这能让您更好地了解整体平台,其方法和独特优势。
|
||||||
|
|
||||||
## 下一步是什么?
|
## 下一步是什么?
|
||||||
|
|
||||||
我们希望通过Pulumi,开发人员和DevOps团队都将体验到云的复兴。构建强大的云软件将更加愉快、更高效、更具协作性。现代云计算软件将从代码孤岛转变为等量的配置胶水,成为优雅的分布式系统。
|
我们希望通过 Pulumi,开发人员和 DevOps 团队都将体验到云的复兴。构建强大的云软件将更加愉快、更高效、更具协作性。现代云计算软件将从代码孤岛转变为等量的配置胶水,成为优雅的分布式系统。
|
||||||
|
|
||||||
这是一个难题。我绝不会说我们已经解决了它。我确实相信Pulumi是我亲身见过并希望最接近我心目中的云开发平台。在这个激动人心的时刻,投注于语言将使我们所有人“站在巨人的肩膀上”,这让我感到乐观;语言总是一个安全的赌注。
|
这是一个难题。我绝不会说我们已经解决了它。我确实相信 Pulumi 是我亲身见过并希望最接近我心目中的云开发平台。在这个激动人心的时刻,投注于语言将使我们所有人 “站在巨人的肩膀上”,这让我感到乐观;语言总是一个安全的赌注。
|
||||||
|
|
||||||
今天很可能是我职业生涯中最激动人心的一天。我想感谢我们的团队和所有帮助过我们的人,放纵我们的疯狂想法并相信我们。
|
今天很可能是我职业生涯中最激动人心的一天。我想感谢我们的团队和所有帮助过我们的人,放纵我们的疯狂想法并相信我们。
|
||||||
|
|
||||||
现在访问[https://pulumi.io](https://pulumi.io/),或者直接运行:
|
现在访问 [Pulumi 官方文档](https://www.pulumi.com/docs/index.html)或者直接运行:
|
||||||
|
|
||||||
```bash
|
```
|
||||||
$ curl -fsSL https://get.pulumi.com | sh
|
$ curl -fsSL https://get.pulumi.com | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
我迫不及待想看看你将使用Pulumi构建的所有令人难以置信的东西。
|
我迫不及待想看看你将使用 Pulumi 构建的所有令人难以置信的东西。
|
||||||
|
|
||||||
## 参考
|
## 参考
|
||||||
|
|
||||||
- [Pulumi](https://pulumi.io)
|
- [Pulumi 官网 - pulumi.com](https://www.pulumi.com/)
|
||||||
- [Hello, Pulumi!](http://joeduffyblog.com/2018/06/18/hello-pulumi/)
|
- [Hello, Pulumi! - joeduffyblog.com](http://joeduffyblog.com/2018/06/18/hello-pulumi/)
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# Multi-Cluster Services API(多集群服务 API)
|
# 多集群服务 API(Multi-Cluster Services API)
|
||||||
|
|
||||||
2020 年初,Kubernetes 社区提议 [Multi-Cluster Services API](https://docs.google.com/document/d/1hFtp8X7dzVS-JbfA5xuPvI_DNISctEbJSorFnY-nz6o/edit#heading=h.u7jfy9wqpd2b),旨在解决长久以来就存在的 Kubernetes 多集群服务管理问题。
|
2020 年初,Kubernetes 社区提议 [Multi-Cluster Services API](https://docs.google.com/document/d/1hFtp8X7dzVS-JbfA5xuPvI_DNISctEbJSorFnY-nz6o/edit#heading=h.u7jfy9wqpd2b),旨在解决长久以来就存在的 Kubernetes 多集群服务管理问题。
|
||||||
|
|
||||||
K8s用户可能希望将他们的部署分成多个集群,但仍然保留在这些集群中运行的工作负载之间的相互依赖关系,这有[很多原因](http://bit.ly/k8s-multicluster-conversation-starter-doc)。今天,集群是一个硬边界,一个服务对远程的K8s消费者来说是不透明的,否则就可以利用元数据(如端点拓扑结构)来更好地引导流量。为了支持故障转移或在迁移过程中的临时性,用户可能希望消费分布在各集群中的服务,但今天这需要非复杂的定制解决方案。
|
Kubernetes 用户可能希望将他们的部署分成多个集群,但仍然保留在这些集群中运行的工作负载之间的相互依赖关系,这有[很多原因](https://docs.google.com/document/d/1G1lfIukib7Fy_LpLUoHZPhcZ5T-w52D2YT9W1465dtY/edit)。今天,集群是一个硬边界,一个服务对远程的 Kubernetes 消费者来说是不透明的,否则就可以利用元数据(如端点拓扑结构)来更好地引导流量。为了支持故障转移或在迁移过程中的临时性,用户可能希望消费分布在各集群中的服务,但今天这需要非复杂的定制解决方案。
|
||||||
|
|
||||||
多集群服务API旨在解决这些问题。
|
多集群服务 API 旨在解决这些问题。
|
||||||
|
|
||||||
## 参考
|
## 参考
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
## 什么是多集群?
|
## 什么是多集群?
|
||||||
|
|
||||||
多集群是一种在多个Kubernetes集群上或跨集群部署应用的策略,目的是提高可用性、隔离性和可扩展性。多集群对于确保遵守不同的和相互冲突的法规非常重要,因为单个集群可以进行调整,以遵守特定地域或认证的法规。软件交付的速度和安全性也可以提高,单个开发团队将应用程序部署到隔离的集群中,并有选择地暴露哪些服务可用于测试和发布。
|
多集群是一种在多个 Kubernetes 集群上或跨集群部署应用的策略,目的是提高可用性、隔离性和可扩展性。多集群对于确保遵守不同的和相互冲突的法规非常重要,因为单个集群可以进行调整,以遵守特定地域或认证的法规。软件交付的速度和安全性也可以提高,单个开发团队将应用程序部署到隔离的集群中,并有选择地暴露哪些服务可用于测试和发布。
|
||||||
|
|
||||||
## 配置多集群访问
|
## 配置多集群访问
|
||||||
|
|
||||||
|
@ -12,9 +12,9 @@
|
||||||
|
|
||||||
## 集群联邦
|
## 集群联邦
|
||||||
|
|
||||||
集群联邦(Federation)是指通过 Federation API 资源来统一管理多个集群的资源,如定义 Deployment 如何部署到不同集群上,其集群所需的副本数等。这些集群可能位于不同的可用区、地区或者供应商。实施集群联邦一般是为了达到以下目的:
|
集群联邦(Federation)是指通过 Federation API 资源来统一管理多个集群的资源,如定义 Deployment 如何部署到不同集群上,及其所需的副本数等。这些集群可能位于不同的可用区、地区或者供应商。实施集群联邦一般是为了达到以下目的:
|
||||||
|
|
||||||
- 简化管理多个集群的 Kubernetes 组件 (如 Deployment、Service 等;
|
- 简化管理多个集群的 Kubernetes 组件 (如 Deployment、Service 等);
|
||||||
- 在多个集群之间分散工作负载(Pod),以提升应用(服务)的可靠性;
|
- 在多个集群之间分散工作负载(Pod),以提升应用(服务)的可靠性;
|
||||||
- 跨集群的资源编排,依据编排策略在多个集群进行应用(服务)部署;
|
- 跨集群的资源编排,依据编排策略在多个集群进行应用(服务)部署;
|
||||||
- 在不同集群中,能更快速更容易地迁移应用(服务);
|
- 在不同集群中,能更快速更容易地迁移应用(服务);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Persistent Volume(持久化卷)
|
# 持久化卷(Persistent Volume)
|
||||||
|
|
||||||
本文档介绍了 Kubernetes 中 `PersistentVolume` 的当前状态。建议您在阅读本文档前先熟悉 [volume](https://kubernetes.io/docs/concepts/storage/volumes/)。
|
本文档介绍了 Kubernetes 中 `PersistentVolume` 的当前状态。建议您在阅读本文档前先熟悉 [volume](https://kubernetes.io/docs/concepts/storage/volumes/)。
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# QoS(服务质量等级)
|
# 服务质量等级(QoS)
|
||||||
|
|
||||||
QoS(Quality of Service),大部分译为“服务质量等级”,又译作“服务质量保证”,是作用在 Pod 上的一个配置,当 Kubernetes 创建一个 Pod 时,它就会给这个 Pod 分配一个 QoS 等级,可以是以下等级之一:
|
QoS(Quality of Service),大部分译为“服务质量等级”,又译作“服务质量保证”,是作用在 Pod 上的一个配置,当 Kubernetes 创建一个 Pod 时,它就会给这个 Pod 分配一个 QoS 等级,可以是以下等级之一:
|
||||||
|
|
||||||
|
@ -38,4 +38,4 @@ spec:
|
||||||
|
|
||||||
## 参考
|
## 参考
|
||||||
|
|
||||||
- [Configure Quality of Service for Pods](https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/)
|
- [配置 Pod 的服务质量 - kubernetes.io](https://kubernetes.io/zh/docs/tasks/configure-pod-container/quality-service-pod/)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# RBAC—— 基于角色的访问控制
|
# 基于角色的访问控制(RBAC)
|
||||||
|
|
||||||
基于角色的访问控制(Role-Based Access Control, 即”RBAC”)使用”rbac.authorization.k8s.io” API Group 实现授权决策,允许管理员通过 Kubernetes API 动态配置策略。
|
**注意:本文基于 Kubernetes 1.6 撰写,当时 RBAC 模式处于 beta 版本。**
|
||||||
|
|
||||||
截至 Kubernetes 1.6,RBAC 模式处于 beta 版本。
|
基于角色的访问控制(Role-Based Access Control,即”RBAC”)使用 `rbac.authorization.k8s.io` API Group 实现授权决策,允许管理员通过 Kubernetes API 动态配置策略。
|
||||||
|
|
||||||
要启用 RBAC,请使用 `--authorization-mode=RBAC` 启动 API Server。
|
要启用 RBAC,请使用 `--authorization-mode=RBAC` 启动 API Server。
|
||||||
|
|
||||||
|
@ -573,3 +573,7 @@ kubectl create clusterrolebinding permissive-binding \
|
||||||
--user=kubelet \
|
--user=kubelet \
|
||||||
--group=system:serviceaccounts
|
--group=system:serviceaccounts
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 参考
|
||||||
|
|
||||||
|
- [使用 RBAC 鉴权 - kubernetes.io](https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/)
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 86 KiB |
Binary file not shown.
After Width: | Height: | Size: 37 KiB |
|
@ -1,4 +1,4 @@
|
||||||
# OPA(开放策略代理)
|
# 开放策略代理(OPA)
|
||||||
|
|
||||||
OPA,全称 Open Policy Agent(开放策略代理),2016 年开源,目前已是 CNCF 中的毕业项目。官网是 [openpolicyagent.org](https://www.openpolicyagent.org/)。
|
OPA,全称 Open Policy Agent(开放策略代理),2016 年开源,目前已是 CNCF 中的毕业项目。官网是 [openpolicyagent.org](https://www.openpolicyagent.org/)。
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# 使用Prometheus监控kubernetes集群
|
# 使用 Prometheus 监控 Kubernetes 集群
|
||||||
|
|
||||||
我们使用 Giantswarm 开源的 [kubernetes-promethues](https://github.com/giantswarm/kubernetes-prometheus) 来监控 kubernetes 集群,所有的 YAML 文件可以在 [../manifests/prometheus](https://github.com/rootsongjc/kubernetes-handbook/blob/master/manifests/prometheus) 目录下找到。
|
我们使用 Giantswarm 开源的 [kubernetes-promethues](https://github.com/giantswarm/kubernetes-prometheus) 来监控 kubernetes 集群,所有的 YAML 文件可以在 [../manifests/prometheus](https://github.com/rootsongjc/kubernetes-handbook/blob/master/manifests/prometheus) 目录下找到。
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue