diff --git a/SUMMARY.md b/SUMMARY.md index 55bb69b7f..1a3f78bb1 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -10,55 +10,61 @@ * [云原生的设计哲学](cloud-native/cloud-native-philosophy.md) * [Play with Kubernetes](cloud-native/play-with-kubernetes.md) * [快速部署一个云原生本地实验环境](cloud-native/cloud-native-local-quick-start.md) -* [使用Rancher在阿里云上部署Kubenretes集群](cloud-native/setup-kubernetes-with-rancher-and-aliyun.md) -* [Kubernetes与云原生应用概览](cloud-native/kubernetes-and-cloud-native-app-overview.md) -* [云原生应用之路——从Kubernetes到Cloud Native](cloud-native/from-kubernetes-to-cloud-native.md) +* [使用 Rancher 在阿里云上部署 Kubenretes 集群](cloud-native/setup-kubernetes-with-rancher-and-aliyun.md) +* [Kubernetes 与云原生应用概览](cloud-native/kubernetes-and-cloud-native-app-overview.md) +* [云原生应用之路 —— 从 Kubernetes 到 Cloud Native](cloud-native/from-kubernetes-to-cloud-native.md) * [云原生编程语言](cloud-native/cloud-native-programming-languages.md) - * [云原生编程语言Ballerina](cloud-native/cloud-native-programming-language-ballerina.md) - * [云原生编程语言Pulumi](cloud-native/cloud-native-programming-language-pulumi.md) + * [云原生编程语言 Ballerina](cloud-native/cloud-native-programming-language-ballerina.md) + * [云原生编程语言 Pulumi](cloud-native/cloud-native-programming-language-pulumi.md) * [云原生的未来](cloud-native/the-future-of-cloud-native.md) +* [定义云原生应用](cloud-native/define-cloud-native-app.md) + * [Workload](cloud-native/workload.md) + * [Component](cloud-native/component.md) + * [Trait](cloud-native/trait.md) + * [Application Scope](cloud-native/application-scope.md) + * [Application Configuration](cloud-native/application-configuration.md) ## 概念与原理 -* [Kubernetes架构](concepts/index.md) +* [Kubernetes 架构](concepts/index.md) * [设计理念](concepts/concepts.md) - * [Etcd解析](concepts/etcd.md) + * [Etcd 解析](concepts/etcd.md) * [开放接口](concepts/open-interfaces.md) * [CRI - Container Runtime Interface(容器运行时接口)](concepts/cri.md) * [CNI - Container Network Interface(容器网络接口)](concepts/cni.md) * [CSI - Container Storage Interface(容器存储接口)](concepts/csi.md) -* [Kubernetes中的网络](concepts/networking.md) - * [Kubernetes中的网络解析——以flannel为例](concepts/flannel.md) - * [Kubernetes中的网络解析——以calico为例](concepts/calico.md) - * [具备API感知的网络和安全性管理开源软件Cilium](concepts/cilium.md) - * [Cilium架构设计与概念解析](concepts/cilium-concepts.md) +* [Kubernetes 中的网络](concepts/networking.md) + * [Kubernetes 中的网络解析 —— 以 flannel 为例](concepts/flannel.md) + * [Kubernetes 中的网络解析 —— 以 calico 为例](concepts/calico.md) + * [具备 API 感知的网络和安全性管理开源软件 Cilium](concepts/cilium.md) + * [Cilium 架构设计与概念解析](concepts/cilium-concepts.md) * [资源对象与基本概念解析](concepts/objects.md) -* [Pod状态与生命周期管理](concepts/pod-state-and-lifecycle.md) - * [Pod概览](concepts/pod-overview.md) - * [Pod解析](concepts/pod.md) - * [Init容器](concepts/init-containers.md) - * [Pause容器](concepts/pause-container.md) - * [Pod安全策略](concepts/pod-security-policy.md) - * [Pod的生命周期](concepts/pod-lifecycle.md) +* [Pod 状态与生命周期管理](concepts/pod-state-and-lifecycle.md) + * [Pod 概览](concepts/pod-overview.md) + * [Pod 解析](concepts/pod.md) + * [Init 容器](concepts/init-containers.md) + * [Pause 容器](concepts/pause-container.md) + * [Pod 安全策略](concepts/pod-security-policy.md) + * [Pod 的生命周期](concepts/pod-lifecycle.md) * [Pod Hook](concepts/pod-hook.md) * [Pod Preset](concepts/pod-preset.md) - * [Pod中断与PDB(Pod中断预算)](concepts/pod-disruption-budget.md) + * [Pod 中断与 PDB(Pod 中断预算)](concepts/pod-disruption-budget.md) * [集群资源管理](concepts/cluster.md) * [Node](concepts/node.md) * [Namespace](concepts/namespace.md) * [Label](concepts/label.md) * [Annotation](concepts/annotation.md) - * [Taint和Toleration(污点和容忍)](concepts/taint-and-toleration.md) + * [Taint 和 Toleration(污点和容忍)](concepts/taint-and-toleration.md) * [垃圾收集](concepts/garbage-collection.md) * [控制器](concepts/controllers.md) * [Deployment](concepts/deployment.md) * [StatefulSet](concepts/statefulset.md) * [DaemonSet](concepts/daemonset.md) - * [ReplicationController和ReplicaSet](concepts/replicaset.md) + * [ReplicationController 和 ReplicaSet](concepts/replicaset.md) * [Job](concepts/job.md) * [CronJob](concepts/cronjob.md) * [Horizontal Pod Autoscaling](concepts/horizontal-pod-autoscaling.md) - * [自定义指标HPA](concepts/custom-metrics-hpa.md) + * [自定义指标 HPA](concepts/custom-metrics-hpa.md) * [准入控制器(Admission Controller)](concepts/admission-controller.md) * [服务发现](concepts/service-discovery.md) * [Service](concepts/service.md) @@ -66,19 +72,19 @@ * [Traefik Ingress Controller](concepts/traefik-ingress-controller.md) * [身份与权限控制](concepts/authentication-and-permission.md) * [ServiceAccount](concepts/serviceaccount.md) - * [RBAC——基于角色的访问控制](concepts/rbac.md) + * [RBAC—— 基于角色的访问控制](concepts/rbac.md) * [NetworkPolicy](concepts/network-policy.md) * [存储](concepts/storage.md) * [Secret](concepts/secret.md) * [ConfigMap](concepts/configmap.md) - * [ConfigMap的热更新](concepts/configmap-hot-update.md) + * [ConfigMap 的热更新](concepts/configmap-hot-update.md) * [Volume](concepts/volume.md) * [Persistent Volume(持久化卷)](concepts/persistent-volume.md) * [Storage Class](concepts/storageclass.md) * [本地持久化存储](concepts/local-persistent-storage.md) * [集群扩展](concepts/extension.md) - * [使用自定义资源扩展API](concepts/custom-resource.md) - * [使用CRD扩展Kubernetes API](concepts/crd.md) + * [使用自定义资源扩展 API](concepts/custom-resource.md) + * [使用 CRD 扩展 Kubernetes API](concepts/crd.md) * [Aggregated API Server](concepts/aggregated-api-server.md) * [APIService](concepts/apiservice.md) * [Service Catalog](concepts/service-catalog.md) @@ -89,66 +95,66 @@ * [用户指南](guide/index.md) * [资源对象配置](guide/resource-configuration.md) - * [配置Pod的liveness和readiness探针](guide/configure-liveness-readiness-probes.md) - * [配置Pod的Service Account](guide/configure-pod-service-account.md) - * [Secret配置](guide/secret-configuration.md) - * [管理namespace中的资源配额](guide/resource-quota-management.md) + * [配置 Pod 的 liveness 和 readiness 探针](guide/configure-liveness-readiness-probes.md) + * [配置 Pod 的 Service Account](guide/configure-pod-service-account.md) + * [Secret 配置](guide/secret-configuration.md) + * [管理 namespace 中的资源配额](guide/resource-quota-management.md) * [命令使用](guide/command-usage.md) - * [Docker用户过渡到kubectl命令行指南](guide/docker-cli-to-kubectl.md) - * [kubectl命令概览](guide/using-kubectl.md) - * [kubectl命令技巧大全](guide/kubectl-cheatsheet.md) - * [使用etcdctl访问kubernetes数据](guide/using-etcdctl-to-access-kubernetes-data.md) + * [Docker 用户过渡到 kubectl 命令行指南](guide/docker-cli-to-kubectl.md) + * [kubectl 命令概览](guide/using-kubectl.md) + * [kubectl 命令技巧大全](guide/kubectl-cheatsheet.md) + * [使用 etcdctl 访问 kubernetes 数据](guide/using-etcdctl-to-access-kubernetes-data.md) * [集群安全性管理](guide/cluster-security-management.md) - * [管理集群中的TLS](guide/managing-tls-in-a-cluster.md) - * [kubelet的认证授权](guide/kubelet-authentication-authorization.md) + * [管理集群中的 TLS](guide/managing-tls-in-a-cluster.md) + * [kubelet 的认证授权](guide/kubelet-authentication-authorization.md) * [TLS bootstrap](guide/tls-bootstrapping.md) - * [创建用户认证授权的kubeconfig文件](guide/kubectl-user-authentication-authorization.md) - * [IP伪装代理](guide/ip-masq-agent.md) - * [使用kubeconfig或token进行用户身份认证](guide/auth-with-kubeconfig-or-token.md) - * [Kubernetes中的用户与身份认证授权](guide/authentication.md) - * [Kubernetes集群安全性配置最佳实践](guide/kubernetes-security-best-practice.md) -* [访问Kubernetes集群](guide/access-kubernetes-cluster.md) + * [创建用户认证授权的 kubeconfig 文件](guide/kubectl-user-authentication-authorization.md) + * [IP 伪装代理](guide/ip-masq-agent.md) + * [使用 kubeconfig 或 token 进行用户身份认证](guide/auth-with-kubeconfig-or-token.md) + * [Kubernetes 中的用户与身份认证授权](guide/authentication.md) + * [Kubernetes 集群安全性配置最佳实践](guide/kubernetes-security-best-practice.md) +* [访问 Kubernetes 集群](guide/access-kubernetes-cluster.md) * [访问集群](guide/access-cluster.md) - * [使用kubeconfig文件配置跨集群认证](guide/authenticate-across-clusters-kubeconfig.md) + * [使用 kubeconfig 文件配置跨集群认证](guide/authenticate-across-clusters-kubeconfig.md) * [通过端口转发访问集群中的应用程序](guide/connecting-to-applications-port-forward.md) - * [使用service访问群集中的应用程序](guide/service-access-application-cluster.md) - * [从外部访问Kubernetes中的Pod](guide/accessing-kubernetes-pods-from-outside-of-the-cluster.md) - * [Cabin - Kubernetes手机客户端](guide/cabin-mobile-dashboard-for-kubernetes.md) - * [Kubernetic - Kubernetes桌面客户端](guide/kubernetes-desktop-client.md) - * [Kubernator - 更底层的Kubernetes UI](guide/kubernator-kubernetes-ui.md) -* [在Kubernetes中开发部署应用](guide/application-development-deployment-flow.md) - * [适用于kubernetes的应用开发部署流程](guide/deploy-applications-in-kubernetes.md) - * [迁移传统应用到Kubernetes中——以Hadoop YARN为例](guide/migrating-hadoop-yarn-to-kubernetes.md) - * [使用StatefulSet部署用状态应用](guide/using-statefulset.md) + * [使用 service 访问群集中的应用程序](guide/service-access-application-cluster.md) + * [从外部访问 Kubernetes 中的 Pod](guide/accessing-kubernetes-pods-from-outside-of-the-cluster.md) + * [Cabin - Kubernetes 手机客户端](guide/cabin-mobile-dashboard-for-kubernetes.md) + * [Kubernetic - Kubernetes 桌面客户端](guide/kubernetes-desktop-client.md) + * [Kubernator - 更底层的 Kubernetes UI](guide/kubernator-kubernetes-ui.md) +* [在 Kubernetes 中开发部署应用](guide/application-development-deployment-flow.md) + * [适用于 kubernetes 的应用开发部署流程](guide/deploy-applications-in-kubernetes.md) + * [迁移传统应用到 Kubernetes 中 —— 以 Hadoop YARN 为例](guide/migrating-hadoop-yarn-to-kubernetes.md) + * [使用 StatefulSet 部署用状态应用](guide/using-statefulset.md) ## 最佳实践 * [最佳实践概览](practice/index.md) -* [在CentOS上部署Kubernetes集群](practice/install-kubernetes-on-centos.md) - * [创建TLS证书和秘钥](practice/create-tls-and-secret-key.md) - * [创建kubeconfig文件](practice/create-kubeconfig.md) - * [创建高可用etcd集群](practice/etcd-cluster-installation.md) - * [安装kubectl命令行工具](practice/kubectl-installation.md) - * [部署master节点](practice/master-installation.md) - * [安装flannel网络插件](practice/flannel-installation.md) - * [部署node节点](practice/node-installation.md) - * [安装kubedns插件](practice/kubedns-addon-installation.md) - * [安装dashboard插件](practice/dashboard-addon-installation.md) - * [安装heapster插件](practice/heapster-addon-installation.md) - * [安装EFK插件](practice/efk-addon-installation.md) -* [生产级的Kubernetes简化管理工具kubeadm](practice/install-kubernetes-with-kubeadm.md) - * [使用kubeadm在Ubuntu Server 16.04上快速构建测试集群](practice/install-kubernetes-on-ubuntu-server-16.04-with-kubeadm.md) +* [在 CentOS 上部署 Kubernetes 集群](practice/install-kubernetes-on-centos.md) + * [创建 TLS 证书和秘钥](practice/create-tls-and-secret-key.md) + * [创建 kubeconfig 文件](practice/create-kubeconfig.md) + * [创建高可用 etcd 集群](practice/etcd-cluster-installation.md) + * [安装 kubectl 命令行工具](practice/kubectl-installation.md) + * [部署 master 节点](practice/master-installation.md) + * [安装 flannel 网络插件](practice/flannel-installation.md) + * [部署 node 节点](practice/node-installation.md) + * [安装 kubedns 插件](practice/kubedns-addon-installation.md) + * [安装 dashboard 插件](practice/dashboard-addon-installation.md) + * [安装 heapster 插件](practice/heapster-addon-installation.md) + * [安装 EFK 插件](practice/efk-addon-installation.md) +* [生产级的 Kubernetes 简化管理工具 kubeadm](practice/install-kubernetes-with-kubeadm.md) + * [使用 kubeadm 在 Ubuntu Server 16.04 上快速构建测试集群](practice/install-kubernetes-on-ubuntu-server-16.04-with-kubeadm.md) * [服务发现与负载均衡](practice/service-discovery-and-loadbalancing.md) - * [安装Traefik ingress](practice/traefik-ingress-installation.md) + * [安装 Traefik ingress](practice/traefik-ingress-installation.md) * [分布式负载测试](practice/distributed-load-test.md) * [网络和集群性能测试](practice/network-and-cluster-perfermance-test.md) * [边缘节点配置](practice/edge-node-configuration.md) - * [安装Nginx ingress](practice/nginx-ingress-installation.md) - * [安装配置DNS](practice/dns-installation.md) - * [安装配置Kube-dns](practice/configuring-dns.md) - * [安装配置CoreDNS](practice/coredns.md) + * [安装 Nginx ingress](practice/nginx-ingress-installation.md) + * [安装配置 DNS](practice/dns-installation.md) + * [安装配置 Kube-dns](practice/configuring-dns.md) + * [安装配置 CoreDNS](practice/coredns.md) * [运维管理](practice/operation.md) - * [Master节点高可用](practice/master-ha.md) + * [Master 节点高可用](practice/master-ha.md) * [服务滚动升级](practice/service-rolling-update.md) * [应用日志收集](practice/app-log-collection.md) * [配置最佳实践](practice/configuration-best-practice.md) @@ -158,76 +164,76 @@ * [集群联邦](practice/federation.md) * [存储管理](practice/storage.md) * [GlusterFS](practice/glusterfs.md) - * [使用GlusterFS做持久化存储](practice/using-glusterfs-for-persistent-storage.md) - * [使用Heketi作为Kubernetes的持久存储GlusterFS的external provisioner](practice/using-heketi-gluster-for-persistent-storage.md) - * [在OpenShift中使用GlusterFS做持久化存储](practice/storage-for-containers-using-glusterfs-with-openshift.md) + * [使用 GlusterFS 做持久化存储](practice/using-glusterfs-for-persistent-storage.md) + * [使用 Heketi 作为 Kubernetes 的持久存储 GlusterFS 的 external provisioner](practice/using-heketi-gluster-for-persistent-storage.md) + * [在 OpenShift 中使用 GlusterFS 做持久化存储](practice/storage-for-containers-using-glusterfs-with-openshift.md) * [GlusterD-2.0](practice/glusterd-2.0.md) * [Ceph](practice/ceph.md) - * [用Helm托管安装Ceph集群并提供后端存储](practice/ceph-helm-install-guide-zh.md) - * [使用Ceph做持久化存储](practice/using-ceph-for-persistent-storage.md) - * [使用rbd-provisioner提供rbd持久化存储](practice/rbd-provisioner.md) + * [用 Helm 托管安装 Ceph 集群并提供后端存储](practice/ceph-helm-install-guide-zh.md) + * [使用 Ceph 做持久化存储](practice/using-ceph-for-persistent-storage.md) + * [使用 rbd-provisioner 提供 rbd 持久化存储](practice/rbd-provisioner.md) * [OpenEBS](practice/openebs.md) - * [使用OpenEBS做持久化存储](practice/using-openebs-for-persistent-storage.md) + * [使用 OpenEBS 做持久化存储](practice/using-openebs-for-persistent-storage.md) * [Rook](practice/rook.md) * [NFS](practice/nfs.md) - * [利用NFS动态提供Kubernetes后端存储卷](practice/using-nfs-for-persistent-storage.md) + * [利用 NFS 动态提供 Kubernetes 后端存储卷](practice/using-nfs-for-persistent-storage.md) * [集群与应用监控](practice/monitoring.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监控kubernetes集群](practice/using-prometheus-to-monitor-kuberentes-cluster.md) - * [Prometheus查询语言PromQL使用说明](practice/promql.md) - * [使用Vistio监控Istio服务网格中的流量](practice/vistio-visualize-your-istio-mesh.md) + * [使用 Prometheus 监控 kubernetes 集群](practice/using-prometheus-to-monitor-kuberentes-cluster.md) + * [Prometheus 查询语言 PromQL 使用说明](practice/promql.md) + * [使用 Vistio 监控 Istio 服务网格中的流量](practice/vistio-visualize-your-istio-mesh.md) * [分布式跟踪](practice/distributed-tracing.md) * [OpenTracing](practice/opentracing.md) * [服务编排管理](practice/services-management-tool.md) - * [使用Helm管理Kubernetes应用](practice/helm.md) - * [构建私有Chart仓库](practice/create-private-charts-repo.md) + * [使用 Helm 管理 Kubernetes 应用](practice/helm.md) + * [构建私有 Chart 仓库](practice/create-private-charts-repo.md) * [持续集成与发布](practice/ci-cd.md) - * [使用Jenkins进行持续集成与发布](practice/jenkins-ci-cd.md) - * [使用Drone进行持续集成与发布](practice/drone-ci-cd.md) + * [使用 Jenkins 进行持续集成与发布](practice/jenkins-ci-cd.md) + * [使用 Drone 进行持续集成与发布](practice/drone-ci-cd.md) * [更新与升级](practice/update-and-upgrade.md) - * [手动升级Kubernetes集群](practice/manually-upgrade.md) - * [升级dashboard](practice/dashboard-upgrade.md) + * [手动升级 Kubernetes 集群](practice/manually-upgrade.md) + * [升级 dashboard](practice/dashboard-upgrade.md) ## 领域应用 * [领域应用概览](usecases/index.md) * [微服务架构](usecases/microservices.md) * [微服务中的服务发现](usecases/service-discovery-in-microservices.md) - * [使用Java构建微服务并发布到Kubernetes平台](usecases/microservices-for-java-developers.md) - * [Spring Boot快速开始指南](usecases/spring-boot-quick-start-guide.md) + * [使用 Java 构建微服务并发布到 Kubernetes 平台](usecases/microservices-for-java-developers.md) + * [Spring Boot 快速开始指南](usecases/spring-boot-quick-start-guide.md) * [Service Mesh 服务网格](usecases/service-mesh.md) * [企业级服务网格架构](usecases/the-enterprise-path-to-service-mesh-architectures.md) - * [Service Mesh基础](usecases/service-mesh-fundamental.md) - * [Service Mesh技术对比](usecases/comparing-service-mesh-technologies.md) + * [Service Mesh 基础](usecases/service-mesh-fundamental.md) + * [Service Mesh 技术对比](usecases/comparing-service-mesh-technologies.md) * [采纳和演进](usecases/service-mesh-adoption-and-evolution.md) * [定制和集成](usecases/service-mesh-customization-and-integration.md) * [总结](usecases/service-mesh-conclusion.md) * [Istio](usecases/istio.md) - * [安装并试用Istio service mesh](usecases/istio-installation.md) - * [Istio中sidecar的注入规范及示例](usecases/sidecar-spec-in-istio.md) - * [如何参与Istio社区及注意事项](usecases/istio-community-tips.md) - * [Istio免费学习资源汇总](usecases/istio-tutorials-collection.md) - * [Sidecar的注入与流量劫持](usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.md) - * [Envoy Sidecar代理的路由转发](usecases/envoy-sidecar-routing-of-istio-service-mesh-deep-dive.md) + * [安装并试用 Istio service mesh](usecases/istio-installation.md) + * [Istio 中 sidecar 的注入规范及示例](usecases/sidecar-spec-in-istio.md) + * [如何参与 Istio 社区及注意事项](usecases/istio-community-tips.md) + * [Istio 免费学习资源汇总](usecases/istio-tutorials-collection.md) + * [Sidecar 的注入与流量劫持](usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.md) + * [Envoy Sidecar 代理的路由转发](usecases/envoy-sidecar-routing-of-istio-service-mesh-deep-dive.md) * [Linkerd](usecases/linkerd.md) * [Linkerd 使用指南](usecases/linkerd-user-guide.md) * [Conduit](usecases/conduit.md) - * [Condiut概览](usecases/conduit-overview.md) - * [安装Conduit](usecases/conduit-installation.md) + * [Condiut 概览](usecases/conduit-overview.md) + * [安装 Conduit](usecases/conduit-installation.md) * [Envoy](usecases/envoy.md) - * [Envoy的架构与基本术语](usecases/envoy-terminology.md) - * [Envoy作为前端代理](usecases/envoy-front-proxy.md) - * [Envoy mesh教程](usecases/envoy-mesh-in-kubernetes-tutorial.md) + * [Envoy 的架构与基本术语](usecases/envoy-terminology.md) + * [Envoy 作为前端代理](usecases/envoy-front-proxy.md) + * [Envoy mesh 教程](usecases/envoy-mesh-in-kubernetes-tutorial.md) * [MOSN](usecases/mosn.md) * [大数据](usecases/big-data.md) * [Spark standalone on Kubernetes](usecases/spark-standalone-on-kubernetes.md) - * [运行支持Kubernetes原生调度的Spark程序](usecases/running-spark-with-kubernetes-native-scheduler.md) -* [Serverless架构](usecases/serverless.md) - * [理解Serverless](usecases/understanding-serverless.md) + * [运行支持 Kubernetes 原生调度的 Spark 程序](usecases/running-spark-with-kubernetes-native-scheduler.md) +* [Serverless 架构](usecases/serverless.md) + * [理解 Serverless](usecases/understanding-serverless.md) * [FaaS(函数即服务)](usecases/faas.md) - * [OpenFaaS快速入门指南](usecases/openfaas-quick-start.md) + * [OpenFaaS 快速入门指南](usecases/openfaas-quick-start.md) * [Knative](usecases/knative.md) * [云原生应用标准](usecases/cloud-native-app-standard.md) * [OAM(开放应用模型)](usecases/oam.md) @@ -237,11 +243,11 @@ ## 开发指南 * [开发指南概览](develop/index.md) -* [SIG和工作组](develop/sigs-and-working-group.md) +* [SIG 和工作组](develop/sigs-and-working-group.md) * [开发环境搭建](develop/developing-environment.md) - * [本地分布式开发环境搭建(使用Vagrant和Virtualbox)](develop/using-vagrant-and-virtualbox-for-development.md) + * [本地分布式开发环境搭建(使用 Vagrant 和 Virtualbox)](develop/using-vagrant-and-virtualbox-for-development.md) * [单元测试和集成测试](develop/testing.md) -* [client-go示例](develop/client-go-sample.md) +* [client-go 示例](develop/client-go-sample.md) * [Operator](develop/operator.md) * [operator-sdk](develop/operator-sdk.md) * [kubebuilder](develop/kubebuilder.md) @@ -253,34 +259,34 @@ ## CNCF(云原生计算基金会) * [CNCF - 云原生计算基金会简介](cloud-native/cncf.md) -* [CNCF章程](cloud-native/cncf-charter.md) -* [CNCF特别兴趣小组(SIG)说明](cloud-native/cncf-sig.md) -* [开源项目加入CNCF Sandbox的要求](cloud-native/cncf-sandbox-criteria.md) -* [CNCF中的项目治理](cloud-native/cncf-project-governing.md) +* [CNCF 章程](cloud-native/cncf-charter.md) +* [CNCF 特别兴趣小组(SIG)说明](cloud-native/cncf-sig.md) +* [开源项目加入 CNCF Sandbox 的要求](cloud-native/cncf-sandbox-criteria.md) +* [CNCF 中的项目治理](cloud-native/cncf-project-governing.md) * [CNCF Ambassador](cloud-native/cncf-ambassador.md) ## 附录 * [附录说明](appendix/index.md) -* [Kubernetes中的应用故障排查](appendix/debug-kubernetes-services.md) -* [Kubernetes相关资讯和情报链接](appendix/material-share.md) -* [Docker最佳实践](appendix/docker-best-practice.md) +* [Kubernetes 中的应用故障排查](appendix/debug-kubernetes-services.md) +* [Kubernetes 相关资讯和情报链接](appendix/material-share.md) +* [Docker 最佳实践](appendix/docker-best-practice.md) * [使用技巧](appendix/tricks.md) * [问题记录](appendix/issues.md) -* [Kubernetes版本更新日志](appendix/kubernetes-changelog.md) - * [Kubernetes1.7更新日志](appendix/kubernetes-1.7-changelog.md) - * [Kubernetes1.8更新日志](appendix/kubernetes-1.8-changelog.md) - * [Kubernetes1.9更新日志](appendix/kubernetes-1.9-changelog.md) - * [Kubernetes1.10更新日志](appendix/kubernetes-1.10-changelog.md) - * [Kubernetes1.11更新日志](appendix/kubernetes-1.11-changelog.md) - * [Kubernetes1.12更新日志](appendix/kubernetes-1.12-changelog.md) - * [Kubernetes1.13更新日志](appendix/kubernetes-1.13-changelog.md) - * [Kubernetes1.14更新日志](appendix/kubernetes-1.14-changelog.md) - * [Kubernetes1.15更新日志](appendix/kubernetes-1.15-changelog.md) -* [Kubernetes及云原生年度总结及展望](appendix/summary-and-outlook.md) - * [Kubernetes与云原生2017年年终总结及2018年展望](appendix/kubernetes-and-cloud-native-summary-in-2017-and-outlook-for-2018.md) - * [Kubernetes与云原生2018年年终总结及2019年展望](appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.md) -* [CNCF年度报告解读](appendix/cncf-annual-report.md) - * [CNCF 2018年年度报告解读](appendix/cncf-annual-report-2018.md) -* [Kubernetes认证服务提供商(KCSP)说明](appendix/about-kcsp.md) -* [认证Kubernetes管理员(CKA)说明](appendix/about-cka-candidate.md) +* [Kubernetes 版本更新日志](appendix/kubernetes-changelog.md) + * [Kubernetes1.7 更新日志](appendix/kubernetes-1.7-changelog.md) + * [Kubernetes1.8 更新日志](appendix/kubernetes-1.8-changelog.md) + * [Kubernetes1.9 更新日志](appendix/kubernetes-1.9-changelog.md) + * [Kubernetes1.10 更新日志](appendix/kubernetes-1.10-changelog.md) + * [Kubernetes1.11 更新日志](appendix/kubernetes-1.11-changelog.md) + * [Kubernetes1.12 更新日志](appendix/kubernetes-1.12-changelog.md) + * [Kubernetes1.13 更新日志](appendix/kubernetes-1.13-changelog.md) + * [Kubernetes1.14 更新日志](appendix/kubernetes-1.14-changelog.md) + * [Kubernetes1.15 更新日志](appendix/kubernetes-1.15-changelog.md) +* [Kubernetes 及云原生年度总结及展望](appendix/summary-and-outlook.md) + * [Kubernetes 与云原生 2017 年年终总结及 2018 年展望](appendix/kubernetes-and-cloud-native-summary-in-2017-and-outlook-for-2018.md) + * [Kubernetes 与云原生 2018 年年终总结及 2019 年展望](appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.md) +* [CNCF 年度报告解读](appendix/cncf-annual-report.md) + * [CNCF 2018 年年度报告解读](appendix/cncf-annual-report-2018.md) +* [Kubernetes 认证服务提供商(KCSP)说明](appendix/about-kcsp.md) +* [认证 Kubernetes 管理员(CKA)说明](appendix/about-cka-candidate.md) diff --git a/cloud-native/application-configuration.md b/cloud-native/application-configuration.md new file mode 100644 index 000000000..d049f2360 --- /dev/null +++ b/cloud-native/application-configuration.md @@ -0,0 +1,45 @@ +# Application Configuration + +本文基于 OAM v1alpha2 版本。 + +`ApplicationConfiguration` 将 `Component` 与 `Trait` 组合,定义了一个应用程序的配置,`Component` 每部署一次就会产生一个实例(`Instance`),实例是可以被升级的(包括回滚和重新部署),而每次部署和升级就会产生一次新的发布(`Release`)。 + +{{% alert title="关于 Release" color="primary" %}} +[12 因素应用](https://12factor.net/zh_cn/)严格区分[构建、发布、运行](https://12factor.net/zh_cn/build-release-run)这三个步骤。每次构建和修改配置后都会产生一次新的发布(`Release`)。OAM 中将 `Component`、`Trait`、`ApplicaitonScope` 组合而成的 `ApplicationConfiguration` 即等同于 `Release`。每次对 `ApplciationConfiguration` 的更新都会创建一个新的 `Release`(跟 [Helm](https://helm.sh) 中的 `Release` 概念一致)。 +{{% /alert %}} + +下面是一个 `ApplicationConfiguration` 示例。 + +```yaml +apiVersion: core.oam.dev/v1alpha2 +kind: ApplicationConfiguration +metadata: + name: my-app + annotations: + version: v1.0.0 + description: "My first application deployment." +spec: + components: + - componentName: my-component + parameterValues: + - name: PARAMETER_NAME + value: SUPPLIED_VALUE + - name: ANOTHER_PARAMETER + value: "AnotherValue" + traits: + - name: manualscaler.core.oam.dev + version: v1 + spec: + replicaCount: 3 + scopes: + - scopeRef: + apiVersion: core.oam.dev/v1alpha2 + kind: NetworkScope + name: my-network +``` + +关于 `ApplicationConfiguration` 的详细信息参考 OAM 中的 [ApplicationConfiguration 规范](https://github.com/oam-dev/spec/blob/master/7.application_configuration.md)。 + +## 参考 + +- [The Open Application Model specification - github.com](https://github.com/oam-dev/spec) \ No newline at end of file diff --git a/cloud-native/application-scope.md b/cloud-native/application-scope.md new file mode 100644 index 000000000..876150405 --- /dev/null +++ b/cloud-native/application-scope.md @@ -0,0 +1,39 @@ +本文基于 OAM v1alpha2 版本。 + +`ApplicationScope` 根据 `Component` 中的应用逻辑或共同行为划定作用域,将其分组以便于管理。 + +`ApplicationScope` 具有以下特征: + +- 一个 `Component` 可能属于一个或多个 `ApplicationScope`; +- 有的 `ApplicationScope` 可以限定其中是否可以部署同一个 `Component` 的多个实例; +- `ApplicationScope` 可以作为 `Component` 与基础设施的连接层,提供身份、网络或安全能力; +- `Trait` 可以根据 `Component` 中定义的 `ApplicationScope` 来执行适当的运维特性; + +目前 OAM 中支持的核心应用范围类型有 [`NetworkScope`](https://github.com/oam-dev/spec/blob/master/standard/scopes/network_scope.md) 和 [`HealthScope`](https://github.com/oam-dev/spec/blob/master/standard/scopes/health_scope.md)。 + +下面是使用 `NetworkScope` 来声明作用域的示例: + +```yaml +apiVersion: core.oam.dev/v1alpha2 +kind: NetworkScope +metadata: + name: my-network + labels: + region: my-region + environment: production +spec: + networkId: my-network + subnetIds: + - my-subnetwork-01 + - my-subnetwork-02 + - my-subnetwork-03 + internetGatewayType: nat +``` + +上面的示例的作用是将三个子网划定为一组网络边界,这通常是使用 VPC 实现。 + +关于 `ApplicationScope` 的详细信息请参考 OAM 中的 [ApplicationScope 规范](https://github.com/oam-dev/spec/blob/master/5.application_scopes.md)。 + +## 参考 + +- [The Open Application Model specification - github.com](https://github.com/oam-dev/spec) \ No newline at end of file diff --git a/cloud-native/component.md b/cloud-native/component.md new file mode 100644 index 000000000..ee58a8cf9 --- /dev/null +++ b/cloud-native/component.md @@ -0,0 +1,43 @@ +# Component + +本文基于 OAM v1alpha2 版本。 + +`Component` 用于定义应用程序的基本组件,其中包含了对 Workload 的引用,一个 Component 中只能定义一个 Workload,这个 Workload 是与平台无关的,可以直接引用 Kubernetes 中的 CRD。 + +下面是根据 OAM 规范定义的一个 Component 示例。 + +```yaml +apiVersion: core.oam.dev/v1alpha2 +kind: Component +metadata: + name: my-component +spec: + workload: + apiVersion: core.oam.dev/v1alpha2 + kind: ContainerizedWorkload + spec: + os: linux + containers: + - name: server + image: my-image:latest + parameters: + - name: myServerImage + required: true + fieldPaths: + - ".spec.containers[0].image" +``` + +`Component` 定义由以下几个部分组成: + +- `metadata`:关于 Component 的信息,主要是针对应用运维的信息。 +- `workload`:该 Component 的实际工作负载。具体有哪些负载类型可用可以咨询平台提供商,平台运维也可以根据 [Workload 规范](https://github.com/oam-dev/spec/blob/master/3.workload.md) 来扩展负载类型,比如 `Containers`、`Functions`、`VirtualMachine`、[`VirtualService `](https://istio.io/docs/reference/config/networking/virtual-service/) 等。OAM 目前定义的核心负载类型有 [ContainerizedWorkload](https://github.com/oam-dev/spec/blob/master/core/workloads/containerized_workload/containerized_workload.md)(与 Kubernetes 中的 [Pod 定义](https://kubernetes.io/zh/docs/concepts/workloads/pods/pod/)类似,同样支持定义多个容器,但是缺少了 Pod 中的一些属性 )。 +- `parameters`:在应用程序运行时可以调整的参数,即应用开发者在 `Component` 中的原有定义可以在运行时被应用运维人员覆盖。`parameters` 使用 [JSONPath](https://kubernetes.io/zh/docs/reference/kubectl/jsonpath/) 的方式引用 `spec` 中的字段。 + +> `Component` 的配置在应用后是**可更改的(Mutable)**, 有的 [`Trait`](trait.md) 可能会监听 `Component` 的变更并作出相应的操作,每次变更都会导致新的 `ApplicationConfiguration` 发布。 +> + +关于 Component 的详细信息请参考 OAM 中的 [Component 规范](https://github.com/oam-dev/spec/blob/master/4.component.md)。 + +## 参考 + +- [The Open Application Model specification - github.com](https://github.com/oam-dev/spec) \ No newline at end of file diff --git a/cloud-native/define-cloud-native-app.md b/cloud-native/define-cloud-native-app.md new file mode 100644 index 000000000..81b962981 --- /dev/null +++ b/cloud-native/define-cloud-native-app.md @@ -0,0 +1,40 @@ +# 定义云原生应用 + +本文参考的是 [OAM 规范](https://github.com/oam-dev/spec)中对云原生应用的定义,并做出了引申。 + +云原生应用是一个相互关联但又不独立的组件(service、task、worker)的集合,这些组件与配置结合在一起并在适当的运行时实例化后,共同完成统一的功能目的。 + +## 云原生应用模型 + +下图是 OAM 定义的云原生应用模型示意图,为了便于理解,图中相同颜色的部分为同一类别的对象定义。 + +![云原生应用模型](../images/cloud-native-app-model.png) + +OAM 的规范中定义了以下对象,它们既是 OAM 规范中的基本术语也是云原生应用的基本组成。 + +- **[Workload](../spec/workload)(工作负载)**:应用程序的工作负载类型,由平台提供。 +- **[Component](../spec/component)(组件)**:定义了一个 `Workload` 的实例,并以基础设施中立的术语声明其运维特性。 +- **[Trait](../spec/trait)(特征)**:用于将运维特性分配给组件实例。 +- **[ApplicationScope](../spec/application-scope)(应用作用域)**:用于将组件分组成具有共同特性的松散耦合的应用。 +- **[ApplicationConfiguration](../spec/application-configuration)(应用配置)**:描述 `Component` 的部署、`Trait` 和 `ApplicationScope`。 + +OAM 规范中提供了一个使用以上对象定义云原生应用的[工作流示例](https://github.com/oam-dev/spec/blob/master/examples/workflow.md)。 + +## 关注点分离 + +下图是不同角色对于该模型的关注点示意图。 + +![云原生应用模型中的目标角色](../images/roles.png) + +我们可以看到对于一个云原生应用来说,不同的对象是由不同的角色来负责的: + +- 基础设施运维:提供不同的 `Workload` 类型供开发者使用; +- 应用运维:定义适用于不同 `Workload` 的运维属性 `Trait` 和管理 `Component` 的 `ApplicationScope` 即作用域; +- 应用开发者:负责应用组件 `Component` 的定义; +- 应用开发者和运维:共同将 `Component` 与运维属性 `Trait` 绑定在一起,维护应用程序的生命周期; + +基于 OAM 中的对象定义的云原生应用可以充分利用平台能力自由组合,开发者和运维人员的职责可以得到有效分离,组件的复用性得到大幅提高。 + +## 参考 + +- [The Open Application Model specification - github.com](https://github.com/oam-dev/spec) \ No newline at end of file diff --git a/cloud-native/play-with-kubernetes.md b/cloud-native/play-with-kubernetes.md index efff0189b..760b1774e 100644 --- a/cloud-native/play-with-kubernetes.md +++ b/cloud-native/play-with-kubernetes.md @@ -17,19 +17,19 @@ 启动第一个实例作为Master节点,在web终端上执行: -1. 初始化master节点: +**1.** 初始化master节点: ```bash kubeadm init --apiserver-advertise-address $(hostname -i) ``` -2. 初始化集群网络: +**2.** 初始化集群网络: ```bash kubectl apply -n kube-system -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" ``` -3. 执行下列初始化命令: +**3.** 执行下列初始化命令: ```bash mkdir -p $HOME/.kube @@ -37,7 +37,7 @@ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config ``` -4. 启动新的实例作为node节点,根据master节点上的提示,在新的web终端上执行: +**4.** 启动新的实例作为node节点,根据master节点上的提示,在新的web终端上执行: ```bash kubeadm join --token 513212.cfea0165b8988d18 192.168.0.13:6443 --discovery-token-ca-cert-hash sha256:b7b6dcc98f3ead3f9e363cb3928fbc04774ee0d63e8eb2897ae30e05aebf8070 diff --git a/cloud-native/trait.md b/cloud-native/trait.md new file mode 100644 index 000000000..3a0b0ecad --- /dev/null +++ b/cloud-native/trait.md @@ -0,0 +1,43 @@ +# Trait + +本文基于 OAM v1alpha2 版本。 + +`Trait` 用于定义 `Component` 的运维属性,是对 `Component` 运行时的叠加,需要通过 `ApplicationConfiguration` 的配置将其与 `Component` 绑定,用于动态修改 `Component` 中 `workload` 的行为。 + +不同的 `Trait` 可能适用于不同的 `Component`(因为不同的 `Component` 中的 `workload` 可能不同,因此它们的运维特性也可能不同),如流量路由规则(如负载均衡策略、入口路由、出口路由、百分比路由、限流、熔断、超时限制、故障注入等)、自动缩放策略、升级策略、发布策略等。 + +`Trait` 还具有以下几个特征: + +- `Trait` 是根据在 `Component` 中引用的顺序应用的,如果某些运维特征本身具有依赖性,可以通过显式排序来解决; +- 对于某一类型的 `Trait` 在同一个 `Component` 实例只能应用一个; +- 在应用 `Trait` 时,需要进行冲突检查,如果一组 `Trait` 的特性不能满足运维组合,则判定为不合法; + +将运维属性从应用组件本身的定义( `Component`)中剥离有如下几个好处: + +- `Trait` 通常由应用运维人员定义和维护,而不需要应用开发人员参与,应用开发人员对 `Trait` 可能无感知,减轻了应用开发人员的负担; +- `Trait` 将云原生应用程序的一些通用运维属性从应用配置中剥离出来,大大提高了运维逻辑的可复用性; +- 应用 `Trait` 组合前进行运维特性检查,可以有效防止配置冲突和无法预期的情况发生; + +下面是根据 OAM 规范定义的一个 Trait 示例。 + +```yaml +apiVersion: core.oam.dev/v1alpha2 +kind: TraitDefinition +metadata: + name: manualscalertrait.core.oam.dev +spec: + appliesToWorkloads: + - core.oam.dev/v1alpha2.ContainerizedWorkload + definitionRef: + name: manualscalertrait.core.oam.dev +``` + +> CR 即 Custom Resource(自定义资源),指的是实例化后的 Kubernetes [CRD](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/)。`definitionRef` 将 `Trait` shcema 在 OAM 解释器中注册,通过增加一个抽象层,使其与 Operator 框架解耦(毕竟不是说有 CRD 都是面向应用开发者的)。 + +OAM 中将 `Trait` 分成了 `core.oam.dev`(核心)、`standard.oam.dev`(标准)及自定义扩展类别。一个 `Trait` 具体适用于哪些 `workload` 可以在 `Trait` 的 `TraitDefinition` 中定义。目前 OAM 中支持的核心 `Trait` 有 [`ManualScalerTrait`](https://github.com/oam-dev/spec/blob/master/core/traits/manual_scaler_trait.md)。 + +关于 Trait 的详细请参考 OAM 中的 [Trait 规范](https://github.com/oam-dev/spec/blob/master/6.traits.md)。 + +## 参考 + +- [The Open Application Model specification - github.com](https://github.com/oam-dev/spec) \ No newline at end of file diff --git a/cloud-native/workload.md b/cloud-native/workload.md new file mode 100644 index 000000000..61975aaaa --- /dev/null +++ b/cloud-native/workload.md @@ -0,0 +1,29 @@ +# Workload + +本文基于 OAM v1alpha2 版本。 + +应用程序可用的 `Workload` 类型是由平台提供商和基础设施运维人员提供的。`Workload` 模型参照 [Kubernetes 规范](https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#required-fields)定义,理论上,平台商可以定义如容器、Pod、Serverless 函数、虚拟机、数据库、消息队列等任何类型的 `Workload`。 + +下面是一个 `Workload` 定义的是示例。 + +```yaml +apiVersion: core.oam.dev/v1alpha2 +kind: WorkloadDefinition +metadata: + name: schema.example.jimmysong.io +spec: + definitionRef: + name: schema.example.jimmysong.io +``` + +> CR 即 Custom Resource(自定义资源),指的是实例化后的 Kubernetes [CRD](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/)。应用开发者可以在 `Component` 的 `Workload` 中直接定义 CR。`definitionRef` 将 `Workload` shcema 在 OAM 解释器中注册,通过增加一个抽象层,使其与 Operator 框架解耦(毕竟不是说有 CRD 都是面向应用开发者的),表示可作为负载类型使用。 + +请保持 `spec.definitionRef.name` 的值与 `metadata.name` 的值相同,因为 `definitionRef` 是对相应的 `Workload` schema 的引用,对于 Kubernetes 平台来说,即对 [CRD](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) 的引用。应用开发者在定义 [`Component`](component.md) 引用该 `Workload` 的时候需要直接实例化一个 CRD 的配置(及创建一个 CR)。 + +OAM 中将 `Workload` 分成了 `core.oam.dev`(核心)、`standard.oam.dev`(标准)及自定义扩展类别。目前 OAM 中支持的核心 `Workload` 有 [`ContainerizedWorkload`](https://github.com/oam-dev/spec/blob/master/core/workloads/containerized_workload/containerized_workload.md)。 + +关于 Workload 的详细信息参考 OAM 中的 [Workload 规范](https://github.com/oam-dev/spec/blob/master/3.workload.md)。 + +## 参考 + +- [The Open Application Model specification - github.com](https://github.com/oam-dev/spec) \ No newline at end of file diff --git a/images/cloud-native-app-model.png b/images/cloud-native-app-model.png new file mode 100644 index 000000000..a7a09484a Binary files /dev/null and b/images/cloud-native-app-model.png differ diff --git a/images/roles.png b/images/roles.png new file mode 100644 index 000000000..539c30e56 Binary files /dev/null and b/images/roles.png differ