From 53197c1fde6e360abafbb15621d3a63e4ec7698f Mon Sep 17 00:00:00 2001 From: Gergely Csatari Date: Thu, 27 Jun 2024 14:16:35 +0300 Subject: [PATCH 1/6] Adding the first part of the Porch documentation Aadded files were copied from the Porch repository. Signed-off-by: Gergely Csatari --- content/en/docs/porch/_index.md | 24 + content/en/docs/porch/config-as-data.md | 158 +++ .../en/docs/porch/package-orchestration.md | 438 ++++++ content/en/docs/porch/package-variant.md | 1205 +++++++++++++++++ static/images/porch/CaD-Core-Architecture.svg | 1 + static/images/porch/CaD-Overview.svg | 1 + static/images/porch/Porch-Architecture.svg | 1 + static/images/porch/Porch-Inner-Loop.svg | 1 + static/images/porch/packagevariant-clone.png | Bin 0 -> 28004 bytes .../porch/packagevariant-config-injection.png | Bin 0 -> 144272 bytes .../images/porch/packagevariant-context.png | Bin 0 -> 75460 bytes .../images/porch/packagevariant-function.png | Bin 0 -> 124315 bytes static/images/porch/packagevariant-legend.png | Bin 0 -> 24320 bytes ...gevariantset-target-list-with-packages.png | Bin 0 -> 61096 bytes .../porch/packagevariantset-target-list.png | Bin 0 -> 64351 bytes ...packagevariantset-target-repo-selector.png | Bin 0 -> 154461 bytes 16 files changed, 1829 insertions(+) create mode 100644 content/en/docs/porch/_index.md create mode 100644 content/en/docs/porch/config-as-data.md create mode 100644 content/en/docs/porch/package-orchestration.md create mode 100644 content/en/docs/porch/package-variant.md create mode 100644 static/images/porch/CaD-Core-Architecture.svg create mode 100644 static/images/porch/CaD-Overview.svg create mode 100644 static/images/porch/Porch-Architecture.svg create mode 100644 static/images/porch/Porch-Inner-Loop.svg create mode 100644 static/images/porch/packagevariant-clone.png create mode 100644 static/images/porch/packagevariant-config-injection.png create mode 100644 static/images/porch/packagevariant-context.png create mode 100644 static/images/porch/packagevariant-function.png create mode 100644 static/images/porch/packagevariant-legend.png create mode 100644 static/images/porch/packagevariantset-target-list-with-packages.png create mode 100644 static/images/porch/packagevariantset-target-list.png create mode 100644 static/images/porch/packagevariantset-target-repo-selector.png diff --git a/content/en/docs/porch/_index.md b/content/en/docs/porch/_index.md new file mode 100644 index 00000000..7a0b62cb --- /dev/null +++ b/content/en/docs/porch/_index.md @@ -0,0 +1,24 @@ +--- +title: "Porch documentation" +type: docs +weight: 6 +description: Documentation of Porch +--- + +## Overview + + Porch is “kpt-as-a-service”, providing opinionated package management, manipulation, and lifecycle operations in a + Kubernetes-based API. This allows automation of these operations using standard Kubernetes controller techniques. + +Short for Package Orchestration. + +## Porch in the Nephio architecture, history and outlook + +Porch is a key component of the Nephio architecture what was originally developed in the +[kpt](https://github.com/kptdev/kpt) project. When kpt was donated to the [CNCF](https://www.cncf.io/projects/kpt/) it +was decided that Porch will not be part of the code kpt project and the code was donated to Nephio. + +Porch is now mainteined by the Nephio community and it is a stable part of the Nephio R3 architecture, however there is +an active disucssion about the future of the project. It is possible that Porch will be replaced in the Nephio +architecture with a different codebase implementing the same concepts but not in a backward compatible way. Potential +candidates, like [pkgserver](https://docs.pkgserver.dev/) are discussed in the Nephio community. \ No newline at end of file diff --git a/content/en/docs/porch/config-as-data.md b/content/en/docs/porch/config-as-data.md new file mode 100644 index 00000000..11bf7bdd --- /dev/null +++ b/content/en/docs/porch/config-as-data.md @@ -0,0 +1,158 @@ +--- +title: "Configuration as Data" +type: docs +weight: 1 +description: +--- + +## Why + +This document provides background context for Package Orchestration, which is further elaborated in a dedicated +[document](package-orchestration.md). + +## Configuration as Data + +*Configuration as Data* is an approach to management of configuration (incl. +configuration of infrastructure, policy, services, applications, etc.) which: + +* makes configuration data the source of truth, stored separately from the live + state +* uses a uniform, serializable data model to represent configuration +* separates code that acts on the configuration from the data and from packages + / bundles of the data +* abstracts configuration file structure and storage from operations that act + upon the configuration data; clients manipulating configuration data don’t + need to directly interact with storage (git, container images) + +![CaD Overview](/static/images/porch/CaD-Overview.svg) + +## Key Principles + +A system based on CaD *should* observe the following key principles: + +* secrets should be stored separately, in a secret-focused storage system + ([example](https://cloud.google.com/secret-manager)) +* stores a versioned history of configuration changes by change sets to bundles + of related configuration data +* relies on uniformity and consistency of the configuration format, including + type metadata, to enable pattern-based operations on the configuration data, + along the lines of duck typing +* separates schemas for the configuration data from the data, and relies on + schema information for strongly typed operations and to disambiguate data + structures and other variations within the model +* decouples abstractions of configuration from collections of configuration data +* represents abstractions of configuration generators as data with schemas, like + other configuration data +* finds, filters / queries / selects, and/or validates configuration data that + can be operated on by given code (functions) +* finds and/or filters / queries / selects code (functions) that can operate on + resource types contained within a body of configuration data +* *actuation* (reconciliation of configuration data with live state) is separate + from transformation of configuration data, and is driven by the declarative + data model +* transformations, particularly value propagation, are preferable to wholesale + configuration generation except when the expansion is dramatic (say, >10x) +* transformation input generation should usually be decoupled from propagation +* deployment context inputs should be taken from well defined “provider context” + objects +* identifiers and references should be declarative +* live state should be linked back to sources of truth (configuration) + +## KRM CaD + +Our implementation of the Configuration as Data approach ( +[kpt](https://kpt.dev), +[Config Sync](https://cloud.google.com/anthos-config-management/docs/config-sync-overview), +and [Package Orchestration](https://github.com/nephio-project/porch)) +build on the foundation of +[Kubernetes Resource Model](https://github.com/kubernetes/design-proposals-archive/blob/main/architecture/resource-management.md) +(KRM). + +{{% alert title="Note" color="primary" %}} + +Even though KRM is not a requirement of Config as Data (just like +Python or Go templates or Jinja are not specifically requirements for +[IaC](https://en.wikipedia.org/wiki/Infrastructure_as_code)), the choice of +another foundational config representation format would necessitate +implementing adapters for all types of infrastructure and applications +configured, including Kubernetes, CRDs, GCP resources and more. Likewise, choice +of another configuration format would require redesign of a number of the +configuration management mechanisms that have already been designed for KRM, +such as 3-way merge, structural merge patch, schema descriptions, resource +metadata, references, status conventions, etc. + +{{% /alert %}} + + +**KRM CaD** is therefore a specific approach to implementing *Configuration as Data* which: + +* uses [KRM](https://github.com/kubernetes/design-proposals-archive/blob/main/architecture/resource-management.md) + as the configuration serialization data model +* uses [Kptfile](https://kpt.dev/reference/schema/kptfile/) to store package metadata +* uses [ResourceList](https://kpt.dev/reference/schema/resource-list/) as a serialized package wire-format +* uses a function `ResourceList → ResultList` (`kpt` function) as the foundational, composable unit of + package-manipulation code (note that other forms of code can manipulate packages as well, i.e. UIs, custom algorithms + not necessarily packaged and used as kpt functions) + +and provides the following basic functionality: + +* load a serialized package from a repository (as `ResourceList`) (examples of repository may be one or more of: local + HDD, Git repository, OCI, Cloud Storage, etc.) +* save a serialized package (as `ResourceList`) to a package repository +* evaluate a function on a serialized package (`ResourceList`) +* [render](https://kpt.dev/book/04-using-functions/01-declarative-function-execution) a package (evaluate functions + declared within the package itself) +* create a new (empty) package +* fork (or clone) an existing package from one package repository (called upstream) to another (called downstream) +* delete a package from a repository +* associate a version with the package; guarantee immutability of packages with an assigned version +* incorporate changes from the new version of an upstream package into a new version of a downstream package +* revert to a prior version of a package + +## Value + +The Config as Data approach enables some key value which is available in other +configuration management approaches to a lesser extent or is not available +at all. + +*CaD* approach enables: + +* simplified authoring of configuration using a variety of methods and sources +* WYSIWYG interaction with configuration using a simple data serialization formation rather than a code-like format +* layering of interoperable interface surfaces (notably GUI) over declarative configuration mechanisms rather than + forcing choices between exclusive alternatives (exclusively UI/CLI or IaC initially followed by exclusively + UI/CLI or exclusively IaC) +* the ability to apply UX techniques to simplify configuration authoring and viewing +* compared to imperative tools (e.g., UI, CLI) that directly modify the live state via APIs, CaD enables versioning, + undo, audits of configuration history, review/approval, pre-deployment preview, validation, safety checks, + constraint-based policy enforcement, and disaster recovery +* bulk changes to configuration data in their sources of truth +* injection of configuration to address horizontal concerns +* merging of multiple sources of truth +* state export to reusable blueprints without manual templatization +* cooperative editing of configuration by humans and automation, such as for security remediation (which is usually + implemented against live-state APIs) +* reusability of configuration transformation code across multiple bodies of configuration data containing the same + resource types, amortizing the effort of writing, testing, documenting the code +* combination of independent configuration transformations +* implementation of config transformations using the languages of choice, including both programming and scripting + approaches +* reducing the frequency of changes to existing transformation code +* separation of roles between developer and non-developer configuration users +* defragmenting the configuration transformation ecosystem +* admission control and invariant enforcement on sources of truth +* maintaining variants of configuration blueprints without one-size-fits-all full struct-constructor-style + parameterization and without manually constructing and maintaining patches +* drift detection and remediation for most of the desired state via continuous reconciliation using apply and/or for + specific attributes via targeted mutation of the sources of truth + +## Related Articles + +For more information about Configuration as Data and Kubernetes Resource Model, +visit the following links: + +* [Rationale for kpt](https://kpt.dev/guides/rationale) +* [Understanding Configuration as Data](https://cloud.google.com/blog/products/containers-kubernetes/understanding-configuration-as-data-in-kubernetes) + blog post. +* [Kubernetes Resource Model](https://cloud.google.com/blog/topics/developers-practitioners/build-platform-krm-part-1-whats-platform) + blog post series diff --git a/content/en/docs/porch/package-orchestration.md b/content/en/docs/porch/package-orchestration.md new file mode 100644 index 00000000..a687b658 --- /dev/null +++ b/content/en/docs/porch/package-orchestration.md @@ -0,0 +1,438 @@ +--- +title: "Package Orchestration" +type: docs +weight: 2 +description: +--- + +## Why + +Customers who want to take advantage of the benefits of [Configuration as Data](config-as-data.md) can do so today using +a [kpt](https://kpt.dev) CLI and kpt function ecosystem, including [functions catalog](https://catalog.kpt.dev/). +Package authoring is possible using a variety of editors with [YAML](https://yaml.org/) support. That said, a delightful +UI experience of WYSIWYG package authoring which supports broader package lifecycle, including package authoring with +*guardrails*, approval workflow, package deployment, and more, is not yet available. + +*Package Orchestration* service is part of the implementation of the Configuration as Data approach, and enables +building the delightful UI experience supporting the configuration lifecycle. + +## Core Concepts + +This section briefly describes core concepts of package orchestration: + +***Package***: Package is a collection of related configuration files containing configuration of [KRM][krm] +**resources**. Specifically, configuration packages are [kpt packages](https://kpt.dev/). + +***Repository***: Repositories store packages or [functions][]. For example [git][] or [OCI][oci]. Functions may be +associated with repositories to enforce constraints or invariants on packages (guardrails). +([more details](#repositories)) + +Packages are sequentially ***versioned***; multiple versions of the same package may exist in a repository. +[more details](#package-versioning)) + +A package may have a link (URL) to an ***upstream package*** (a specific version) from which it was cloned. +([more details](#package-relationships)) + +Package may be in one of several lifecycle stages: + +* ***Draft*** - package is being created or edited. The package contents can be modified but package is not ready to be + used (i.e. deployed) +* ***Proposed*** - author of the package proposed that the package be published +* ***Published*** - the changes to the package have been approved and the package is ready to be used. Published + packages can be deployed or cloned + +***Function*** (specifically, [KRM functions][krm functions]) can be applied to packages to mutate or validate resources +within them. Functions can be applied to a package to create specific package mutation while editing a package draft, +functions can be added to package's Kptfile [pipeline][], or associated with a repository to be applied to all packages +on changes. ([more details](#functions)) + +A repository can be designated as ***deployment repository***. *Published* packages in a deployment repository are +considered deployment-ready. ([more details](#deployment)) + +## Core Components of Configuration as Data Implementation + +The Core implementation of Configuration as Data, *CaD Core*, is a set of components and APIs which collectively enable: + +* Registration of repositories (Git, OCI) containing kpt packages or functions, and discovery of packages and functions +* Porcelain package lifecycle, including authoring, versioning, deletion, creation and mutations of a package draft, + process of proposing the package draft, and publishing of the approved package. +* Package lifecycle operations such as: + + * assisted or automated rollout of package upgrade when a new version of the upstream package version becomes + available + * rollback of a package to previous version +* Deployment of packages from deployment repositories and observability of their deployment status. +* Permission model that allows role-based access control + +### High-Level Architecture + +At the high level, the Core CaD functionality comprises: + +* a generic (i.e. not task-specific) package orchestration service implementing + + * package repository management + * package discovery, authoring and lifecycle management + +* [kpt][] - a Git-native, schema-aware, extensible client-side tool for managing KRM packages +* a GitOps-based deployment mechanism (for example [Config Sync][]), which distributes and deploys configuration, and + provides observability of the status of deployed resources +* a task-specific UI supporting repository management, package discovery, authoring, and lifecycle + +![CaD Core Architecture](/static/images/porch/CaD-Core-Architecture.svg) + +## CaD Concepts Elaborated + +Concepts briefly introduced above are elaborated in more detail in this section. + +### Repositories + +[kpt][] and [Config Sync][] currently integrate with [git][] repositories, and there is an existing design to add OCI +support to kpt. Initially, the Package Orchestration service will prioritize integration with [git][], and support for +additional repository types may be added in the future as required. + +Requirements applicable to all repositories include: ability to store packages, their versions, and sufficient metadata +associated with package to capture: + +* package dependency relationships (upstream - downstream) +* package lifecycle state (draft, proposed, published) +* package purpose (base package) +* (optionally) even customer-defined attributes + +At repository registration, customers must be able to specify details needed to store packages in appropriate locations +in the repository. For example, registration of a Git repository must accept a branch and a directory. + +Repositories may have associated guardrails - mutation and validation functions that ensure and enforce requirements of +all packages in the repository, including gating promotion of a package to a *published* lifecycle stage. + +{{% alert title="Note" color="primary" %}} + +A user role with sufficient permissions can register a package or function repository, including repositories +containing functions authored by the customer, or other providers. Since the functions in the registered repositories +become discoverable, customers must be aware of the implications of registering function repositories and trust the +contents thereof. + +{{% /alert %}} + +### Package Versioning + +Packages are sequentially versioned. The important requirements are: + +* ability to compare any 2 versions of a package to be either "newer than", equal, or "older than" relationship +* ability to support automatic assignment of versions +* ability to support [optimistic concurrency][optimistic-concurrency] of package changes via version numbers +* simple model which easily supports automation + +We plan to use a simple integer sequence to represent package versions. + +### Package Relationships + +Kpt packages support the concept of ***upstream***. When a package is cloned from another, the new package +(called ***downstream*** package) maintains an upstream link to the specific version of the package from which it was +cloned. If a new version of the upstream package becomes available, the upstream link can be used to +[update](https://kpt.dev/book/03-packages/05-updating-a-package) the downstream package. + +### Deployment + +The deployment mechanism is responsible for deploying configuration packages from a repository and affecting the live +state. Because the configuration is stored in standard repositories (Git, and in the future OCI), the deployment +component is pluggable. By default, [Config Sync][] is the deployment mechanism used by CaD Core implementation but +others can be used as well. + +Here we highlight some key attributes of the deployment mechanism and its integration within the CaD Core: + +* _Published_ packages in a deployment repository are considered ready to be deployed +* Config Sync supports deploying individual packages and whole repositories. For Git specifically that translates to a + requirement to be able to specify repository, branch/tag/ref, and directory when instructing Config Sync to deploy a + package. +* _Draft_ packages need to be identified in such a way that Config Sync can easily avoid deploying them. +* Config Sync needs to be able to pin to specific versions of deployable packages in order to orchestrate rollouts and + rollbacks. This means it must be possible to GET a specific version of a package. +* Config Sync needs to be able to discover when new versions are available for deployment. + +### Functions + +Functions, specifically [KRM functions][krm functions], are used in the CaD core to manipulate resources within +packages. + +* Similar to packages, functions are stored in repositories. Some repositories (such as OCI) are more suitable for + storing functions than others (such as Git). +* Function discovery will be aided by metadata associated with the function by which the function can advertise which + resources it acts on, whether the function is idempotent or not, whether it is a mutator or validator, etc. +* Function repositories can be registered and subsequently, user can discover functions from the registered repositories + and use them as follows: + +Function can be: + +* applied imperatively to a package draft to perform specific mutation to the package's resources or meta-resources + (`Kptfile` etc.) +* registered in the package's `Kptfile` function pipeline as a *mutator* or *validator* in order to be automatically run + as part of package rendering +* registered at the repository level as *mutator* or *validator*. Such function then applies to all packages in the + repository and is evaluated whenever a change to a package in the repository occurs. + +## Package Orchestration - Porch + +Having established the context of the CaD Core components and the overall architecture, the remainder of the document +will focus on **Porch** - Package Orchestration service. + +To reiterate the role of Package Orchestration service among the CaD Core components, it is: + +* [Repository Management](#repository-management) +* [Package Discovery](#package-discovery) +* [Package Authoring](#package-authoring) and Lifecycle + +In the following section we'll expand more on each of these areas. The term _client_ used in these sections can be +either a person interacting with the UI such as a web application or a command-line tool, or an automated agent or +process. + +### Repository Management + +The repository management functionality of Package Orchestration service enables the client to: + +* register, unregister, update registration of repositories, and discover registered repositories. Git repository + integration will be available first, with OCI and possibly more delivered in the subsequent releases. +* manage repository-wide upstream/downstream relationships, i.e. designate default upstream repository from which + packages will be cloned. +* annotate repository with metadata such as whether repository contains deployment ready packages or not; metadata can + be application or customer specific +* define and enforce package invariants (guardrails) at the repository level, by registering mutator and/or validator + functions with the repository; those registered functions will be applied to packages in the repository to enforce + invariants + +### Package Discovery + +The package discovery functionality of Package Orchestration service enables the client to: + +* browse packages in a repository +* discover configuration packages in registered repositories and sort/filter based on the repository containing the + package, package metadata, version, package lifecycle stage (draft, proposed, published) +* retrieve resources and metadata of an individual package, including latest version or any specific version or draft + of a package, for the purpose of introspection of a single package or for comparison of contents of multiple + versions of a package, or related packages +* enumerate _upstream_ packages available for creating (cloning) a _downstream_ package +* identify downstream packages that need to be upgraded after a change is made to an upstream package +* identify all deployment-ready packages in a deployment repository that are ready to be synced to a deployment target + by Config Sync +* identify new versions of packages in a deployment repository that can be rolled out to a deployment target by Config + Sync +* discover functions in registered repositories based on filtering criteria including containing repository, + applicability of a function to a specific package or specific resource type(s), function metadata (mutator/validator), + idempotency (function is idempotent/not), etc. + +### Package Authoring + +The package authoring and lifecycle functionality of the package Orchestration service enables the client to: + +* Create a package _draft_ via one of the following means: + + * an empty draft 'from scratch' (equivalent to [kpt pkg init](https://kpt.dev/reference/cli/pkg/init/)) + * clone of an upstream package (equivalent to [kpt pkg get](https://kpt.dev/reference/cli/pkg/get/)) from either a + registered upstream repository or from another accessible, unregistered, repository + * edit an existing package (similar to the CLI command(s) [kpt fn source](https://kpt.dev/reference/cli/fn/source/) or + [kpt pkg pull](https://github.com/GoogleContainerTools/kpt/issues/2557)) + * roll back / restore a package to any of its previous versions + ([kpt pkg pull](https://github.com/GoogleContainerTools/kpt/issues/2557) of a previous version) + +* Apply changes to a package _draft_. In general, mutations include adding/modifying/deleting any part of the package's + contents. Some specific examples include: + + * add/change/delete package metadata (i.e. some properties in the `Kptfile`) + * add/change/delete resources in the package + * add function mutators/validators to the package's [pipeline][] + * invoke a function imperatively on the package draft to perform a desired mutation + * add/change/delete sub-package + * retrieve the contents of the package for arbitrary client-side mutations (equivalent to + [kpt fn source](https://kpt.dev/reference/cli/fn/source/)) + * update/replace the package contents with new contents, for example results of a client-side mutations by a UI + (equivalent to [kpt fn sink](https://kpt.dev/reference/cli/fn/sink/)) + +* Rebase a package onto another upstream base package + ([detail](https://github.com/GoogleContainerTools/kpt/issues/2548)) or onto a newer version of the same package (to + aid with conflict resolution during the process of publishing a draft package) +* Get feedback during package authoring, and assistance in recovery from: + + * merge conflicts, invalid package changes, guardrail violations + * compliance of the drafted package with repository-wide invariants and guardrails + +* Propose for a _draft_ package be _published_. +* Apply an arbitrary decision criteria, and by a manual or automated action, approve (or reject) proposal of a _draft_ + package to be _published_. +* Perform bulk operations such as: + + * Assisted/automated update (upgrade, rollback) of groups of packages matching specific criteria (i.e. base package + has new version or specific base package version has a vulnerability and should be rolled back) + * Proposed change validation (pre-validating change that adds a validator function to a base package or a repository) + +* Delete an existing package. + +#### Authoring & Latency + +An important goal of the Package Orchestration service is to support building of task-specific UIs. In order to deliver +low latency user experience acceptable to UI interactions, the innermost authoring loop (depicted below) will require: + +* high performance access to the package store (load/save package) w/ caching +* low latency execution of mutations and transformations on the package contents +* low latency [KRM function][krm functions] evaluation and package rendering (evaluation of package's function + pipelines) + +![Inner Loop](/static/images/porch/Porch-Inner-Loop.svg) + +#### Authoring & Access Control + +A client can assign actors (persons, service accounts) to roles that determine which operations they are allowed to +perform in order to satisfy requirements of the basic roles. For example, only permitted roles can: + +* manipulate repository registration, enforcement of repository-wide invariants and guardrails +* create a draft of a package and propose the draft be published +* approve (or reject) the proposal to publish a draft package +* clone a package from a specific upstream repository +* perform bulk operations such as rollout upgrade of downstream packages, including rollouts across multiple downstream + repositories +* etc. + +### Porch Architecture + +The Package Orchestration service, **Porch** is designed to be hosted in a [Kubernetes](https://kubernetes.io/) cluster. + +The overall architecture is shown below, and includes also existing components (k8s apiserver and Config Sync). + +![Porch Architecture](/static/images/porch/Porch-Architecture.svg) + +In addition to satisfying requirements highlighted above, the focus of the architecture was to: + +* establish clear components and interfaces +* support a low-latency package authoring experience required by the UIs + +The Porch components are: + +#### Porch Server + +The Porch server is implemented as [Kubernetes extension API server][apiserver]. The benefits of using Kubernetes +extension API server are: + +* well-defined and familiar API style +* availability of generated clients +* integration with existing Kubernetes ecosystem and tools such as `kubectl` CLI, + [RBAC](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) +* avoids requirement to open another network port to access a separate endpoint running inside k8s cluster (this is a + distinct advantage over gRPC which we considered as an alternative approach) + +Resources implemented by Porch include: + +* `PackageRevision` - represents the _metadata_ of the configuration package revision stored in a _package_ repository. +* `PackageRevisionResources` - represents the _contents_ of the package revision +* `Function` - represents a [KRM function][krm functions] discovered in a registered _function_ repository. + +Note that each configuration package revision is represented by a _pair_ of resources which each present a different +view (or [representation][] of the same underlying package revision. + +Repository registration is supported by a `Repository` [custom resource][crds]. + +**Porch server** itself comprises several key components, including: + +* The *Porch aggregated apiserver* which implements the integration into the main Kubernetes apiserver, and directly + serves API requests for the `PackageRevision`, `PackageRevisionResources` and `Function` resources. +* Package orchestration *engine* which implements the package lifecycle operations, and package mutation workflows +* *CaD Library* which implements specific package manipulation algorithms such as package rendering (evaluation of + package's function *pipeline*), initialization of a new package, etc. The CaD Library is shared with `kpt` + where it likewise provides the core package manipulation algorithms. +* *Package cache* which enables both local caching, as well as abstract manipulation of packages and their contents + irrespectively of the underlying storage mechanism (Git, or OCI) +* *Repository adapters* for Git and OCI which implement the specific logic of interacting with those types of package + repositories. +* *Function runtime* which implements support for evaluating [kpt functions][functions] and multi-tier cache of + functions to support low latency function evaluation + +#### Function Runner + +**Function runner** is a separate service responsible for evaluating [kpt functions][functions]. Function runner exposes +a [gRPC](https://grpc.io/) endpoint which enables evaluating a kpt function on the provided configuration package. + +The gRPC technology was chosen for the function runner service because the [requirements](#grpc-api) that informed +choice of KRM API for the Package Orchestration service do not apply. The function runner is an internal microservice, +an implementation detail not exposed to external callers. This makes gRPC perfectly suitable. + +The function runner also maintains cache of functions to support low latency function evaluation. + +#### CaD Library + +The [kpt](https://kpt.dev/) CLI already implements foundational package manipulation algorithms in order to provide the +command line user experience, including: + +* [kpt pkg init](https://kpt.dev/reference/cli/pkg/init/) - create an empty, valid, KRM package +* [kpt pkg get](https://kpt.dev/reference/cli/pkg/get/) - create a downstream package by cloning an upstream package; + set up the upstream reference of the downstream package +* [kpt pkg update](https://kpt.dev/reference/cli/pkg/update/) - update the downstream package with changes from new + version of upstream, 3-way merge +* [kpt fn eval](https://kpt.dev/reference/cli/fn/eval/) - evaluate a kpt function on a package +* [kpt fn render](https://kpt.dev/reference/cli/fn/render/) - render the package by executing the function pipeline of + the package and its nested packages +* [kpt fn source](https://kpt.dev/reference/cli/fn/source/) and [kpt fn sink](https://kpt.dev/reference/cli/fn/sink/) - + read package from local disk as a `ResourceList` and write package represented as `ResourcesList` into local disk + +The same set of primitives form the foundational building blocks of the package orchestration service. Further, the +package orchestration service combines these primitives into higher-level operations (for example, package orchestrator +renders packages automatically on changes, future versions will support bulk operations such as upgrade of multiple +packages, etc). + +The implementation of the package manipulation primitives in kpt was refactored (with initial refactoring completed, and +more to be performed as needed) in order to: + +* create a reusable CaD library, usable by both kpt CLI and Package Orchestration service +* create abstractions for dependencies which differ between CLI and Porch, most notable are dependency on Docker for + function evaluation, and dependency on the local file system for package rendering. + +Over time, the CaD Library will provide the package manipulation primitives: + +* create a valid empty package (init) +* update package upstream pointers (get) +* perform 3-way merge (update) +* render - core package rendering algorithm using a pluggable function evaluator to support: + + * function evaluation via Docker (used by kpt CLI) + * function evaluation via an RPC to a service or appropriate function sandbox + * high-performance evaluation of trusted, built-in, functions without sandbox + +* heal configuration (restore comments after lossy transformation) + +and both kpt CLI and Porch will consume the library. This approach will allow leveraging the investment already made +into the high quality package manipulation primitives, and enable functional parity between KPT CLI and Package +Orchestration service. + +## User Guide + +Find the Porch User Guide in a dedicated +[document](https://github.com/kptdev/kpt/blob/main/site/guides/porch-user-guide.md). + +## Open Issues/Questions + +### Deployment Rollouts & Orchestration + +__Not Yet Resolved__ + +Cross-cluster rollouts and orchestration of deployment activity. For example, package deployed by Config Sync in cluster +A, and only on success, the same (or a different) package deployed by Config Sync in cluster B. + +## Alternatives Considered + +### gRPC API + +We considered the use of [gRPC]() for the Porch API. The primary advantages of implementing Porch as an extension +Kubernetes apiserver are: + +* customers won't have to open another port to their Kubernetes cluster and can reuse their existing infrastructure +* customers can likewise reuse existing, familiar, Kubernetes tooling ecosystem + + +[krm]: https://github.com/kubernetes/design-proposals-archive/blob/main/architecture/resource-management.md +[functions]: https://kpt.dev/book/02-concepts/03-functions +[krm functions]: https://github.com/kubernetes-sigs/kustomize/blob/master/cmd/config/docs/api-conventions/functions-spec.md +[pipeline]: https://kpt.dev/book/04-using-functions/01-declarative-function-execution +[Config Sync]: https://cloud.google.com/anthos-config-management/docs/config-sync-overview +[kpt]: https://kpt.dev/ +[git]: https://git-scm.org/ +[optimistic-concurrency]: https://en.wikipedia.org/wiki/Optimistic_concurrency_control +[apiserver]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/ +[representation]: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#differing-representations +[crds]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/ +[oci]: https://github.com/opencontainers/image-spec/blob/main/spec.md \ No newline at end of file diff --git a/content/en/docs/porch/package-variant.md b/content/en/docs/porch/package-variant.md new file mode 100644 index 00000000..e9856ac6 --- /dev/null +++ b/content/en/docs/porch/package-variant.md @@ -0,0 +1,1205 @@ +--- +title: "Package Variant Controller" +type: docs +weight: 3 +description: +--- + +## Why + +When deploying workloads across large fleets of clusters, it is often necessary to modify the workload configuration for +a specific cluster. Additionally, those workloads may evolve over time with security or other patches that require +updates. [Configuration as Data](config-as-data.md) in general and [Package Orchestration](package-orchestration.md) in +particular can assist in this. However, they are still centered around manual, one-by-one hydration and configuration of +a workload. + +This proposal introduces concepts and a set of resources for automating the creation and lifecycle management of package +variants. These are designed to address several different dimensions of scalability: + +- Number of different workloads for a given cluster +- Number of clusters across which those workloads are deployed +- Different types or characteristics of those clusters +- Complexity of the organizations deploying those workloads +- Changes to those workloads over time + +## See Also + +- [Package Orchestration](package-orchestration.md) +- [#3347](https://github.com/GoogleContainerTools/kpt/issues/3347) Bulk package creation +- [#3243](https://github.com/GoogleContainerTools/kpt/issues/3243) Support bulk package upgrades +- [#3488](https://github.com/GoogleContainerTools/kpt/issues/3488) Porch: BaseRevision controller aka Fan Out + controller - but more +- [Managing Package + Revisions](https://docs.google.com/document/d/1EzUUDxLm5jlEG9d47AQOxA2W6HmSWVjL1zqyIFkqV1I/edit?usp=sharing) +- [Porch UpstreamPolicy Resource + API](https://docs.google.com/document/d/1OxNon_1ri4YOqNtEQivBgeRzIPuX9sOyu-nYukjwN1Q/edit?usp=sharing&resourcekey=0-2nDYYH5Kw58IwCatA4uDQw) + +## Core Concepts + +For this solution, "workloads" are represented by packages. "Package" is a more general concept, being an arbitrary +bundle of resources, and therefore is sufficient to solve the originally stated problem. + +The basic idea here is to introduce a PackageVariant resource that manages the derivation of a variant of a package from +the original source package, and to manage the evolution of that variant over time. This effectively automates the +human-centered process for variant creation one might use with `kpt`: + +1. Clone an upstream package locally +1. Make changes to the local package, setting values in resources and executing KRM functions +1. Push the package to a new repository and tag it as a new version + +Similarly, PackageVariant can manage the process of updating a package when a new version of the upstream package is +published. In the human-centered workflow, a user would use `kpt pkg update` to pull in changes to their derivative +package. When using a PackageVariant resource, the change would be made to the upstream specification in the resource, +and the controller would propose a new Draft package reflecting the outcome of `kpt pkg update`. + +By automating this process, we open up the possibility of performing systematic changes that tie back to our different +dimensions of scalability. We can use data about the specific variant we are creating to lookup additional context in +the Porch cluster, and copy that information into the variant. That context is a well-structured resource, not simply +key/value pairs. KRM functions within the package can interpret the resource, modifying other resources in the package +accordingly. The context can come from multiple sources that vary differently along those dimensions of scalability. +For example, one piece of information may vary by region, another by individual site, another by cloud provider, and yet +another based on whether we are deploying to development, staging, or production. By utilizing resources in the Porch +cluster as our input model, we can represent this complexity in a manageable model that is reused across many packages, +rather than scattered in package-specific templates or key/value pairs without any structure. KRM functions, also reused +across packages but configured as needed for the specific package, are used to interpret the resources within the +package. This decouples authoring of the packages, creation of the input model, and deploy-time use of that input model +within the packages, allowing those activities to be performed by different teams or organizations. + +We refer to the mechanism described above as *configuration injection*. It enables dynamic, context-aware creation of +variants. Another way to think about it is as a continuous reconciliation, much like other Kubernetes controllers. In +this case, the inputs are a parent package `P` and a context `C` (which may be a collection of many independent +resources), with the output being the derived package `D`. When a new version of `C` is created by updates to in-cluster +resources, we get a new revision of `D`, customized based upon the updated context. Similarly, the user (or an +automation) can monitor for new versions of `P`; when one arrives, the PackageVariant can be updated to point to that +new version, resulting in a newly proposed Draft of `D`, updated to reflect the upstream changes. This will be explained +in more detail below. + +This proposal also introduces a way to "fan-out", or create multiple PackageVariant resources declaratively based upon a +list or selector, with the PackageVariantSet resource. This is combined with the injection mechanism to enable +generation of large sets of variants that are specialized to a particular target repository, cluster, or other resource. + +## Basic Package Cloning + +The PackageVariant resource controls the creation and lifecycle of a variant of a package. That is, it defines the +original (upstream) package, the new (downstream) package, and the changes (mutations) that need to be made to transform +the upstream into the downstream. It also allows the user to specify policies around adoption, deletion, and update of +package revisions that are under the control of the package variant controller. + +The simple clone operation is shown in *Figure 1*. + +| ![Figure 1: Basic Package Cloning](/static/images/porch/packagevariant-clone.png) | ![Legend](/static/images/porch/packagevariant-legend.png) | +| :---: | :---: | +| *Figure 1: Basic Package Cloning* | *Legend* | + + +Note that *proposal* and *approval* are not handled by the package variant controller. Those are left to humans or other +controllers. The exception is the proposal of deletion (there is no concept of a "Draft" deletion), which the package +variant control will do, depending upon the specified deletion policy. + +### PackageRevision Metadata + +The package variant controller utilizes Porch APIs. This means that it is not just doing a `clone` operation, but in +fact creating a Porch PackageRevision resource. In particular, that resource can contain Kubernetes metadata that is +not part of the package as stored in the repository. + +Some of that metadata is necessary for the management of the PackageRevision by the package variant controller - for +example, the owner reference indicating which PackageVariant created the PackageRevision. These are not under the user's +control. However, the PackageVariant resource does make the annotations and labels of the PackageRevision available as +values that may be controlled during the creation of the PackageRevision. This can assist in additional automation +workflows. + +## Introducing Variance + +Just cloning is not that interesting, so the PackageVariant resource also allows you to control various ways of mutating +the original package to create the variant. + +### Package Context[^porch17] + +Every kpt package that is fetched with `--for-deployment` will contain a ConfigMap called `kptfile.kpt.dev`. +Analogously, when Porch creates a package in a deployment repository, it will create this ConfigMap, if it does not +already exist. Kpt (or Porch) will automatically add a key `name` to the ConfigMap data, with the value of the package +name. This ConfigMap can then be used as input to functions in the Kpt function pipeline. + +This process holds true for package revisions created via the package variant controller as well. Additionally, the +author of the PackageVariant resource can specify additional key-value pairs to insert into the package context, as +shown in *Figure 2*. + +| ![Figure 2: Package Context Mutation](/static/images/porch/packagevariant-context.png) | +| :---: | +| *Figure 2: Package Context Mutation * | + +While this is convenient, it can be easily abused, leading to over-parameterization. The preferred approach is +configuration injection, as described below, since it allows inputs to adhere to a well-defined, reusable schema, rather +than simple key/value pairs. + +### Kptfile Function Pipeline Editing[^porch18] + +In the manual workflow, one of the ways we edit packages is by running KRM functions imperatively. PackageVariant offers +a similar capability, by allowing the user to add functions to the beginning of the downstream package `Kptfile` +mutators pipeline. These functions will then execute before the functions present in the upstream pipeline. It is not +exactly the same as running functions imperatively, because they will also be run in every subsequent execution of the +downstream package function pipeline. But it can achieve the same goals. + +For example, consider an upstream package that includes a Namespace resource. In many organizations, the deployer of the +workload may not have the permissions to provision cluster-scoped resources like namespaces. This means that they would +not be able to use this upstream package without removing the Namespace resource (assuming that they only have access to +a pipeline that deploys with constrained permissions). By adding a function that removes Namespace resources, and a call +to `set-namespace`, they can take advantage of the upstream package. + +Similarly, the Kptfile pipeline editing feature provides an easy mechanism for the deployer to create and set the +namespace if their downstream package application pipeline allows it, as seen in *Figure 3*.[^setns] + +| ![Figure 3: KRM Function Pipeline Editing](/static/images/porch/packagevariant-function.png) | +| :---: | +| *Figure 3: Kptfile Function Pipeline Editing * | + +### Configuration Injection[^porch18] + +Adding values to the package context or functions to the pipeline works for configuration that is under the control of +the creator of the PackageVariant resource. However, in more advanced use cases, we may need to specialize the package +based upon other contextual information. This particularly comes into play when the user deploying the workload does +not have direct control over the context in which it is being deployed. For example, one part of the organization may +manage the infrastructure - that is, the cluster in which we are deploying the workload - and another part the actual +workload. We would like to be able to pull in inputs specified by the infrastructure team automatically, based the +cluster to which we are deploying the workload, or perhaps the region in which that cluster is deployed. + +To facilitate this, the package variant controller can "inject" configuration directly into the package. This means it +will use information specific to this instance of the package to lookup a resource in the Porch cluster, and copy that +information into the package. Of course, the package has to be ready to receive this information. So, there is a +protocol for facilitating this dance: + +- Packages may contain resources annotated with `kpt.dev/config-injection` +- Often, these will also be `config.kubernetes.io/local-config` resources, as they are likely just used by local + functions as input. But this is not mandatory. +- The package variant controller will look for any resource in the Kubernetes cluster matching the Group, Version, and + Kind of the package resource, and satisfying the *injection selector*. +- The package variant controller will copy the `spec` field from the matching in-cluster resource to the in-package + resource, or the `data` field in the case of a ConfigMap. + +| ![Figure 4: Configuration Injection](/static/images/porch/packagevariant-config-injection.png) | +| :---: | +| *Figure 4: Configuration Injection* | + + +Note that because we are injecting data *from the Kubernetes cluster*, we can also monitor that data for changes. For +each resource we inject, the package variant controller will establish a Kubernetes "watch" on the resource (or perhaps +on the collection of such resources). A change to that resource will result in a new Draft package with the updated +configuration injected. + +There are a number of additional details that will be described in the detailed design below, along with the specific +API definition. + +## Lifecycle Management + +### Upstream Changes +The package variant controller allows you to specific a specific upstream package revision to clone, or you can specify +a floating tag[^notimplemented]. + +If you specify a specific upstream revision, then the downstream will not be changed unless the PackageVariant resource +itself is modified to point to a new revision. That is, the user must edit the PackageVariant, and change the upstream +package reference. When that is done, the package variant controller will update any existing Draft package under its +ownership by doing the equivalent of a `kpt pkg update` to update the downstream to be based upon the new upstream +revision. If a Draft does not exist, then the package variant controller will create a new Draft based on the current +published downstream, and apply the `kpt pkg update`. This updated Draft must then be proposed and approved like any +other package change. + +If a floating tag is used, then explicit modification of the PackageVariant is not needed. Rather, when the floating tag +is moved to a new tagged revision of the upstream package, the package revision controller will notice and automatically +propose and update to that revision. For example, the upstream package author may designate three floating tags: stable, +beta, and alpha. The upstream package author can move these tags to specific revisions, and any PackageVariant resource +tracking them will propose updates to their downstream packages. + +### Adoption and Deletion Policies + +When a PackageVariant resource is created, it will have a particular repository and package name as the downstream. The +adoption policy controls whether the package variant controller takes over an existing package with that name, in that +repository. + +Analogously, when a PackageVariant resource is deleted, a decision must be made about whether or not to delete the +downstream package. This is controlled by the deletion policy. + +## Fan Out of Variant Generation[^pvsimpl] + +When used with a single package, the package variant controller mostly helps us handle the time dimension - producing +new versions of a package as the upstream changes, or as injected resources are updated. It can also be useful for +automating common, systematic changes made when bringing an external package into an organization, or an organizational +package into a team repository. + +That is useful, but not extremely compelling by itself. More interesting is when we use PackageVariant as a primitive +for automations that act on other dimensions of scale. That means writing controllers that emit PackageVariant +resources. For example, we can create a controller that instantiates a PackageVariant for each developer in our +organization, or we can create a controller to manage PackageVariants across environments. The ability to not only clone +a package, but make systematic changes to that package enables flexible automation. + +Workload controllers in Kubernetes are a useful analogy. In Kubernetes, we have different workload controllers such as +Deployment, StatefulSet, and DaemonSet. Ultimately, all of these result in Pods; however, the decisions about what Pods +to create, how to schedule them across Nodes, how to configure those Pods, and how to manage those Pods as changes +happen are very different with each workload controller. Similarly, we can build different controllers to handle +different ways in which we want to generate PackageRevisions. The PackageVariant resource provides a convenient +primitive for all of those controllers, allowing a them to leverage a range of well-defined operations to mutate the +packages as needed. + +A common need is the ability to generate many variants of a package based on a simple list of some entity. Some examples +include generating package variants to spin up development environments for each developer in an organization; +instantiating the same package, with slight configuration changes, across a fleet of clusters; or instantiating some +package per customer. + +The package variant set controller is designed to fill this common need. This controller consumes PackageVariantSet +resources, and outputs PackageVariant resources. The PackageVariantSet defines: + +- the upstream package +- targeting criteria +- a template for generating one PackageVariant per target + +Three types of targeting are supported: + +- An explicit list of repositories and package names +- A label selector for Repository objects +- An arbitrary object selector + +Rules for generating a PackageVariant are associated with a list of targets using a template. That template can have +explicit values for various PackageVariant fields, or it can use +[Common Expression Language (CEL)](https://github.com/google/cel-go) expressions to specify the field values. + +*Figure 5* shows an example of creating PackageVariant resources based upon the explicitly list of repositories. In this +example, for the `cluster-01` and `cluster-02` repositories, no template is defined the resulting PackageVariants; +it simply takes the defaults. However, for `cluster-03`, a template is defined to change the downstream package name to +`bar`. + +| ![Figure 5: PackageVariantSet with Repository List](/static/images/porch/packagevariantset-target-list.png) | +| :---: | +| *Figure 5: PackageVariantSet with Repository List* | + +It is also possible to target the same package to a repository more than once, using different names. This is useful, +for example, if the package is used to provision namespaces and you would like to provision many namespaces in the same +cluster. It is also useful if a repository is shared across multiple clusters. In *Figure 6*, two PackageVariant +resources for creating the `foo` package in the repository `cluster-01` are generated, one for each listed package name. +Since no `packageNames` field is listed for `cluster-02`, only one instance is created for that repository. + +| ![Figure 6: PackageVariantSet with Package List](/static/images/porch/packagevariantset-target-list-with-packages.png) | +| :---: | +| *Figure 6: PackageVariantSet with Package List* | + +*Figure 7* shows an example that combines a repository label selector with configuration injection that various based +upon the target. The template for the PackageVariant includes a CEL expression for the one of the injectors, so that +the injection varies systematically based upon attributes of the target. + +| ![Figure 7: PackageVariantSet with Repository Selector](/static/images/porch/packagevariantset-target-repo-selector.png) | +| :---: | +| *Figure 7: PackageVariantSet with Repository Selector* | + +## Detailed Design + +### PackageVariant API + +The Go types below defines the `PackageVariantSpec`. + +```go +type PackageVariantSpec struct { + Upstream *Upstream `json:"upstream,omitempty"` + Downstream *Downstream `json:"downstream,omitempty"` + + AdoptionPolicy AdoptionPolicy `json:"adoptionPolicy,omitempty"` + DeletionPolicy DeletionPolicy `json:"deletionPolicy,omitempty"` + + Labels map[string]string `json:"labels,omitempty"` + Annotations map[string]string `json:"annotations,omitempty"` + + PackageContext *PackageContext `json:"packageContext,omitempty"` + Pipeline *kptfilev1.Pipeline `json:"pipeline,omitempty"` + Injectors []InjectionSelector `json:"injectors,omitempty"` +} + +type Upstream struct { + Repo string `json:"repo,omitempty"` + Package string `json:"package,omitempty"` + Revision string `json:"revision,omitempty"` +} + +type Downstream struct { + Repo string `json:"repo,omitempty"` + Package string `json:"package,omitempty"` +} + +type PackageContext struct { + Data map[string]string `json:"data,omitempty"` + RemoveKeys []string `json:"removeKeys,omitempty"` +} + +type InjectionSelector struct { + Group *string `json:"group,omitempty"` + Version *string `json:"version,omitempty"` + Kind *string `json:"kind,omitempty"` + Name string `json:"name"` +} + +``` + +#### Basic Spec Fields + +The `Upstream` and `Downstream` fields specify the source package and destination repository and package name. The +`Repo` fields refer to the names Porch Repository resources in the same namespace as the PackageVariant resource. +The `Downstream` does not contain a revision, because the package variant controller will only create Draft packages. +The `Revision` of the eventual PackageRevision resource will be determined by Porch at the time of approval. + +The `Labels` and `Annotations` fields list metadata to include on the created PackageRevision. These values are set +*only* at the time a Draft package is created. They are ignored for subsequent operations, even if the PackageVariant +itself has been modified. This means users are free to change these values on the PackageRevision; the package variant +controller will not touch them again. + +`AdoptionPolicy` controls how the package variant controller behaves if it finds an existing PackageRevision Draft +matching the `Downstream`. If the `AdoptionPolicy` is `adoptExisting`, then the package variant controller will +take ownership of the Draft, associating it with this PackageVariant. This means that it will begin to reconcile the +Draft, just as if it had created it in the first place. An `AdoptionPolicy` of `adoptNone` (the default) will simply +ignore any matching Drafts that were not created by the controller. + +`DeletionPolicy` controls how the package variant controller behaves with respect to PackageRevisions that it has +created when the PackageVariant resource itself is deleted. A value of `delete` (the default) will delete the +PackageRevision (potentially removing it from a running cluster, if the downstream package has been deployed). A value +of `orphan` will remove the owner references and leave the PackageRevisions in place. + +#### Package Context Injection + +PackageVariant resource authors may specify key-value pairs in the `spec.packageContext.data` field of the resource. +These key-value pairs will be automatically added to the `data` of the `kptfile.kpt.dev` ConfigMap, if it exists. + +Specifying the key `name` is invalid and must fail validation of the PackageVariant. This key is reserved for kpt or +Porch to set to the package name. Similarly, `package-path` is reserved and will result in an error. + +The `spec.packageContext.removeKeys` field can also be used to specify a list of keys that the package variant +controller should remove from the `data` field of the `kptfile.kpt.dev` ConfigMap. + +When creating or updating a package, the package variant controller will ensure that: + +- The `kptfile.kpt.dev` ConfigMap exists, failing if not +- All of the key-value pairs in `spec.packageContext.data` exist in the `data` field of the ConfigMap. +- None of the keys listed in `spec.packageContext.removeKeys` exist in the ConfigMap. + +Note that if a user adds a key via PackageVariant, then changes the PackageVariant to no longer add that key, it will +NOT be removed automatically, unless the user also lists the key in the `removeKeys` list. This avoids the need to track +which keys were added by PackageVariant. + +Similarly, if a user manually adds a key in the downstream that is also listed in the `removeKeys` field, the package +variant controller will remove that key the next time it needs to update the downstream package. There will be no +attempt to coordinate "ownership" of these keys. + +If the controller is unable to modify the ConfigMap for some reason, this is considered an error and should prevent +generation of the Draft. This will result in the condition `Ready` being set to `False`. + +#### Kptfile Function Pipeline Editing + +PackageVariant resource creators may specify a list of KRM functions to add to the beginning of the Kptfile's pipeline. +These functions are listed in the field `spec.pipeline`, which is a +[Pipeline](https://github.com/GoogleContainerTools/kpt/blob/cf1f326486214f6b4469d8432287a2fa705b48f5/pkg/api/kptfile/v1/types.go#L236), +just as in the Kptfile. The user can therefore prepend both `validators` and `mutators`. + +Functions added in this way are always added to the *beginning* of the Kptfile pipeline. In order to enable management +of the list on subsequent reconciliations, functions added by the package variant controller will use the `Name` field +of the [Function](https://github.com/GoogleContainerTools/kpt/blob/cf1f326486214f6b4469d8432287a2fa705b48f5/pkg/api/kptfile/v1/types.go#L283). +In the Kptfile, each function will be named as the dot-delimited concatenation of `PackageVariant`, the name of the +PackageVariant resource, the function name as specified in the pipeline of the PackageVariant resource (if present), and +the positional location of the function in the array. + +For example, if the PackageVariant resource contains: + +```yaml +apiVersion: config.porch.kpt.dev/v1alpha1 +kind: PackageVariant +metadata: + namespace: default + name: my-pv +spec: + ... + pipeline: + mutators: + - image: gcr.io/kpt-fn/set-namespace:v0.1 + configMap: + namespace: my-ns + name: my-func + - image: gcr.io/kpt-fn/set-labels:v0.1 + configMap: + app: foo +``` + +Then the resulting Kptfile will have these two entries prepended to its `mutators` list: + +```yaml + pipeline: + mutators: + - image: gcr.io/kpt-fn/set-namespace:v0.1 + configMap: + namespace: my-ns + name: PackageVariant.my-pv.my-func.0 + - image: gcr.io/kpt-fn/set-labels:v0.1 + configMap: + app: foo + name: PackageVariant.my-pv..1 +``` + +During subsequent reconciliations, this allows the controller to identify the functions within its control, remove them +all, and re-add them based on its updated content. By including the PackageVariant name, we enable chains of +PackageVariants to add functions, so long as the user is careful about their choice of resource names and avoids +conflicts. + +If the controller is unable to modify the Pipeline for some reason, this is considered an error and should prevent +generation of the Draft. This will result in the condition `Ready` being set to `False`. + +#### Configuration Injection Details + +As described [above](#configuration-injection), configuration injection is a process whereby in-package resources are +matched to in-cluster resources, and the `spec` of the in-cluster resources is copied to the in-package resource. + +Configuration injection is controlled by a combination of in-package resources with annotations, and *injectors* +(also known as *injection selectors*) defined on the PackageVariant resource. Package authors control the injection +points they allow in their packages, by flagging specific resources as *injection points* with an annotation. Creators +of the PackageVariant resource specify how to map in-cluster resources to those injection points using the injection +selectors. Injection selectors are defined in the `spec.injectors` field of the PackageVariant. This field is an ordered +array of structs containing a GVK (group, version, kind) tuple as separate fields, and name. Only the name is required. +To identify a match, all fields present must match the in-cluster object, and all *GVK* fields present must match the +in-package resource. In general the name will not match the in-package resource; this is discussed in more detail below. + +The annotations, along with the GVK of the annotated resource, allow a package to "advertise" the injections it can +accept and understand. These injection points effectively form a configuration API for the package, and the injection +selectors provide a way for the PackageVariant author to specify the inputs for those APIs from the possible values in +the management cluster. If we define those APIs carefully, they can be used across many packages; since they are +KRM resources, we can apply versioning and schema validation to them as well. This creates a more maintainable, +automatable set of APIs for package customization than simple key/value pairs. + +As an example, we may define a GVK that contains service endpoints that many applications use. In each application +package, we would then include an instance of that resource, say called "service-endpoints", and configure a function to +propagate the values from that resource to others within our package. As those endpoints may vary by region, in our +Porch cluster we can create an instance of this GVK for each region: "useast1-service-endpoints", +"useast2-service-endpoints", "uswest1-service-endpoints", etc. When we instantiate the PackageVariant for a cluster, we +want to inject the resource corresponding to the region in which the cluster exists. Thus, for each cluster we will +create a PackageVariant resource pointing to the upstream package, but with injection selector name values that are +specific to the region for that cluster. + +It is important to realize that the name of the in-package resource and the in-cluster resource need not match. In fact, +it would be an unusual coincidence if they did match. The names in the package are the same across PackageVariants +using that upstream, but we want to inject different resources for each one such PackageVariant. We also do not want to +change the name in the package, because it likely has meaning within the package and will be used by functions in the +package. Also, different owners control the names of the in-package and in-cluster resources. The names in the package +are in the control of the package author. The names in the cluster are in the control of whoever populates the cluster +(for example, some infrastructure team). The selector is the glue between them, and is in control of the PackageVariant +resource creator. + +The GVK on the other hand, has to be the same for the in-package resource and the in-cluster resource, because it tells +us the API schema for the resource. Also, the namespace of the in-cluster object needs to be the same as the +PackageVariant resource, or we could leak resources from namespaces to which our PackageVariant user does not have +access. + +With that understanding, the injection process works as follows: + +1. The controller will examine all in-package resources, looking for those with an annotation named + `kpt.dev/config-injection`, with one of the following values: `required` or `optional`. We will call these "injection + points". It is the responsibility of the package author to define these injection points, and to specify which are + required and which are optional. Optional injection points are a way of specifying default values. +1. For each injection point, a condition will be created *in the downstream PackageRevision*, with ConditionType set to + the dot-delimited concatenation of `config.injection`, with the in-package resource kind and name, and the value set + to `False`. Note that since the package author controls the name of the resource, kind and name are sufficient to + disambiguate the injection point. We will call this ConditionType the injection point ConditionType". +1. For each required injection point, the injection point ConditionType will be added to the PackageRevision + `readinessGates` by the package variant controller. Optional injection points' ConditionTypes must not be added to + the `readinessGates` by the package variant controller, but humans or other actors may do so at a later date, and the + package variant controller should not remove them on subsequent reconciliations. Also, this relies upon + `readinessGates` gating publishing the package to a *deployment* repository, but not gating publishing to a blueprint + repository. +1. The injection processing will proceed as follows. For each injection point: + + - The controller will identify all in-cluster objects in the same namespace as the PackageVariant resource, with GVK + matching the injection point (the in-package resource). If the controller is unable to load this objects (e.g., + there are none and the CRD is not installed), the injection point ConditionType will be set to `False`, with a + message indicating that the error, and processing proceeds to the next injection point. Note that for `optional` + injection this may be an acceptable outcome, so it does not interfere with overall generation of the Draft. + - The controller will look through the list of injection selectors in order and checking if any of the in-cluster + objects match the selector. If so, that in-cluster object is selected, and processing of the list of injection + selectors stops. Note that the namespace is set based upon the PackageVariant resource, the GVK is set based upon + the in-package resource, and all selectors require name. Thus, at most one match is possible for any given + selector. Also note that *all fields present in the selector* must match the in-cluster resource, and only the + *GVK fields present in the selector* must match the in-package resource. + - If no in-cluster object is selected, the injection point ConditionType will be set to `False` with a message that + no matching in-cluster resource was found, and processing proceeds to the next injection point. + - If a matching in-cluster object is selected, then it is injected as follows: + + - For ConfigMap resources, the `data` field from the in-cluster resource is copied to the `data` field of the + in-package resource (the injection point), overwriting it. + - For other resource types, the `spec` field from the in-cluster resource is copied to the `spec` field of the + in-package resource (the injection point), overwriting it. + - An annotation with name `kpt.dev/injected-resource-name` and value set to the name of the in-cluster resource is + added (or overwritten) in the in-package resource. + +If the the overall injection cannot be completed for some reason, or if any of the below problems exist in the upstream +package, it is considered an error and should prevent generation of the Draft: + + - There is a resource annotated as an injection point but having an invalid annotation value (i.e., other than + `required` or `optional`). + - There are ambiguous condition types due to conflicting GVK and name values. These must be disambiguated in the + upstream package, if so. + +This will result in the condition `Ready` being set to `False`. + +Note that whether or not all `required` injection points are fulfilled does not affect the *PackageVariant* conditions, +only the *PackageRevision* conditions. + +**A Further Note on Selectors** + +Note that by allowing the use of GVK, not just name, in the selector, more precision in selection is enabled. This is a +way to constrain the injections that will be done. That is, if the package has 10 different objects with +`config-injection` annotation, the PackageVariant could say it only wants to replace certain GVKs, allowing better +control. + +Consider, for example, if the cluster contains these resources: + +- GVK1 foo +- GVK1 bar +- GVK2 foo +- GVK2 bar + +If we could only define injection selectors based upon name, it would be impossible to ever inject one GVK with `foo` +and another with `bar`. Instead, by using GVK, we can accomplish this with a list of selectors like: + + - GVK1 foo + - GVK2 bar + +That said, often name will be sufficiently unique when combined with the in-package resource GVK, and so making the +selector GVK optional is more convenient. This allows a single injector to apply to multiple injection points with +different GVKs. + +#### Order of Mutations + +During creation, the first thing the controller does is clone the upstream package to create the downstream package. + +For update, first note that changes to the downstream PackageRevision can be triggered for several different reasons: + +1. The PackageVariant resource is updated, which could change any of the options for introducing variance, or could also + change the upstream package revision referenced. +1. A new revision of the upstream package has been selected due to a floating tag change, or due to a force retagging of + the upstream. +1. An injected in-cluster object is updated. + +The downstream PackageRevision may have been updated by humans or other automation actors since creation, so we cannot +simply recreate the downstream PackageRevision from scratch when one of these changes happens. Instead, the controller +must maintain the later edits by doing the equivalent of a `kpt pkg update`, in the case of changes to the upstream for +any reason. Any other changes require reapplication of the PackageVariant functionality. With that understanding, we can +see that the controller will perform mutations on the downstream package in this order, for both creation and update: + +1. Create (via Clone) or Update (via `kpt pkg update` equivalent) + + - This is done by the Porch server, not by the package variant controller directly. + - This means that Porch will run the Kptfile pipeline after clone or update. + +1. Package variant controller applies configured mutations + + - Package Context Injections + - Kptfile KRM Function Pipeline Additions/Changes + - Config Injection + +1. Package variant controller saves the PackageRevision and PackageRevisionResources. + + - Porch server executes the Kptfile pipeline + +The package variant controller mutations edit resources (including the Kptfile), based on the contents of the +PackageVariant and the injected in-cluster resources, but cannot affect one another. The results of those mutations +throughout the rest of the package is materialized by the execution of the Kptfile pipeline during the save operation. + +#### PackageVariant Status + +PackageVariant sets the following status conditions: + + - `Stalled` is set to True if there has been a failure that most likely requires user intervention. + - `Ready` is set to True if the last reconciliation successfully produced an up-to-date Draft. + +The PackageVariant resource will also contain a `DownstreamTargets` field, containing a list of downstream `Draft` and +`Proposed` PackageRevisions owned by this PackageVariant resource, or the latest `Published` PackageRevision if there +are none in `Draft` or `Proposed` state. Typically, there is only a single Draft, but use of the `adopt` value for +`AdoptionPolicy` could result in multiple Drafts being owned by the same PackageVariant. + +### PackageVariantSet API[^pvsimpl] + +The Go types below defines the `PackageVariantSetSpec`. + +```go +// PackageVariantSetSpec defines the desired state of PackageVariantSet +type PackageVariantSetSpec struct { + Upstream *pkgvarapi.Upstream `json:"upstream,omitempty"` + Targets []Target `json:"targets,omitempty"` +} + +type Target struct { + // Exactly one of Repositories, RepositorySeletor, and ObjectSelector must be + // populated + // option 1: an explicit repositories and package names + Repositories []RepositoryTarget `json:"repositories,omitempty"` + + // option 2: a label selector against a set of repositories + RepositorySelector *metav1.LabelSelector `json:"repositorySelector,omitempty"` + + // option 3: a selector against a set of arbitrary objects + ObjectSelector *ObjectSelector `json:"objectSelector,omitempty"` + + // Template specifies how to generate a PackageVariant from a target + Template *PackageVariantTemplate `json:"template,omitempty"` +} +``` + +At the highest level, a PackageVariantSet is just an upstream, and a list of targets. For each target, there is a set of +criteria for generating a list, and a set of rules (a template) for creating a PackageVariant from each list entry. + +Since `template` is optional, lets start with describing the different types of targets, and how the criteria in each is +used to generate a list that seeds the PackageVariant resources. + +The `Target` structure must include exactly one of three different ways of generating the list. The first is a simple +list of repositories and package names for each of those repositories[^repo-pkg-expr]. The package name list is +needed for uses cases in which you want to repeatedly instantiate the same package in a single repository. For example, +if a repository represents the contents of a cluster, you may want to instantiate a namespace package once for each +namespace, with a name matching the namespace. + +This example shows using the `repositories` field: + +```yaml +apiVersion: config.porch.kpt.dev/v1alpha2 +kind: PackageVariantSet +metadata: + namespace: default + name: example +spec: + upstream: + repo: example-repo + package: foo + revision: v1 + targets: + - repositories: + - name: cluster-01 + - name: cluster-02 + - name: cluster-03 + packageNames: + - foo-a + - foo-b + - foo-c + - name: cluster-04 + packageNames: + - foo-a + - foo-b +``` + +In this case, PackageVariant resources are created for each of these pairs of downstream repositories and packages +names: + +| Repository | Package Name | +| ---------- | ------------ | +| cluster-01 | foo | +| cluster-02 | foo | +| cluster-03 | foo-a | +| cluster-03 | foo-b | +| cluster-03 | foo-c | +| cluster-04 | foo-a | +| cluster-04 | foo-b | + +All of those PackageVariants have the same upstream. + +The second criteria targeting is via a label selector against Porch Repository objects, along with a list of package +names. Those packages will be instantiated in each matching repository. Just like in the first example, not listing a +package name defaults to one package, with the same name as the upstream package. Suppose, for example, we have these +four repositories defined in our Porch cluster: + +| Repository | Labels | +| ---------- | ------------------------------------- | +| cluster-01 | region=useast1, env=prod, org=hr | +| cluster-02 | region=uswest1, env=prod, org=finance | +| cluster-03 | region=useast2, env=prod, org=hr | +| cluster-04 | region=uswest1, env=prod, org=hr | + +If we create a PackageVariantSet with the following `spec`: + +```yaml +spec: + upstream: + repo: example-repo + package: foo + revision: v1 + targets: + - repositorySelector: + matchLabels: + env: prod + org: hr + - repositorySelector: + matchLabels: + region: uswest1 + packageNames: + - foo-a + - foo-b + - foo-c +``` + +then PackageVariant resources will be created with these repository and package names: + +| Repository | Package Name | +| ---------- | ------------ | +| cluster-01 | foo | +| cluster-03 | foo | +| cluster-04 | foo | +| cluster-02 | foo-a | +| cluster-02 | foo-b | +| cluster-02 | foo-c | +| cluster-04 | foo-a | +| cluster-04 | foo-b | +| cluster-04 | foo-c | + +Finally, the third possibility allows the use of *arbitrary* resources in the Porch cluster as targeting criteria. The +`objectSelector` looks like this: + +```yaml +spec: + upstream: + repo: example-repo + package: foo + revision: v1 + targets: + - objectSelector: + apiVersion: krm-platform.bigco.com/v1 + kind: Team + matchLabels: + org: hr + role: dev +``` + +It works exactly like the repository selector - in fact the repository selector is equivalent to the object selector +with the `apiVersion` and `kind` values set to point to Porch Repository resources. That is, the repository name comes +from the object name, and the package names come from the listed package names. In the description of the template, we +will see how to derive different repository names from the objects. + +#### PackageVariant Template + +As previously discussed, the list entries generated by the target criteria result in PackageVariant entries. If no +template is specified, then PackageVariant default are used, along with the downstream repository name and package name +as described in the previous section. The template allows the user to have control over all of the values in the +resulting PackageVariant. The template API is shown below. + +```go +type PackageVariantTemplate struct { + // Downstream allows overriding the default downstream package and repository name + // +optional + Downstream *DownstreamTemplate `json:"downstream,omitempty"` + + // AdoptionPolicy allows overriding the PackageVariant adoption policy + // +optional + AdoptionPolicy *pkgvarapi.AdoptionPolicy `json:"adoptionPolicy,omitempty"` + + // DeletionPolicy allows overriding the PackageVariant deletion policy + // +optional + DeletionPolicy *pkgvarapi.DeletionPolicy `json:"deletionPolicy,omitempty"` + + // Labels allows specifying the spec.Labels field of the generated PackageVariant + // +optional + Labels map[string]string `json:"labels,omitempty"` + + // LabelsExprs allows specifying the spec.Labels field of the generated PackageVariant + // using CEL to dynamically create the keys and values. Entries in this field take precedent over + // those with the same keys that are present in Labels. + // +optional + LabelExprs []MapExpr `json:"labelExprs,omitempty"` + + // Annotations allows specifying the spec.Annotations field of the generated PackageVariant + // +optional + Annotations map[string]string `json:"annotations,omitempty"` + + // AnnotationsExprs allows specifying the spec.Annotations field of the generated PackageVariant + // using CEL to dynamically create the keys and values. Entries in this field take precedent over + // those with the same keys that are present in Annotations. + // +optional + AnnotationExprs []MapExpr `json:"annotationExprs,omitempty"` + + // PackageContext allows specifying the spec.PackageContext field of the generated PackageVariant + // +optional + PackageContext *PackageContextTemplate `json:"packageContext,omitempty"` + + // Pipeline allows specifying the spec.Pipeline field of the generated PackageVariant + // +optional + Pipeline *PipelineTemplate `json:"pipeline,omitempty"` + + // Injectors allows specifying the spec.Injectors field of the generated PackageVariant + // +optional + Injectors []InjectionSelectorTemplate `json:"injectors,omitempty"` +} + +// DownstreamTemplate is used to calculate the downstream field of the resulting +// package variants. Only one of Repo and RepoExpr may be specified; +// similarly only one of Package and PackageExpr may be specified. +type DownstreamTemplate struct { + Repo *string `json:"repo,omitempty"` + Package *string `json:"package,omitempty"` + RepoExpr *string `json:"repoExpr,omitempty"` + PackageExpr *string `json:"packageExpr,omitempty"` +} + +// PackageContextTemplate is used to calculate the packageContext field of the +// resulting package variants. The plain fields and Exprs fields will be +// merged, with the Exprs fields taking precedence. +type PackageContextTemplate struct { + Data map[string]string `json:"data,omitempty"` + RemoveKeys []string `json:"removeKeys,omitempty"` + DataExprs []MapExpr `json:"dataExprs,omitempty"` + RemoveKeyExprs []string `json:"removeKeyExprs,omitempty"` +} + +// InjectionSelectorTemplate is used to calculate the injectors field of the +// resulting package variants. Exactly one of the Name and NameExpr fields must +// be specified. The other fields are optional. +type InjectionSelectorTemplate struct { + Group *string `json:"group,omitempty"` + Version *string `json:"version,omitempty"` + Kind *string `json:"kind,omitempty"` + Name *string `json:"name,omitempty"` + + NameExpr *string `json:"nameExpr,omitempty"` +} + +// MapExpr is used for various fields to calculate map entries. Only one of +// Key and KeyExpr may be specified; similarly only on of Value and ValueExpr +// may be specified. +type MapExpr struct { + Key *string `json:"key,omitempty"` + Value *string `json:"value,omitempty"` + KeyExpr *string `json:"keyExpr,omitempty"` + ValueExpr *string `json:"valueExpr,omitempty"` +} + +// PipelineTemplate is used to calculate the pipeline field of the resulting +// package variants. +type PipelineTemplate struct { + // Validators is used to caculate the pipeline.validators field of the + // resulting package variants. + // +optional + Validators []FunctionTemplate `json:"validators,omitempty"` + + // Mutators is used to caculate the pipeline.mutators field of the + // resulting package variants. + // +optional + Mutators []FunctionTemplate `json:"mutators,omitempty"` +} + +// FunctionTemplate is used in generating KRM function pipeline entries; that +// is, it is used to generate Kptfile Function objects. +type FunctionTemplate struct { + kptfilev1.Function `json:",inline"` + + // ConfigMapExprs allows use of CEL to dynamically create the keys and values in the + // function config ConfigMap. Entries in this field take precedent over those with + // the same keys that are present in ConfigMap. + // +optional + ConfigMapExprs []MapExpr `json:"configMapExprs,omitempty"` +} +``` + +This is a pretty complicated structure. To make it more understandable, the first thing to notice is that many fields +have a plain version, and an `Expr` version. The plain version is used when the value is static across all the +PackageVariants; the `Expr` version is used when the value needs to vary across PackageVariants. + +Let's consider a simple example. Suppose we have a package for provisioning namespaces called "base-ns". We want to +instantiate this several times in the `cluster-01` repository. We could do this with this PackageVariantSet: + +```yaml +apiVersion: config.porch.kpt.dev/v1alpha2 +kind: PackageVariantSet +metadata: + namespace: default + name: example +spec: + upstream: + repo: platform-catalog + package: base-ns + revision: v1 + targets: + - repositories: + - name: cluster-01 + packageNames: + - ns-1 + - ns-2 + - ns-3 +``` + +That will produce three PackageVariant resources with the same upstream, all with the same downstream repo, and each +with a different downstream package name. If we also want to set some labels identically across the packages, we can +do that with the `template.labels` field: + +```yaml +apiVersion: config.porch.kpt.dev/v1alpha2 +kind: PackageVariantSet +metadata: + namespace: default + name: example +spec: + upstream: + repo: platform-catalog + package: base-ns + revision: v1 + targets: + - repositories: + - name: cluster-01 + packageNames: + - ns-1 + - ns-2 + - ns-3 + template: + labels: + package-type: namespace + org: hr +``` + +The resulting PackageVariant resources will include `labels` in their `spec`, and will be identical other than their +names and the `downstream.package`: + +```yaml +apiVersion: config.porch.kpt.dev/v1alpha1 +kind: PackageVariant +metadata: + namespace: default + name: example-aaaa +spec: + upstream: + repo: platform-catalog + package: base-ns + revision: v1 + downstream: + repo: cluster-01 + package: ns-1 + labels: + package-type: namespace + org: hr +--- +apiVersion: config.porch.kpt.dev/v1alpha1 +kind: PackageVariant +metadata: + namespace: default + name: example-aaab +spec: + upstream: + repo: platform-catalog + package: base-ns + revision: v1 + downstream: + repo: cluster-01 + package: ns-2 + labels: + package-type: namespace + org: hr +--- + +apiVersion: config.porch.kpt.dev/v1alpha1 +kind: PackageVariant +metadata: + namespace: default + name: example-aaac +spec: + upstream: + repo: platform-catalog + package: base-ns + revision: v1 + downstream: + repo: cluster-01 + package: ns-3 + labels: + package-type: namespace + org: hr +``` + +When using other targeting means, the use of the `Expr` fields becomes more likely, because we have more possible +sources for different field values. The `Expr` values are all +[Common Expression Language (CEL)](https://github.com/google/cel-go) expressions, rather than static values. This allows +the user to construct values based upon various fields of the targets. Consider again the `repositorySelector` example, +where we have these repositories in the cluster. + +| Repository | Labels | +| ---------- | ------------------------------------- | +| cluster-01 | region=useast1, env=prod, org=hr | +| cluster-02 | region=uswest1, env=prod, org=finance | +| cluster-03 | region=useast2, env=prod, org=hr | +| cluster-04 | region=uswest1, env=prod, org=hr | + +If we create a PackageVariantSet with the following `spec`, we can use the `Expr` fields to add labels to the +PackageVariantSpecs (and thus to the resulting PackageRevisions later) that vary based on cluster. We can also use +this to vary the `injectors` defined for each PackageVariant, resulting in each PackageRevision having different +resources injected. This `spec`: + +```yaml +spec: + upstream: + repo: example-repo + package: foo + revision: v1 + targets: + - repositorySelector: + matchLabels: + env: prod + org: hr + template: + labelExprs: + key: org + valueExpr: "repository.labels['org']" + injectorExprs: + - nameExpr: "repository.labels['region'] + '-endpoints'" +``` + +will result in three PackageVariant resources, one for each Repository with the labels env=prod and org=hr. The `labels` +and `injectors` fields of the PackageVariantSpec will be different for each of these PackageVariants, as determined by +the use of the `Expr` fields in the template, as shown here: + +```yaml +apiVersion: config.porch.kpt.dev/v1alpha1 +kind: PackageVariant +metadata: + namespace: default + name: example-aaaa +spec: + upstream: + repo: example-repo + package: foo + revision: v1 + downstream: + repo: cluster-01 + package: foo + labels: + org: hr + injectors: + name: useast1-endpoints +--- +apiVersion: config.porch.kpt.dev/v1alpha1 +kind: PackageVariant +metadata: + namespace: default + name: example-aaab +spec: + upstream: + repo: example-repo + package: foo + revision: v1 + downstream: + repo: cluster-03 + package: foo + labels: + org: hr + injectors: + name: useast2-endpoints +--- +apiVersion: config.porch.kpt.dev/v1alpha1 +kind: PackageVariant +metadata: + namespace: default + name: example-aaac +spec: + upstream: + repo: example-repo + package: foo + revision: v1 + downstream: + repo: cluster-04 + package: foo + labels: + org: hr + injectors: + name: uswest1-endpoints +``` + +Since the injectors are different for each PackageVariant, the resulting PackageRevisions will each have different +resources injected. + +When CEL expressions are evaluated, they have an environment associated with them. That is, there are certain objects +that are accessible within the CEL expression. For CEL expressions used in the PackageVariantSet `template` field, +the following variables are available: + +| CEL Variable | Variable Contents | +| -------------- | ------------------------------------------------------------ | +| repoDefault | The default repository name based on the targeting criteria. | +| packageDefault | The default package name based on the targeting criteria. | +| upstream | The upstream PackageRevision. | +| repository | The downstream Repository. | +| target | The target object (details vary; see below). | + +There is one expression that is an exception to the table above. Since the `repository` value corresponds to the +Repository of the downstream, we must first evaluate the `downstream.repoExpr` expression to *find* that repository. +Thus, for that expression only, `repository` is not a valid variable. + +There is one more variable available across all CEL expressions: the `target` variable. This variable has a meaning that +varies depending on the type of target, as follows: + +| Target Type | `target` Variable Contents | +| ------------------- | ---------------------------------------------------------------------------------------------- | +| Repo/Package List | A struct with two fields: `repo` and `package`, the same as the `repoDefault` and `packageDefault` values. | +| Repository Selector | The Repository selected by the selector. Although not recommended, this could be different than the `repository` value, which an be altered with `downstream.repo` or `downstream.repoExpr`. | +| Object Selector | The Object selected by the selector. | + +For the various resource variables - `upstream`, `repository`, and `target` - arbitrary access to all fields of the +object could lead to security concerns. Therefore, only a subset of the data is available for use in CEL expressions. +Specifically, the following fields: `name`, `namespace`, `labels`, and `annotations`. + +Given the slight quirk with the `repoExpr`, it may be helpful to state the processing flow for the template evaluation: + +1. The upstream PackageRevision is loaded. It must be in the same namespace as the PackageVariantSet[^multi-ns-reg]. +1. The targets are determined. +1. For each target: + + 1. The CEL environment is prepared with `repoDefault`, `packageDefault`, `upstream`, and `target` variables. + 1. The downstream repository is determined and loaded, as follows: + + - If present, `downstream.repoExpr` is evaluated using the CEL environment, and the result used as the downstream + repository name. + - Otherwise, if `downstream.repo` is set, that is used as the downstream repository name. + - If neither is present, the default repository name based on the target is used (i.e., the same value as the + `repoDefault` variable). + - The resulting downstream repository name is used to load the corresponding Repository object in the same + namespace as the PackageVariantSet. + + 1. The downstream Repository is added to the CEL environment. + 1. All other CEL expressions are evaluated. + +1. Note that if any of the resources (e.g., the upstream PackageRevision, or the downstream Repository) are not found + our otherwise fail to load, processing stops and a failure condition is raised. Similarly, if a CEL expression + cannot be properly evaluated due to syntax or other reasons, processing stops and a failure condition is raised. + +#### Other Considerations + +It would appear convenient to automatically inject the PackageVariantSet targeting resource. However, it is better to +require the package advertise the ways it accepts injections (i.e., the GVKs it understands), and only inject those. +This keeps the separation of concerns cleaner; the package does not build in an awareness of the context in which it +expects to be deployed. For example, a package should not accept a Porch Repository resource just because that happens +to be the targeting mechanism. That would make the package unusable in other contexts. + +#### PackageVariantSet Status + +The PackageVariantSet status uses these conditions: + + - `Stalled` is set to True if there has been a failure that most likely requires user intervention. + - `Ready` is set to True if the last reconciliation successfully reconciled all targeted PackageVariant resources. + +## Future Considerations +- As an alternative to the floating tag proposal, we may instead want to have a separate tag tracking controller that + can update PV and PVS resources to tweak their upstream as the tag moves. +- Installing a collection of packages across a set of clusters, or performing the same mutations to each package in a + collection, is only supported by creating multiple PackageVariant / PackageVariantSet resources. Options to consider + for these use cases: + + - `upstreams` listing multiple packages. + - Label selector against PackageRevisions. This does not seem that useful, as PackageRevisions are highly re-usable + and would likely be composed in many different ways. + - A PackageRevisionSet resource that simply contained a list of Upstream structures and could be used as an Upstream. + This is functionally equivalent to the `upstreams` option, but that list is reusable across resources. + - Listing multiple PackageRevisionSets in the upstream would be nice as well. + - Any or all of these could be implemented in PackageVariant, PackageVariantSet, or both. + +## Footnotes + +[^porch17]: Implemented in Porch v0.0.17. +[^porch18]: Coming in Porch v0.0.18. +[^notimplemented]: Proposed here but not yet implemented as of Porch v0.0.18. +[^setns]: As of this writing, the `set-namespace` function does not have a `create` option. This should be added to + avoid the user needing to also usethe `upsert-resource` function. Such common operation should be simple forusers. +[^pvsimpl]: This document describes PackageVariantSet `v1alpha2`, which will be available starting with Porch v0.0.18. + In Porch v0.0.16 and 17, the `v1alpha1` implementation is available, but it is a somewhat different API, without + support for CEL or any injection. It is focused only on fan out targeting, and uses a [slightly different targeting API](https://github.com/nephio-project/porch/blob/main/controllers/packagevariants/api/v1alpha1/packagevariant_types.go). +[^repo-pkg-expr]: This is not exactly correct. As we will see later in the `template` discussion, this the repository + and package names listed actually are just defaults for the template; they can be further manipulated in the template + to reference different downstream repositories and package names. The same is true for the repositories selected via + the `repositorySelector` option. However, this can be ignored for now. +[^multi-ns-reg]: Note that the same upstream repository can be registered in multiple namespaces without a problem. This + simplifies access controls, avoiding the need for cross-namespace relationships between Repositories and other Porch + resources. diff --git a/static/images/porch/CaD-Core-Architecture.svg b/static/images/porch/CaD-Core-Architecture.svg new file mode 100644 index 00000000..2650dbb2 --- /dev/null +++ b/static/images/porch/CaD-Core-Architecture.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/images/porch/CaD-Overview.svg b/static/images/porch/CaD-Overview.svg new file mode 100644 index 00000000..7ced71bc --- /dev/null +++ b/static/images/porch/CaD-Overview.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/images/porch/Porch-Architecture.svg b/static/images/porch/Porch-Architecture.svg new file mode 100644 index 00000000..926bff1a --- /dev/null +++ b/static/images/porch/Porch-Architecture.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/images/porch/Porch-Inner-Loop.svg b/static/images/porch/Porch-Inner-Loop.svg new file mode 100644 index 00000000..829db8f1 --- /dev/null +++ b/static/images/porch/Porch-Inner-Loop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/images/porch/packagevariant-clone.png b/static/images/porch/packagevariant-clone.png new file mode 100644 index 0000000000000000000000000000000000000000..4f60fd9f376a4049c82274d60979ba2163cfa7ff GIT binary patch literal 28004 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 literal 0 HcmV?d00001 diff --git a/static/images/porch/packagevariant-config-injection.png b/static/images/porch/packagevariant-config-injection.png new file mode 100644 index 0000000000000000000000000000000000000000..14fe0a35dba33e16609f0a47da3861dc32f8426d GIT binary patch literal 144272 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 literal 0 HcmV?d00001 diff --git a/static/images/porch/packagevariant-context.png b/static/images/porch/packagevariant-context.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd7e0d5c9f1426caa5a2fb701077c7d9ec1d6ce GIT binary patch literal 75460 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 Tpji6-k1F3%Qz(#o82G;cgP&j> literal 0 HcmV?d00001 diff --git a/static/images/porch/packagevariant-function.png b/static/images/porch/packagevariant-function.png new file mode 100644 index 0000000000000000000000000000000000000000..d50cc7c7113a4ab25c10ee18d8de4b0bc3ed1f67 GIT binary patch literal 124315 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 CIml}O literal 0 HcmV?d00001 diff --git a/static/images/porch/packagevariant-legend.png b/static/images/porch/packagevariant-legend.png new file mode 100644 index 0000000000000000000000000000000000000000..83f3729ab92a0b32efb42d71069077218c7bdcc9 GIT binary patch literal 24320 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 ail$|GlUby|-3yo%z;^`U2(LPbPW}@QJm=^D literal 0 HcmV?d00001 diff --git a/static/images/porch/packagevariantset-target-list.png b/static/images/porch/packagevariantset-target-list.png new file mode 100644 index 0000000000000000000000000000000000000000..3c3931fe2de2e2848c66221ad30e68448c3f9758 GIT binary patch literal 64351 zcma&Oby!qg+dd2klETm+-AD=sBHbn3NJ$uk2nY_12-1y&phzjwAl=d_p)`Vk2uKSI z$S^a%wUPUN?)!P)@A%&1(0^uzz1LoQt?N3k^E|H=uA`-Lf#@O;78ce8HC07DEG(Qd z@L!nVJoqH)@hU48Rv?y|qMQNTa-#`9mD;fWnlHhH3$M~2$|owhIk|lj=TS?L>lNov zSLPySSB2p!ay|>QgAw8orRuC`J-YiP4f(YW^JF_OM;tA;{khQ6cJ zkoU2{W`RY+&o4d>2e-HVtukX-34;Fb|9UKwg!S*hvxenmxc#U&)7noW|6G8bgV(CM z?d8#tjSRETdeG6&!~mXN#=PzLFs{?;_tG;{@)9AVTlubZYlxH<3@bp{u zS7Cy>+22z(ryrx&K5ov_X9sb*M@SQyoQ`Z%UQto;#bhcwM%?p@-EQYI8TugbeZpVg z>nV(6D@iCRE28|yMlU>%W9^-N6N{4!JyckdPW|ILdR^TS%w)}aEgQS4XwBa@rT;Ey zQL*8er||-{J3AwG0b4GiPK^amKn{j02fNs&&Ye_0_Qo-^?k?%fDZNF8a*=POog%+3+PJ1 z3L2yJUtHp|Llp#CBtHct0hZRM_8bX-2Lm6nQ!hg*^cC@-~{0K(c^LuV4xa~gCU)N717-X5gE+BAH3U2Ei{nt}T zc64;yii!$5mgsLwu*^N1MjRrqNUCt3JiFe}fP1DUqlJIXPAjW`TBBug`s5BYIZe0D zRtqk!y0S{=$y@EAr!o}+0&5;;!*AQx6=P@r)pA$cYX1Y8l}AnZua|<34#Fe$AF3$h z{7wAVOFg{I{Ec(XzK#1a2OG3!+FGn7Th&JUgEd!`_-seb=jrd1)$ za4&M1DafHif7kCqm@Xhwq?6^LW@-Hh&BozZbX1RlYi%m z#s-+wzN5PyhoPT=kaXQM5D#LDhb8UU4l$A8PbT? ztK)SwvjM}D?M(7+BPTDil@D%?|0)#TrUhGxlx**Kth8^h6RmJQCSlG1xl8-WLZ~}> z^D?Q^lZ96^70xq1P}z5$y`>q-Y+jzEH9uUerb2cfSe4r~orGd>Mc%( zG1bcH`AK&@DqbB~qMnH-%+yTN9xsBHPu9rnkPSSgkzqTkA^`|Juah~c^I_`Lg=RPh zeRV#1Czo_3;H?Dfv#rJHhzJmITNqmmRdnAONfj~$uSW4x2$z2TKy1`oKHId*KlPlV zS-5DD(@1cJw>#v939@;W7PWMPKsZoVv&drJAyl^Ww?b=M`*h1TOqcWerwFC4Yu(=F z=ge(=rFV`mb&E7=nLim+{`2@(pvQ;d(6F7;=N^a;hKGE+>GSisQ_KFA#U;HlgbPa( zA71-239J6)r>M~IEsJB5&D0KDvW52?#@{O_%3yx5yZ6B57_GK3-xvBT0=NRpg%w{p zV7^V$l48%iTajHmFx-Us$H$M@V74g7ZxU=7YKZj=aYgW`imcs0?>dhE+Et*n$E0Gt z9hYm(j{UM2T$YFe%3b>wOG zY$LlP+4@1=0z5E5eEu}c9LDHYx}=rCdvgneA|2B&C8owi=k0`LB`ke%$eOH_2qtZm zG*m~yl;#{gH%#d(kLypQB@6t`~TJ$ zm;U@t0LC=)Byq7;C#x-H2ahq}XGdMvE*t0Aby%5adE^;QSNk+`R2!CPQlC|F{3tSGefLcHq@uE3%m8|(l@ z#b&*G%;fqeRk8{ZQXGSzS3|Woygv?Ip+)gy-xe;9S72SosrDW-b4y5;qNammp3R#f zThCpjp%LPa&g2RyLLI?YV8whLSj;y2nHD%Si*(sm2eIYW5=4_59REEQLF}0vN2^QU zzKGh~6gkgj%{I)6Wr)@%=sA$945GjL|!ffE0rN`~x3$vbeoAifODPh!GW0=I% zzGyn#Uv@LZ(IK1^;owm({jqZB-)lv@`)^0E@DFFsZb+ym;DbNdB_T>SxjUA|m}j>#Ady`L92%>_ux`m#@U@War*DX?af- z6#Jrd6;{Tp9yqa=nngy&&+TOhFUlUkc9e-N&*6?d`K|CBfjEE_^)h2-r5w}0;1)>{ zV!E9U93eSAzw=TEXwIS3S=7@YIHPF7^aZovhe;O$L z37|mPmQ&|ABWK(63Z_rMC42GGt+}8ZAKsO>1#{-My}Ys~UVg8eyt}!FB=8oF1HDLA zp>eZ-7Gu3#v4ropA`-5$Ll^C9cp~*jX|$YUoTY^;EQGSKIb#Cnj#2r`{%(h4F(QGm z+(~6C7a8>Pv6$%2|toS{?v&i31LRinswMlC-_#auQmNrby);mNX z0rw7NeLR#(aTl!qPuVsxH-#{LI6C-rk7I&%u?}%2q%lN1g7Li+|H@BWcxUL zYgXqt&_?j*SIcRWq@b4j)3uFe+g6eXXT%W!cjt)IsEF>*RaR}N82-f39jAFwUB-<1 zT6^-|Hh@Y;HuJv9nBcYMbYqzm>aIurJra@bN)IM!2B#yQXj?wne`-U_Yl!^*W+dhy z7y0k$T;bNuuF`mCIW9VCaVIKYC&Zq>7_MzBG{tJ^a}XzR`*xF=bN_8G^uC~Js`Zq+ zqkSiT(#z=Zm=|0QBQbU;q$g9#%s^(7fq%6z0wBdJCB_rCDCgtva{NIW^Z;o*6qUlMb}5xJl4yLn^R|Fb zPr_21m7OD7;Nx$AXGGOxBwr$ya%tqTu!(h}{0^?eeUXPuHi9`D&USW{TtUK3J`)SO zQvR#ij56v~eAtnG)eq-*`d$>X);v|AXSPL|*loe)<3B6@iJxL1e$Lu?;}%)S1`!hG zeRuTn^@n3_|2AV`uhuLi{dG<1csMpOIj}0yPGZ41IwB&O>pr!DynL>zQFrD|*Af!# ze3Pt-d_xZ17!0U*bX(68>@taK{#j@N&p-^)l)mO25k+j+zeZlBWV6)K&)_LB{?&Us zi>eAPl?j4N?H-yVw#eo#ol^eR@fjQmkb^|fKYe46}xpvmX2 zGh`Am&*+SotH#n^1~N(61m&CN#2lT>iH+BD;D0g|soi1bXf~{Jw#1md#oH)x#xLGu zcaJ%W$>9D2SX%&KUEwaZ@MX2aJh?w{pxYIAteGcUMQk$gY5Pl7=>E7(Tav|POL1g8 zuTf?2{h9j2YcnjRzv2g5{TcW5uQu1xNw_6sgn2CW-7~uFfJ0MWML?EsmiIjMs(&)$ zy^wA`Gm&ao5y2(dWE_Ic(Y!u&Io#csB%vA64Ci0y>lQJkutso%bZ0$E5Bf4IPx4m z7VTIqQT^2Tuyy@ilpocCpHlME2Z=wzHP@feqgbRL8O2<9P|KP@&Jt;0w$rwFMU=)| zDqx<-N7k&QNg|fMTkd2lTp=auAh+S)`wn>}G4d%_?*^xnycorwQ4)8Zo6S_i)~MI~ zR|vbI=KXK9_$Xmt^#3oKZM)5vEQyAsvg-w`&EQJ>`{#Dw+yP`ax>gpov+sJ}S1L*~ zMojj|{Dq~?uM91sU4eb(`E=LqzVYS=3T9swSFbYB;T#(Dd7qY!%=N9W0uhJ9!8 z8BUG}C2LOHe1;zd3n32eHC`=k@>WIY=6Ev|x`Y`Md^YUA-iOk~sWysMG_~lLejdAx zwyboSQ4+9f{6uHvAnA2fAt~JzjbHUPCT%V;^4xLbfjQrW@{(8-0bOmvww--hLZzxZ3S~71HCG(iSpZ}%cohg<1u%4d#K_gp>eukXDaL+x|g>TI}OXtf|(WR7HsUqceEK;!$wuAz!#-D=t(hBoH@R}zS% z37x9;hDiTE96?Zz76_xVJh%eE1{e+Ndq3F9OaM8+s}tbH2(Cz@{vkRB`RfJ@XDrjhR(K%( zO|WKDALEwhpk9dE$QhFG;|g%=ysrk3DxNaC1jNo1a?8L;qp_IYJ5UL}%@{C$V;scV zP9NGWhIRd=4%aJ8B6)`oQOc4=&Dl5H7wgTt_>UK~rR|+t9(?^|hj;(+<0z-k$nLsm zy5q+$k?%OI$*;`5_j}?<|Dfg(dS$NpQi@3R^MiD=%}ExN&M7^F8~+O6qo<#~;0lPI z|8`A`K-($Q(?SUZ+z7G~Keib*YY{bKd6$j+-ch6jZ4|76K%&(@EJRb4m+SRKsm>du z)$LVPkxlzBk-QiDhKc3Xun)1u`JCRK+b&hMMl$lu^-tC~kX^XKj4HH!sV9a-_X$Nj zzjM~fNM^ZVI6oF3x^b^owNR`QkhOMP3)3kIeL~;g!ykz#T-nwT7Ko7&T07C8(tgx| z%fW#Y0}%{fUqPyt{lm{GR<}dbDk3o_y=TeOSV};cdi}v`s$eLfkG+*Axctn&>r04D zH$Q$9icJ*4*aNSdRT*b}rtcdo3gmBnyhRr8idDKsZX9Wf@|O5SW~=bB4F5@UGClUb zfyvIBY_g0c4aX-YrX-`&R@9=yULcV=2ILO5-Sk2u=R~?f1J1{VSodbrE^~^^+NND9 zh`ZeZ_xJ~?(=_ni#=3W(GK&gU&BuApa{AXYvsm@sy?;|bO}B_9i^%7Usk~%Kgu-B9 z1Mn>O#J_=Mj~A7e%{-^_>IJ}MjpDHn$dWk{Q2l)c_9w%9;h40J4{D4*kV*p=$^PVv zzWb-}rAHFI=(DdgsD*Z+=>GNrjRmNwJuAd%5ur#E&qVgcs9A-1GB&ZcO@++qZLRlm zzs>JOkFH}`4pCv&LBq7sWjojB8+;uwl3-2VoKtMUzSr~f+zXMisSY0eXqqN($vZ`4 zSGC{{^#cKs@)tm~i2qWv%lCHs`&CP)wE{yVuU~G@y`X(_W%l-!Pvlw%JQ7*-6O<)2z_( z!u_!5x<#w>6_*h6YFY)8mSaOGYt&)lp61wj@cCebT_y!zUVFe5-e;nDvFcIO?q-g$ zQq8BPW%RSxbV3i!e-D()ggrLQr+dD;>ipjIdzouRg%RLhD%6vU>R%}OWIY9#DDryo z&7P&4eIZezNu+9_)bQUWLReJ$Ab!Cv7MY!VoP0*Hd4*gf;wPKwXr*`6baIUw;ELF} zZyFgb2I)8hr~}a7$TZ6$IZ`1t+lKmA8@sXrMD4s1a}4LbXl0%ugL+zp8Q1i&|7}`` zF=EQA(XZN`_mhWM9f6lEdX3F{`S<6mBdKovq(-MvPAI|Q!6rAJ)JaPBwHm!Q|H?=5 z<_JLMem`RY(`}PX8g1rg0mSA_p}u6VTM?$d=f{38yj(bfqU>|pZ*+7m_5KA+FKSQo zN@U0M!H4e`5MqnSv*PC;Pu7aqyw+p({7}?t&UbP0HtqLcc~7<@K6lT3m}XmjbRj8F zf&3Zs*JIO7Sj^72{G^R3p$Wl2E&J}`*Te~??i3VD%UwYhna8?_QuR8|?NJqyRk1G) zEnWxip@B;C2zjDOKpOLnjn<~!sp7lVnV?h{eGtuXo%S@9Y=1qDrrL+i^j75*l{87w zg>AP#U_Y$^?9QL97fKMYQJd=&6zaWY*r%Xe#CcS5ZLA33?fvG(i?bl5RWw=Ja6k-L z&KVOE1_+*>38c5gF$B&>FwbUM5;u3w3;X}Tb3{sP2Q0(NUho-F10f;XPX0k88ynjq zK#I|}_92%DC)vwgZPtJI#dz$Lv0vqo+WaW%%W?*|*{?j>d+H$BdM>S(&?Kxxkm0ar z2x4%qIesa(kzSDNyrzRgvzveAt`#+<&Uubdoqu8qJxBPrlT)pa+!_~Myt?;e&{6YC+xL8kO4&@+32}UbyZD{(gVN?pkK$CVMtPO`OVl*h zu}>{NI7CvF6Da7QJl4Kw{4h4`PoHS{0V~TbAb5`fa{NfB;2NjF2*)wo>r!{giayYZ*y2^(nr zYv;7uc>2F1mFm#XdDlZ|=qX3|F~ay4tO8~Olo~){0wUQ?!sg}zp3?Kc@TI#EfF7cd zsz+2ICO*L4xHSG~@!Qm>Bl-B!34`gg!y0l5UnF$n)GbK2D!Q08YEGUH(ttq?+}8 za}i*cw?u4{AC|&M@FsWrux%OOS4W;tV92(71(!57-VEv@X<2s z-$}~8IRVuG=v_W$lxhnVB&c`YycR!Su~X;w zlMp>5_=~~#&n7-@2vo|)c6+C+(%s`*NkFD^saX}n`gau~N-D;Z-*qnIaVFr~j91xF z&;FBlZk*1*zsirlV);MS3-+ZyE5CQ2yu6V2T4AZS@Q3<ngr@LumsLwW@J}NTERR+`KCqNQ(`@Mj2QCfOF*h%S^dA0h2-G8#= z*&xro8XCCGMgypQV#2E~(`Hbn$&m5ucTh1kG5Ax%n95Vsna))I+SJ5ifQ?t7yG!T@83KGv6ioa zINMqwQCTpm8RtJmV9%cyu_LoljQb|>$uK9d@1+cy}3J%zM^-M zl~GLLcfT85nC$FZ*}_f3X2~WwBGVPBS5f6SUS(sCzt6yDwV=?tHRE9(Lv5)GSJ_1Q z`W_yN&I@#u`1zSBVnC?`DuyjrbOBX~mif|y#1)41b7@DGR~i0b2FkPW_zG4wRybav z`2H1C9-@v<^j5LjghfToyfw=qo`M|IJQ}Sw^ouq2d!EWNaH&|wcf=;}`#IU!f*(mr zxpCKD9kK}W%g6Phu3^tqx@wrd(hyWQk{{lh^EVMvux=|XoMxFtzuH&<37-jNm(1(T zKu>P}qBKP3d5ZBosW~9zcyGULtbMXBrhJ=~a^mxUr4>*?(a0NGk%7c&K{Sv+m?!u= zI9N6I-SpdsHVWkcAN_KNvK7eI(f)c6c??T~Jta72a=h`<4$o2@=ekfyK72WEf@%FS zGl80~^1OFmImkI-9QYY`$V}NJn+fP!@4?^IxOlZs-tF&_8l`k1izT30^citF<%Gg+ zoyEt;Z@H}t0bLI<>_VBSVL2c3m6wLM6?2{s<{E!c+zqyqs=GvJ(s_GZDv2F7*AH~P zHAJht4*za`m6Sx{0p5;Gi(J3s1r~er2Ps-j9hGW(QPQoT+LI^UC_Q5HC#OUn zf69s31hbIJ8B%Lp6_q;W`}TFKgpHp~=8%DPVm#CCg!v)Xasv_cmv07$h7jdNO4ce>hf^*4$%jt$Ox^ zDs!PqQG(ltn%_)b>&;8iJ23-PI=j1kdQ{n8Ux#2JC-N;-{QX^*?@poTLXe}jkpkzJ zy0s_?xzr;70bLc7X^HIvQo)prV!ofBx46R*oZie8P){)jJ*bFUz=2CFbdDnl3>NFp zn7Y5S)?*ulw59v{IyIn%GA=b1rjKt|a0^U@PaVS2kG)@n$gcFZrxZI&*Z+2`Bc1C9 z^wOjKQoxjdIShUC3IzAvm(0{DJ#QksaeH{`nVAbQU81&$0TSVzXk`!s+WrQtI+iKX|D_C+otYCiXv4$std6 z5Oo)PcYrBJP^=E|+qmOEBa?2ux0Pp0>`dGIYZL+5Eku*@Aw&#gRVUFsc!i}LpSl10 zM?14Wz!p;4dt0mo^jQe}UBGU5vLZ54?ZIQZ>;U2MdYbWV5O0iz+wK`;UzD`YJ&8g9 zj$2)>#`=?J`9@vUFJXks*NSIwM+|-U?%}pH8~>dwCi^?O(uP$RHe_xYedZf$hPXqpCWnmbIsq{;tpa|mYZ1@?_FS9=x2PdGRu+C^re<>y z2B}$h3zHwlQPGZypQwO_i8b%$2{sm0sKRG8*=PRRjp! zm`$I@3#tiMf77za!6|DoUx8{eq>0#=v)W&mnl$VBE*PatIQc_!CJfqh(;~gZL60V? zpN+O(q^1_^WIqlJeLU~jokvR>L^cETW8`~8=x~1`PwWlX)dchBtWi<7el8swpXPM? z_XfeDlig`%1lYJv2M$$v`QtOJCYh_q+$xdfUk9^Cdz2#Rys6^&wbq)<9Qb=XvygQ@GLnHj&Q3v>)V=xbN#Kvb#p_ zR=2oh*kQZOZ#MIe%NhbK-j6pOtJp~10Q1SIGARv-9Y9%RTBicUSkCj<6dY=HgJKD{ zZy6rVsY!WlOs#-+w>N8LFM@0zUEZP|r(?XVQ~T&>l(o339s&dc8iwUAXy zF6JBhttDj~XWGqwzSDG=y9P}YZ#z!hO`_ebpVSgzsb9wUt!O^H6Q(#7T4fe3M8t_R z7d}b>*>=qH(Y%E6IM%*P>HfjUpjE%em3Kl^!o^?NuF$V`%NFrXztzg%zg{x6HFd|@HvQ5UBum1b-3HDBc}9D*+?VjIabON{XsKF;Aw z)`!hY0ruL}SJdMaJp0Sp09GWReM27A7SEX``H!Kio;j8z<#)@Am<0= zf81d-z-wzWUG&9xfjz^rOZM$)oUu=C?Q74eYg!APR@hh2$ zczm9XZmp{vg&iJa(H)Vz%;e0!15Pii^^ePn`s5cl*2x(Vv_Dx%4iq#gdlP^AI?oZ% zf|Wp^E1s?GNnv1OS~4Lei;e5#XlrY`WNjf2h~5ojz!_jnTW)Zw-Ocz%0DG!MB@2;5 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%0A4ih)S_(XPc(iTTus; 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 Date: Thu, 27 Jun 2024 17:07:46 +0300 Subject: [PATCH 2/6] Apply suggestions from code review Co-authored-by: Liam Fallon <35595825+liamfallon@users.noreply.github.com> --- content/en/docs/porch/_index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/en/docs/porch/_index.md b/content/en/docs/porch/_index.md index 7a0b62cb..a85ad913 100644 --- a/content/en/docs/porch/_index.md +++ b/content/en/docs/porch/_index.md @@ -14,11 +14,11 @@ Short for Package Orchestration. ## Porch in the Nephio architecture, history and outlook -Porch is a key component of the Nephio architecture what was originally developed in the +Porch is a key component of the Nephio architecture and was originally developed in the [kpt](https://github.com/kptdev/kpt) project. When kpt was donated to the [CNCF](https://www.cncf.io/projects/kpt/) it -was decided that Porch will not be part of the code kpt project and the code was donated to Nephio. +was decided that Porch would not be part of the kpt project and the code was donated to Nephio. -Porch is now mainteined by the Nephio community and it is a stable part of the Nephio R3 architecture, however there is -an active disucssion about the future of the project. It is possible that Porch will be replaced in the Nephio +Porch is now mainteined by the Nephio community and it is a stable part of the Nephio R3 architecture. However there is +an active disucssion about the future of the project. It is possible that the current Porch component will be replaced in the Nephio architecture with a different codebase implementing the same concepts but not in a backward compatible way. Potential -candidates, like [pkgserver](https://docs.pkgserver.dev/) are discussed in the Nephio community. \ No newline at end of file +candidates such as [pkgserver](https://docs.pkgserver.dev/) are being discussed in the Nephio community. \ No newline at end of file From 4f421a880566de2e4064a4f55f785620edd970fa Mon Sep 17 00:00:00 2001 From: Gergely Csatari Date: Thu, 4 Jul 2024 11:19:36 +0300 Subject: [PATCH 3/6] Adding more pieces of the Porch documentation Signed-off-by: Gergely Csatari --- .../porch/function-runner-pod-templates.md | 98 + .../en/docs/porch/install-and-using-porch.md | 1975 +++++++++++++++++ content/en/docs/porch/running-porch/_index.md | 7 + .../porch/running-porch/running-locally.md | 121 + .../porch/running-porch/running-on-GKE.md | 271 +++ 5 files changed, 2472 insertions(+) create mode 100644 content/en/docs/porch/function-runner-pod-templates.md create mode 100644 content/en/docs/porch/install-and-using-porch.md create mode 100644 content/en/docs/porch/running-porch/_index.md create mode 100644 content/en/docs/porch/running-porch/running-locally.md create mode 100644 content/en/docs/porch/running-porch/running-on-GKE.md diff --git a/content/en/docs/porch/function-runner-pod-templates.md b/content/en/docs/porch/function-runner-pod-templates.md new file mode 100644 index 00000000..67920f2f --- /dev/null +++ b/content/en/docs/porch/function-runner-pod-templates.md @@ -0,0 +1,98 @@ +--- +title: "Function runner pod templating" +type: docs +weight: 4 +description: +--- + +## Why + +`porch-fn-runner` implements a simplistic function-as-a-service for executing kpt functions, running the needed kpt +functions wrapped in a grpc server. The function is starting up a number of function evaluator pods for each of the kpt +functions. As with any operator that manages pods, it's good to provide some templating and parametrization capabilities +of the pods that will be managed by the function runner. + +## Contract for writing pod templates + +The following contract needs to be fulfilled by any function evaluator pod template: + +1. There is a container named "function". +2. The entrypoint of the "function" container will start the wrapper grpc server. +3. The image of the "function" container can be set to the kpt function's image without impacting starting the + entrypoint. +4. The arguments of the "function" container can be appended with the entries from the Dockerfile ENTRYPOINT of the kpt + function image. + +## Enabling pod templating on function runner + +A Configmap with the pod template should be created in the namespace where the porch-fn-runner pod is running. +The configmap's name should be included as `--function-pod-template` in the command line arguments in the pod spec of the function runner. + +```yaml +... +spec: + serviceAccountName: porch-fn-runner + containers: + - name: function-runner + image: gcr.io/example-google-project-id/porch-function-runner:latest + imagePullPolicy: IfNotPresent + command: + - /server + - --config=/config.yaml + - --functions=/functions + - --pod-namespace=porch-fn-system + - --function-pod-template=kpt-function-eval-pod-template + env: + - name: WRAPPER_SERVER_IMAGE + value: gcr.io/example-google-project-id/porch-wrapper-server:latest + ports: + - containerPort: 9445 + # Add grpc readiness probe to ensure the cache is ready + readinessProbe: + exec: + command: + - /grpc-health-probe + - -addr + - localhost:9445 +... +``` + +## Example pod template + +The below pod template Configmap matches the default behavior: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: kpt-function-eval-pod-template +data: + template: | + apiVersion: v1 + kind: Pod + annotations: + cluster-autoscaler.kubernetes.io/safe-to-evict: true + spec: + initContainers: + - name: copy-wrapper-server + image: gcr.io/example-google-project-id/porch-wrapper-server:latest + command: + - cp + - -a + - /wrapper-server/. + - /wrapper-server-tools + volumeMounts: + - name: wrapper-server-tools + mountPath: /wrapper-server-tools + containers: + - name: function + image: image-replaced-by-kpt-func-image + command: + - /wrapper-server-tools/wrapper-server + volumeMounts: + - name: wrapper-server-tools + mountPath: /wrapper-server-tools + volumes: + - name: wrapper-server-tools + emptyDir: {} +``` \ No newline at end of file diff --git a/content/en/docs/porch/install-and-using-porch.md b/content/en/docs/porch/install-and-using-porch.md new file mode 100644 index 00000000..16a7e506 --- /dev/null +++ b/content/en/docs/porch/install-and-using-porch.md @@ -0,0 +1,1975 @@ +# Starting with Porch Tutorial + +This tutorial is a guide to installing and using Porch. It is based on the [Porch demo produced by Tal Liron of Google](https://github.com/tliron/klab/tree/main/environments/porch-demo). Users should be very comfortable with using `git`, `docker`, and `kubernetes`. + +# Table of Contents +1. [Prerequisites](#Prerequisites) +2. [Create the Kind clusters for management and edge1](#Create-the-Kind-clusters-for-management-and-edge1) +3. [Install MetalLB on the management cluster](#Install-MetalLB-on-the-management-cluster) +4. [Deploy and set up gitea on the management cluster](#Deploy-and-set-up-gitea-on-the-management-cluster) +5. [Create repositories on Gitea for `management` and `edge1`](#Create-repositories-on-Gitea-for-management-and-edge1) +6. [Install Porch](#Install-Porch) +7. [Connect the Gitea repositories to Porch](#Connect-the-Gitea-repositories-to-Porch) +8. [Configure configsync on the workload cluster](#Configure-configsync-on-the-workload-cluster) +9. [Exploring the Porch resources](#Exploring-the-Porch-resources) +10. [The porchctl command](#The-porchctl-command) +11. [Creating a blueprint in Porch](#Creating-a-blueprint-in-Porch) +12. [Deploying a blueprint onto a workload cluster](#Deploying-a-blueprint-onto-a-workload-cluster) +13. [Deploying using Package Variant Sets](#Deploying-using-Package-Variant-Sets) + +See also [the Nephio Learning Resource](https://github.com/nephio-project/docs/blob/main/learning.md) page for background help and information. + +## Prerequisites + +The tutorial can be executed on a Linux VM or directly on a laptop. It has been verified to execute on a Macbook Pro M1 machine and an Ubuntu 20.04 VM. + +The following software should be installed prior to running through the tutorial: +1. [git](https://git-scm.com/) +2. [Docker](https://www.docker.com/get-started/) +3. [kubectl](https://kubernetes.io/docs/reference/kubectl/) +4. [kind](https://kind.sigs.k8s.io/) +5. [kpt](https://github.com/kptdev/kpt) +6. [The go programming language](https://go.dev/) +7. [Visual Studio Code](https://code.visualstudio.com/download) +8. [VS Code extensions for go](https://code.visualstudio.com/docs/languages/go) + +## Clone the repo and cd into the tutorial + +``` +git clone https://github.com/nephio-project/porch.git + +cd porch/docs/tutorials/starting-with-porch/ +``` + +## Create the Kind clusters for management and edge1 + +Create the clusters: + +``` +kind create cluster --config=kind_management_cluster.yaml +kind create cluster --config=kind_edge1_cluster.yaml +``` + +Output the kubectl config for the clusters: + +``` +kind get kubeconfig --name=management > ~/.kube/kind-management-config +kind get kubeconfig --name=edge1 > ~/.kube/kind-edge1-config +``` + +Toggling kubectl between the clusters: + +``` +export KUBECONFIG=~/.kube/kind-management-config + +export KUBECONFIG=~/.kube/kind-edge1-config +``` + +## Install MetalLB on the management cluster + +Install the MetalLB load balancer on the management cluster to expose services: +``` +export KUBECONFIG=~/.kube/kind-management-config +kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.12/config/manifests/metallb-native.yaml +kubectl wait --namespace metallb-system \ + --for=condition=ready pod \ + --selector=component=controller \ + --timeout=90s +``` + +Check the subnet that is being used by the `kind` network in docker +``` +docker network inspect kind | grep Subnet +``` + +Sample output: +``` +"Subnet": "172.18.0.0/16", +"Subnet": "fc00:f853:ccd:e793::/64" +``` + +Edit the `metallb-conf.yaml` file and ensure the `spec.addresses` range is in the IPv4 subnet being used by the `kind` network in docker. +``` +... +spec: + addresses: + - 172.18.255.200-172.18.255.250 +... +``` + +Apply the MetalLB configuration: +``` +kubectl apply -f metallb-conf.yaml +``` + +## Deploy and set up gitea on the management cluster using kpt + +Get the gitea kpt package: + +``` +export KUBECONFIG=~/.kube/kind-management-config + +cd kpt_packages + +kpt pkg get https://github.com/nephio-project/catalog/tree/main/distros/sandbox/gitea +``` + +Comment out the preconfigured IP address from the `gitea/service-gitea.yaml` file in the gitea Kpt package: +``` +11c11 +< metallb.universe.tf/loadBalancerIPs: 172.18.0.200 +--- +> # metallb.universe.tf/loadBalancerIPs: 172.18.0.200 +``` + +Now render, init and apply the Gitea Kpt package: +``` +kpt fn render gitea +kpt live init gitea # You only need to do this command once +kpt live apply gitea +``` + +Once the package is applied, all the gitea pods should come up and you should be able to reach the Gitea UI on the exposed IP Address/port of the gitea service. + +``` +kubectl get svc -n gitea gitea + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +gitea LoadBalancer 10.96.243.120 172.18.255.200 22:31305/TCP,3000:31102/TCP 10m +``` +The UI is available at http://172.18.255.200:3000 in the example above. + +To login to Gitea, use the credentials `nephio:secret`. + +## Create repositories on Gitea for management and edge1 + +On the gitea UI, click the '+' opposite "Repositories" and fill in the form for both the `management` and `edge1` repositories. Use default values except for the following fields: + +- Repository Name: "Management" or "edge1" +- Description: Something appropriate + +Alternatively, we can create the repos via curl: +``` +curl -k -H "content-type: application/json" "http://nephio:secret@172.18.255.200:3000/api/v1/user/repos" --data '{"name":"management"}' + +curl -k -H "content-type: application/json" "http://nephio:secret@172.18.255.200:3000/api/v1/user/repos" --data '{"name":"edge1"}' +``` + +Check the repos: +``` + curl -k -H "content-type: application/json" "http://nephio:secret@172.18.255.200:3000/api/v1/user/repos" | grep -Po '"name": *\K"[^"]*"' +``` + +Now initialize both repos with an initial commit. + +Initialize the `management` repo + +``` +cd ../repos +git clone http://172.18.255.200:3000/nephio/management +cd management + +touch README.md +git init +git checkout -b main +git config user.name nephio +git add README.md + +git commit -m "first commit" +git remote remove origin +git remote add origin http://nephio:secret@172.18.255.200:3000/nephio/management.git +git remote -v +git push -u origin main +cd .. + ``` + +Initialize the `edge1` repo + +``` +git clone http://172.18.255.200:3000/nephio/edge1 +cd edge1 + +touch README.md +git init +git checkout -b main +git config user.name nephio +git add README.md + +git commit -m "first commit" +git remote remove origin +git remote add origin http://nephio:secret@172.18.255.200:3000/nephio/edge1.git +git remote -v +git push -u origin main +cd ../../ +``` + +## Install Porch + +We will use the Porch Kpt package from Nephio catalog repo. +``` +cd kpt_packages + +kpt pkg get https://github.com/nephio-project/catalog/tree/main/nephio/core/porch +``` + +Now we can install porch. We render the kpt package and then init and apply it. + +``` +kpt fn render porch +kpt live init porch # You only need to do this command once +kpt live apply porch +``` +Check that the Porch PODs are running on the management cluster: +``` +kubectl get pod -n porch-system +NAME READY STATUS RESTARTS AGE +function-runner-7994f65554-nrzdh 1/1 Running 0 81s +function-runner-7994f65554-txh9l 1/1 Running 0 81s +porch-controllers-7fb4497b77-2r2r6 1/1 Running 0 81s +porch-server-68bfdddbbf-pfqsm 1/1 Running 0 81s +``` +Check that the Porch CRDs and other resources have been created: +``` +kubectl api-resources | grep porch +packagerevs config.porch.kpt.dev/v1alpha1 true PackageRev +packagevariants config.porch.kpt.dev/v1alpha1 true PackageVariant +packagevariantsets config.porch.kpt.dev/v1alpha2 true PackageVariantSet +repositories config.porch.kpt.dev/v1alpha1 true Repository +functions porch.kpt.dev/v1alpha1 true Function +packagerevisionresources porch.kpt.dev/v1alpha1 true PackageRevisionResources +packagerevisions porch.kpt.dev/v1alpha1 true PackageRevision +packages porch.kpt.dev/v1alpha1 true Package +``` + +## Connect the Gitea repositories to Porch + +Create a demo namespace: + +``` +kubectl create namespace porch-demo +``` + +Create a secret for the Gitea credentials in the demo namespace: + +``` +kubectl create secret generic gitea \ + --namespace=porch-demo \ + --type=kubernetes.io/basic-auth \ + --from-literal=username=nephio \ + --from-literal=password=secret +``` + +Now, define the Gitea repositories in Porch: +``` +kubectl apply -f porch-repositories.yaml +``` + +Check that the repositories have been correctly created: +``` +kubectl get repositories -n porch-demo +NAME TYPE CONTENT DEPLOYMENT READY ADDRESS +edge1 git Package true True http://172.18.255.200:3000/nephio/edge1.git +external-blueprints git Package false True https://github.com/nephio-project/free5gc-packages.git +management git Package false True http://172.18.255.200:3000/nephio/management.git +``` + +## Configure configsync on the workload cluster + +Configsync is installed on the `edge1` cluster so that it syncs the contents of the `edge1` repository onto the `edge1` workload cluster. We will use the configsync package from Nephio. + +``` +export KUBECONFIG=~/.kube/kind-edge1-config + +cd kpt_packages + +kpt pkg get https://github.com/nephio-project/catalog/tree/main/nephio/core/configsync +kpt fn render configsync +kpt live init configsync +kpt live apply configsync +``` + +Check that the configsync PODs are up and running: +``` +kubectl get pod -n config-management-system +NAME READY STATUS RESTARTS AGE +config-management-operator-6946b77565-f45pc 1/1 Running 0 118m +reconciler-manager-5b5d8557-gnhb2 2/2 Running 0 118m +``` + +Now, we need to set up a Rootsync CR to synchronize the `edge1` repo: + +``` +kpt pkg get https://github.com/nephio-project/catalog/tree/main/nephio/optional/rootsync +``` + +Edit the `rootsync/package-context.yaml` file to set the name of the cluster/repo we are syncing from/to: +``` +9c9 +< name: example-rootsync +--- +> name: edge1 +``` + +Render the package. This configures the `rootsync/rootsync.yaml` file in the Kpt package: +``` +kpt fn render rootsync +``` + +Edit the `rootsync/rootsync.yaml` file to set the IP address of Gitea and to turn off authentication for accessing gitea: +``` +11c11 +< repo: http://172.18.0.200:3000/nephio/example-cluster-name.git +--- +> repo: http://172.18.255.200:3000/nephio/edge1.git +13,15c13,16 +< auth: token +< secretRef: +< name: example-cluster-name-access-token-configsync +--- +> auth: none +> # auth: token +> # secretRef: +> # name: edge1-access-token-configsync +``` + +Initialize and apply rootsync: +``` +export KUBECONFIG=~/.kube/kind-edge1-config + +kpt live init rootsync # This command is only needed once +kpt live apply rootsync +``` +Check that the RootSync CR is created: +``` +kubectl get rootsync -n config-management-system +NAME RENDERINGCOMMIT RENDERINGERRORCOUNT SOURCECOMMIT SOURCEERRORCOUNT SYNCCOMMIT SYNCERRORCOUNT +edge1 613eb1ad5632d95c4336894f8a128cc871fb3266 613eb1ad5632d95c4336894f8a128cc871fb3266 613eb1ad5632d95c4336894f8a128cc871fb3266 +``` + +Check that Configsync is synchronized with the repo on the management cluster: +``` +kubectl get pod -n config-management-system -l app=reconciler +NAME READY STATUS RESTARTS AGE +root-reconciler-edge1-68576f878c-92k54 4/4 Running 0 2d17h + +kubectl logs -n config-management-system root-reconciler-edge1-68576f878c-92k54 -c git-sync -f +``` +
    +Produces output similar to this + +``` +INFO: detected pid 1, running init handler +I0105 17:50:11.472934 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="" "cmd"="git config --global gc.autoDetach false" +I0105 17:50:11.493046 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="" "cmd"="git config --global gc.pruneExpire now" +I0105 17:50:11.513487 15 main.go:473] "level"=0 "msg"="starting up" "pid"=15 "args"=["/git-sync","--root=/repo/source","--dest=rev","--max-sync-failures=30","--error-file=error.json","--v=5"] +I0105 17:50:11.514044 15 main.go:923] "level"=0 "msg"="cloning repo" "origin"="http://172.18.255.200:3000/nephio/edge1.git" "path"="/repo/source" +I0105 17:50:11.514061 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="" "cmd"="git clone -v --no-checkout -b main --depth 1 http://172.18.255.200:3000/nephio/edge1.git /repo/source" +I0105 17:50:11.706506 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source" "cmd"="git rev-parse HEAD" +I0105 17:50:11.729292 15 main.go:737] "level"=0 "msg"="syncing git" "rev"="HEAD" "hash"="385295a2143f10a6cda0cf4609c45d7499185e01" +I0105 17:50:11.729332 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source" "cmd"="git fetch -f --tags --depth 1 http://172.18.255.200:3000/nephio/edge1.git main" +I0105 17:50:11.920110 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source" "cmd"="git cat-file -t 385295a2143f10a6cda0cf4609c45d7499185e01" +I0105 17:50:11.945545 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source" "cmd"="git rev-parse 385295a2143f10a6cda0cf4609c45d7499185e01" +I0105 17:50:11.967150 15 main.go:726] "level"=1 "msg"="removing worktree" "path"="/repo/source/385295a2143f10a6cda0cf4609c45d7499185e01" +I0105 17:50:11.967359 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source" "cmd"="git worktree prune" +I0105 17:50:11.987522 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source" "cmd"="git worktree add --detach /repo/source/385295a2143f10a6cda0cf4609c45d7499185e01 385295a2143f10a6cda0cf4609c45d7499185e01 --no-checkout" +I0105 17:50:12.057698 15 main.go:772] "level"=0 "msg"="adding worktree" "path"="/repo/source/385295a2143f10a6cda0cf4609c45d7499185e01" "branch"="origin/main" +I0105 17:50:12.057988 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source/385295a2143f10a6cda0cf4609c45d7499185e01" "cmd"="git reset --hard 385295a2143f10a6cda0cf4609c45d7499185e01" +I0105 17:50:12.099783 15 main.go:833] "level"=0 "msg"="reset worktree to hash" "path"="/repo/source/385295a2143f10a6cda0cf4609c45d7499185e01" "hash"="385295a2143f10a6cda0cf4609c45d7499185e01" +I0105 17:50:12.099805 15 main.go:838] "level"=0 "msg"="updating submodules" +I0105 17:50:12.099976 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source/385295a2143f10a6cda0cf4609c45d7499185e01" "cmd"="git submodule update --init --recursive --depth 1" +I0105 17:50:12.442466 15 main.go:694] "level"=1 "msg"="creating tmp symlink" "root"="/repo/source/" "dst"="385295a2143f10a6cda0cf4609c45d7499185e01" "src"="tmp-link" +I0105 17:50:12.442494 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source/" "cmd"="ln -snf 385295a2143f10a6cda0cf4609c45d7499185e01 tmp-link" +I0105 17:50:12.453694 15 main.go:699] "level"=1 "msg"="renaming symlink" "root"="/repo/source/" "old_name"="tmp-link" "new_name"="rev" +I0105 17:50:12.453718 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source/" "cmd"="mv -T tmp-link rev" +I0105 17:50:12.467904 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source" "cmd"="git gc --auto" +I0105 17:50:12.492329 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source" "cmd"="git cat-file -t HEAD" +I0105 17:50:12.518878 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source" "cmd"="git rev-parse HEAD" +I0105 17:50:12.540979 15 main.go:585] "level"=1 "msg"="next sync" "wait_time"=15000000000 +I0105 17:50:27.553609 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source/rev" "cmd"="git rev-parse HEAD" +I0105 17:50:27.600401 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source/rev" "cmd"="git ls-remote -q http://172.18.255.200:3000/nephio/edge1.git refs/heads/main" +I0105 17:50:27.694035 15 main.go:1065] "level"=1 "msg"="no update required" "rev"="HEAD" "local"="385295a2143f10a6cda0cf4609c45d7499185e01" "remote"="385295a2143f10a6cda0cf4609c45d7499185e01" +I0105 17:50:27.694159 15 main.go:585] "level"=1 "msg"="next sync" "wait_time"=15000000000 +I0105 17:50:42.695482 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source/rev" "cmd"="git rev-parse HEAD" +I0105 17:50:42.733276 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source/rev" "cmd"="git ls-remote -q http://172.18.255.200:3000/nephio/edge1.git refs/heads/main" +I0105 17:50:42.826422 15 main.go:1065] "level"=1 "msg"="no update required" "rev"="HEAD" "local"="385295a2143f10a6cda0cf4609c45d7499185e01" "remote"="385295a2143f10a6cda0cf4609c45d7499185e01" +I0105 17:50:42.826611 15 main.go:585] "level"=1 "msg"="next sync" "wait_time"=15000000000 + +....... + +I0108 11:04:05.935586 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source/rev" "cmd"="git rev-parse HEAD" +I0108 11:04:05.981750 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="/repo/source/rev" "cmd"="git ls-remote -q http://172.18.255.200:3000/nephio/edge1.git refs/heads/main" +I0108 11:04:06.079536 15 main.go:1065] "level"=1 "msg"="no update required" "rev"="HEAD" "local"="385295a2143f10a6cda0cf4609c45d7499185e01" "remote"="385295a2143f10a6cda0cf4609c45d7499185e01" +I0108 11:04:06.079599 15 main.go:585] "level"=1 "msg"="next sync" "wait_time"=15000000000 +``` +
    + +## Exploring the Porch resources + +We have configured three repositories in Porch: +``` +kubectl get repositories -n porch-demo +NAME TYPE CONTENT DEPLOYMENT READY ADDRESS +edge1 git Package true True http://172.18.255.200:3000/nephio/edge1.git +external-blueprints git Package false True https://github.com/nephio-project/free5gc-packages.git +management git Package false True http://172.18.255.200:3000/nephio/management.git +``` + +A repository is a CR of the Porch Repository CRD. You can examine the 'repositories.config.porch.kpt.dev' CRD with either of the following commands (both of which are rather verbose): +``` +kubectl get crd -n porch-system repositories.config.porch.kpt.dev -o yaml +kubectl describe crd -n porch-system repositories.config.porch.kpt.dev +``` +You can of course examine any other CRD using the commands above and changing the CRD name/namespace. + +The full list of Nephio CRDs is as below: + +``` +kubectl api-resources --api-group=porch.kpt.dev +NAME SHORTNAMES APIVERSION NAMESPACED KIND +functions porch.kpt.dev/v1alpha1 true Function +packagerevisionresources porch.kpt.dev/v1alpha1 true PackageRevisionResources +packagerevisions porch.kpt.dev/v1alpha1 true PackageRevision +packages porch.kpt.dev/v1alpha1 true Package +``` + +
    +The PackageRevision CRD is used to keep track of revision (or version) of each package found in the repos. + +``` +kubectl get packagerevision -n porch-demo +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +external-blueprints-922121d0bcdd56bfa8cae6c375720e2b5f358ab0 free5gc-cp main main false Published external-blueprints +external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9 free5gc-cp v1 v1 true Published external-blueprints +external-blueprints-716aae722092dbbb9470e56079b90ad76ec8f0d5 free5gc-operator main main false Published external-blueprints +external-blueprints-d65dc89f7a2472650651e9aea90edfcc81a9afc6 free5gc-operator v1 v1 false Published external-blueprints +external-blueprints-9fee880e8fa52066f052c9cae7aac2e2bc1b5a54 free5gc-operator v2 v2 false Published external-blueprints +external-blueprints-91d60ee31d2d0a1a6d5f1807593d5419434accd3 free5gc-operator v3 v3 false Published external-blueprints +external-blueprints-21f19a0641cf520e7dc6268e64c58c2c30c27036 free5gc-operator v4 v4 false Published external-blueprints +external-blueprints-bf2e7522ee92680bd49571ab309e3f61320cf36d free5gc-operator v5 v5 true Published external-blueprints +external-blueprints-c1b9ecb73118e001ab1d1213e6a2c94ab67a0939 free5gc-upf main main false Published external-blueprints +external-blueprints-5d48b1516e7b1ea15830ffd76b230862119981bd free5gc-upf v1 v1 true Published external-blueprints +external-blueprints-ed97798b46b36d135cf23d813eccad4857dff90f pkg-example-amf-bp main main false Published external-blueprints +external-blueprints-ed744bfdf4a4d15d4fcf3c46fde27fd6ac32d180 pkg-example-amf-bp v1 v1 false Published external-blueprints +external-blueprints-5489faa80782f91f1a07d04e206935d14c1eb24c pkg-example-amf-bp v2 v2 false Published external-blueprints +external-blueprints-16e2255bd433ef532684a3c1434ae0bede175107 pkg-example-amf-bp v3 v3 false Published external-blueprints +external-blueprints-7689cc6c953fa83ea61283983ce966dcdffd9bae pkg-example-amf-bp v4 v4 false Published external-blueprints +external-blueprints-caff9609883eea7b20b73b7425e6694f8eb6adc3 pkg-example-amf-bp v5 v5 true Published external-blueprints +external-blueprints-00b6673c438909975548b2b9f20c2e1663161815 pkg-example-smf-bp main main false Published external-blueprints +external-blueprints-4f7dfbede99dc08f2b5144ca550ca218109c52f2 pkg-example-smf-bp v1 v1 false Published external-blueprints +external-blueprints-3d9ab8f61ce1d35e264d5719d4b3c0da1ab02328 pkg-example-smf-bp v2 v2 false Published external-blueprints +external-blueprints-2006501702e105501784c78be9e7d57e426d85e8 pkg-example-smf-bp v3 v3 false Published external-blueprints +external-blueprints-c97ed7c13b3aa47cb257217f144960743aec1253 pkg-example-smf-bp v4 v4 false Published external-blueprints +external-blueprints-3bd78e46b014dac5cc0c58788c1820d043d61569 pkg-example-smf-bp v5 v5 true Published external-blueprints +external-blueprints-c3f660848d9d7a4df5481ec2e06196884778cd84 pkg-example-upf-bp main main false Published external-blueprints +external-blueprints-4cb00a17c1ee2585d6c187ba4d0211da960c0940 pkg-example-upf-bp v1 v1 false Published external-blueprints +external-blueprints-5903efe295026124e6fea926df154a72c5bd1ea9 pkg-example-upf-bp v2 v2 false Published external-blueprints +external-blueprints-16142d8d23c1b8e868a9524a1b21634c79b432d5 pkg-example-upf-bp v3 v3 false Published external-blueprints +external-blueprints-60ef45bb8f55b63556e7467f16088325022a7ece pkg-example-upf-bp v4 v4 false Published external-blueprints +external-blueprints-7757966cc7b965f1b9372370a4b382c8375a2b40 pkg-example-upf-bp v5 v5 true Published external-blueprints +``` +
    + +
    +The PackageRevisionResources resource is an API Aggregation resource that Porch uses to wrap the GET URL for the package on its repo. + +``` +kubectl get packagerevisionresources -n porch-demo +NAME PACKAGE WORKSPACENAME REVISION REPOSITORY FILES +external-blueprints-922121d0bcdd56bfa8cae6c375720e2b5f358ab0 free5gc-cp main main external-blueprints 28 +external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9 free5gc-cp v1 v1 external-blueprints 28 +external-blueprints-716aae722092dbbb9470e56079b90ad76ec8f0d5 free5gc-operator main main external-blueprints 14 +external-blueprints-d65dc89f7a2472650651e9aea90edfcc81a9afc6 free5gc-operator v1 v1 external-blueprints 11 +external-blueprints-9fee880e8fa52066f052c9cae7aac2e2bc1b5a54 free5gc-operator v2 v2 external-blueprints 11 +external-blueprints-91d60ee31d2d0a1a6d5f1807593d5419434accd3 free5gc-operator v3 v3 external-blueprints 14 +external-blueprints-21f19a0641cf520e7dc6268e64c58c2c30c27036 free5gc-operator v4 v4 external-blueprints 14 +external-blueprints-bf2e7522ee92680bd49571ab309e3f61320cf36d free5gc-operator v5 v5 external-blueprints 14 +external-blueprints-c1b9ecb73118e001ab1d1213e6a2c94ab67a0939 free5gc-upf main main external-blueprints 6 +external-blueprints-5d48b1516e7b1ea15830ffd76b230862119981bd free5gc-upf v1 v1 external-blueprints 6 +external-blueprints-ed97798b46b36d135cf23d813eccad4857dff90f pkg-example-amf-bp main main external-blueprints 16 +external-blueprints-ed744bfdf4a4d15d4fcf3c46fde27fd6ac32d180 pkg-example-amf-bp v1 v1 external-blueprints 7 +external-blueprints-5489faa80782f91f1a07d04e206935d14c1eb24c pkg-example-amf-bp v2 v2 external-blueprints 8 +external-blueprints-16e2255bd433ef532684a3c1434ae0bede175107 pkg-example-amf-bp v3 v3 external-blueprints 16 +external-blueprints-7689cc6c953fa83ea61283983ce966dcdffd9bae pkg-example-amf-bp v4 v4 external-blueprints 16 +external-blueprints-caff9609883eea7b20b73b7425e6694f8eb6adc3 pkg-example-amf-bp v5 v5 external-blueprints 16 +external-blueprints-00b6673c438909975548b2b9f20c2e1663161815 pkg-example-smf-bp main main external-blueprints 17 +external-blueprints-4f7dfbede99dc08f2b5144ca550ca218109c52f2 pkg-example-smf-bp v1 v1 external-blueprints 8 +external-blueprints-3d9ab8f61ce1d35e264d5719d4b3c0da1ab02328 pkg-example-smf-bp v2 v2 external-blueprints 9 +external-blueprints-2006501702e105501784c78be9e7d57e426d85e8 pkg-example-smf-bp v3 v3 external-blueprints 17 +external-blueprints-c97ed7c13b3aa47cb257217f144960743aec1253 pkg-example-smf-bp v4 v4 external-blueprints 17 +external-blueprints-3bd78e46b014dac5cc0c58788c1820d043d61569 pkg-example-smf-bp v5 v5 external-blueprints 17 +external-blueprints-c3f660848d9d7a4df5481ec2e06196884778cd84 pkg-example-upf-bp main main external-blueprints 17 +external-blueprints-4cb00a17c1ee2585d6c187ba4d0211da960c0940 pkg-example-upf-bp v1 v1 external-blueprints 8 +external-blueprints-5903efe295026124e6fea926df154a72c5bd1ea9 pkg-example-upf-bp v2 v2 external-blueprints 8 +external-blueprints-16142d8d23c1b8e868a9524a1b21634c79b432d5 pkg-example-upf-bp v3 v3 external-blueprints 17 +external-blueprints-60ef45bb8f55b63556e7467f16088325022a7ece pkg-example-upf-bp v4 v4 external-blueprints 17 +external-blueprints-7757966cc7b965f1b9372370a4b382c8375a2b40 pkg-example-upf-bp v5 v5 external-blueprints 17 +``` +
    + +Let's examine the `free5gc-cp v1` package. + +
    +The PackageRevision CR name for free5gc-cp v1 is external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9. + +``` +kubectl get packagerevision -n porch-demo external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9 -o yaml +apiVersion: porch.kpt.dev/v1alpha1 +kind: PackageRevision +metadata: + creationTimestamp: "2023-06-13T13:35:34Z" + labels: + kpt.dev/latest-revision: "true" + name: external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9 + namespace: porch-demo + resourceVersion: 5fc9561dcd4b2630704c192e89887490e2ff3c61 + uid: uid:free5gc-cp:v1 +spec: + lifecycle: Published + packageName: free5gc-cp + repository: external-blueprints + revision: v1 + workspaceName: v1 +status: + publishTimestamp: "2023-06-13T13:35:34Z" + publishedBy: dnaleksandrov@gmail.com + upstreamLock: {} +``` +
    + +
    +Getting the PackageRevisionResources pulls the package from its repository with each file serialized into a name-value map of resources in it's spec. + +``` +kubectl get packagerevisionresources -n porch-demo external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9 -o yaml +apiVersion: porch.kpt.dev/v1alpha1 +kind: PackageRevisionResources +metadata: + creationTimestamp: "2023-06-13T13:35:34Z" + name: external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9 + namespace: porch-demo + resourceVersion: 5fc9561dcd4b2630704c192e89887490e2ff3c61 + uid: uid:free5gc-cp:v1 +spec: + packageName: free5gc-cp + repository: external-blueprints + resources: + Kptfile: | + apiVersion: kpt.dev/v1 + kind: Kptfile + metadata: + name: free5gc-cp + annotations: + config.kubernetes.io/local-config: "true" + info: + description: this package represents free5gc NFs, which are required to perform E2E conn testing + pipeline: + mutators: + - image: gcr.io/kpt-fn/set-namespace:v0.4.1 + configPath: package-context.yaml + README.md: "# free5gc-cp\n\n## Description\nPackage representing free5gc control + plane NFs.\n\nPackage definition is based on [Towards5gs helm charts](https://github.com/Orange-OpenSource/towards5gs-helm), + \nand service level configuration is preserved as defined there.\n\n### Network + Functions (NFs)\n\nfree5gc project implements following NFs:\n\n\n| NF | Description + | local-config |\n| --- | --- | --- |\n| AMF | Access and Mobility Management + Function | true |\n| AUSF | Authentication Server Function | false |\n| NRF + | Network Repository Function | false |\n| NSSF | Network Slice Selection Function + | false |\n| PCF | Policy Control Function | false |\n| SMF | Session Management + Function | true |\n| UDM | Unified Data Management | false |\n| UDR | Unified + Data Repository | false |\n\nalso Database and Web UI is defined:\n\n| Service + | Description | local-config |\n| --- | --- | --- |\n| mongodb | Database to + store free5gc data | false |\n| webui | UI used to register UE | false |\n\nNote: + `local-config: true` indicates that this resources won't be deployed to the + workload cluster\n\n### Dependencies\n\n- `mongodb` requires `Persistent Volume`. + We need to assure that dynamic PV provisioning will be available on the cluster\n- + `NRF` should be running before other NFs will be instantiated\n - all NFs + packages contain `wait-nrf` init-container\n- `NRF` and `WEBUI` require DB\n + \ - packages contain `wait-mongodb` init-container\n- `WEBUI` service is exposed + as `NodePort` \n - will be used to register UE on the free5gc side\n- Communication + via `SBI` between NFs and communication with `mongodb` is defined using K8s + `ClusterIP` services\n - it forces you to deploy all NFs on a single cluster + or consider including `service mesh` in a multi-cluster scenario\n\n## Usage\n\n### + Fetch the package\n`kpt pkg get REPO_URI[.git]/PKG_PATH[@VERSION] free5gc-cp`\n\nDetails: + https://kpt.dev/reference/cli/pkg/get/\n\n### View package content\n`kpt pkg + tree free5gc-cp`\n\nDetails: https://kpt.dev/reference/cli/pkg/tree/\n\n### + Apply the package\n```\nkpt live init free5gc-cp\nkpt live apply free5gc-cp + --reconcile-timeout=2m --output=table\n```\n\nDetails: https://kpt.dev/reference/cli/live/\n\n" + ausf/ausf-configmap.yaml: "---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: + ausf-configmap\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n app: + free5gc\ndata:\n ausfcfg.yaml: |\n info:\n version: 1.0.2\n description: + AUSF initial local configuration\n\n configuration:\n serviceNameList:\n + \ - nausf-auth\n \n sbi:\n scheme: http\n registerIPv4: + ausf-nausf # IP used to register to NRF\n bindingIPv4: 0.0.0.0 # + IP used to bind the service\n port: 80\n tls:\n key: + config/TLS/ausf.key\n pem: config/TLS/ausf.pem\n \n nrfUri: + http://nrf-nnrf:8000\n plmnSupportList:\n - mcc: 208\n mnc: + 93\n - mcc: 123\n mnc: 45\n groupId: ausfGroup001\n eapAkaSupiImsiPrefix: + false\n\n logger:\n AUSF:\n ReportCaller: false\n debugLevel: + info\n" + ausf/ausf-deployment.yaml: "---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n + \ name: free5gc-ausf\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n + \ project: free5gc\n nf: ausf\nspec:\n replicas: 1\n selector:\n matchLabels:\n + \ project: free5gc\n nf: ausf\n template:\n metadata:\n labels:\n + \ project: free5gc\n nf: ausf\n spec:\n initContainers:\n + \ - name: wait-nrf\n image: towards5gs/initcurl:1.0.0\n env:\n + \ - name: DEPENDENCIES\n value: http://nrf-nnrf:8000\n command: + ['sh', '-c', 'set -x; for dependency in $DEPENDENCIES; do while [ $(curl --insecure + --connect-timeout 1 -s -o /dev/null -w \"%{http_code}\" $dependency) -ne 200 + ]; do echo waiting for dependencies; sleep 1; done; done;']\n \n containers:\n + \ - name: ausf\n image: towards5gs/free5gc-ausf:v3.1.1\n imagePullPolicy: + IfNotPresent\n securityContext:\n {}\n ports:\n - + containerPort: 80\n command: [\"./ausf\"]\n args: [\"-c\", \"../config/ausfcfg.yaml\"]\n + \ env:\n - name: GIN_MODE\n value: release\n volumeMounts:\n + \ - mountPath: /free5gc/config/\n name: ausf-volume\n resources:\n + \ limits:\n cpu: 100m\n memory: 128Mi\n + \ requests:\n cpu: 100m\n memory: 128Mi\n + \ dnsPolicy: ClusterFirst\n restartPolicy: Always\n\n volumes:\n + \ - name: ausf-volume\n projected:\n sources:\n - + configMap:\n name: ausf-configmap\n" + ausf/ausf-service.yaml: | + --- + apiVersion: v1 + kind: Service + metadata: + name: ausf-nausf + labels: + app.kubernetes.io/version: "v3.1.1" + project: free5gc + nf: ausf + spec: + type: ClusterIP + ports: + - port: 80 + targetPort: 80 + protocol: TCP + name: http + selector: + project: free5gc + nf: ausf + mongodb/dep-sts.yaml: "---\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n + \ name: mongodb\n namespace: default\n labels:\n app.kubernetes.io/name: + mongodb\n app.kubernetes.io/instance: free5gc\n app.kubernetes.io/component: + mongodb\nspec:\n serviceName: mongodb\n updateStrategy:\n type: RollingUpdate\n + \ selector:\n matchLabels:\n app.kubernetes.io/name: mongodb\n app.kubernetes.io/instance: + free5gc\n app.kubernetes.io/component: mongodb\n template:\n metadata:\n + \ labels:\n app.kubernetes.io/name: mongodb\n app.kubernetes.io/instance: + free5gc\n app.kubernetes.io/component: mongodb\n spec:\n \n serviceAccountName: + mongodb\n affinity:\n podAffinity:\n podAntiAffinity:\n preferredDuringSchedulingIgnoredDuringExecution:\n + \ - podAffinityTerm:\n labelSelector:\n matchLabels:\n + \ app.kubernetes.io/name: mongodb\n app.kubernetes.io/instance: + free5gc\n app.kubernetes.io/component: mongodb\n namespaces:\n + \ - \"default\"\n topologyKey: kubernetes.io/hostname\n + \ weight: 1\n nodeAffinity:\n \n securityContext:\n + \ fsGroup: 1001\n sysctls: []\n containers:\n - name: + mongodb\n image: docker.io/bitnami/mongodb:4.4.4-debian-10-r0\n imagePullPolicy: + \"IfNotPresent\"\n securityContext:\n runAsNonRoot: true\n + \ runAsUser: 1001\n env:\n - name: BITNAMI_DEBUG\n + \ value: \"false\"\n - name: ALLOW_EMPTY_PASSWORD\n value: + \"yes\"\n - name: MONGODB_SYSTEM_LOG_VERBOSITY\n value: + \"0\"\n - name: MONGODB_DISABLE_SYSTEM_LOG\n value: + \"no\"\n - name: MONGODB_ENABLE_IPV6\n value: \"no\"\n + \ - name: MONGODB_ENABLE_DIRECTORY_PER_DB\n value: \"no\"\n + \ ports:\n - name: mongodb\n containerPort: + 27017\n livenessProbe:\n exec:\n command:\n + \ - mongo\n - --disableImplicitSessions\n - + --eval\n - \"db.adminCommand('ping')\"\n initialDelaySeconds: + 30\n periodSeconds: 10\n timeoutSeconds: 5\n successThreshold: + 1\n failureThreshold: 6\n readinessProbe:\n exec:\n + \ command:\n - bash\n - -ec\n - + |\n mongo --disableImplicitSessions $TLS_OPTIONS --eval 'db.hello().isWritablePrimary + || db.hello().secondary' | grep -q 'true'\n initialDelaySeconds: + 5\n periodSeconds: 10\n timeoutSeconds: 5\n successThreshold: + 1\n failureThreshold: 6\n resources:\n limits: + {}\n requests: {}\n volumeMounts:\n - name: datadir\n + \ mountPath: /bitnami/mongodb/data/db/\n subPath: \n + \ volumes:\n volumeClaimTemplates:\n - metadata:\n name: datadir\n + \ spec:\n accessModes:\n - \"ReadWriteOnce\"\n resources:\n + \ requests:\n storage: \"6Gi\"\n" + mongodb/serviceaccount.yaml: | + --- + apiVersion: v1 + kind: ServiceAccount + metadata: + name: mongodb + namespace: default + labels: + app.kubernetes.io/name: mongodb + app.kubernetes.io/instance: free5gc + secrets: + - name: mongodb + mongodb/svc.yaml: | + --- + apiVersion: v1 + kind: Service + metadata: + name: mongodb + namespace: default + labels: + app.kubernetes.io/name: mongodb + app.kubernetes.io/instance: free5gc + app.kubernetes.io/component: mongodb + spec: + type: ClusterIP + ports: + - name: mongodb + port: 27017 + targetPort: mongodb + nodePort: null + selector: + app.kubernetes.io/name: mongodb + app.kubernetes.io/instance: free5gc + app.kubernetes.io/component: mongodb + namespace.yaml: | + apiVersion: v1 + kind: Namespace + metadata: + name: example + labels: + pod-security.kubernetes.io/warn: "privileged" + pod-security.kubernetes.io/audit: "privileged" + pod-security.kubernetes.io/enforce: "privileged" + nrf/nrf-configmap.yaml: "---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: + nrf-configmap\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n app: + free5gc\ndata:\n nrfcfg.yaml: |\n info:\n version: 1.0.1\n description: + NRF initial local configuration\n \n configuration:\n MongoDBName: + free5gc\n MongoDBUrl: mongodb://mongodb:27017\n\n serviceNameList:\n + \ - nnrf-nfm\n - nnrf-disc\n\n sbi:\n scheme: http\n + \ registerIPv4: nrf-nnrf # IP used to serve NFs or register to another + NRF\n bindingIPv4: 0.0.0.0 # IP used to bind the service\n port: + 8000\n tls:\n key: config/TLS/nrf.key\n pem: config/TLS/nrf.pem\n + \ DefaultPlmnId:\n mcc: 208\n mnc: 93\n\n logger:\n NRF:\n + \ ReportCaller: false\n debugLevel: info\n" + nrf/nrf-deployment.yaml: "---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n + \ name: free5gc-nrf\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n + \ project: free5gc\n nf: nrf\nspec:\n replicas: 1\n selector:\n matchLabels:\n + \ project: free5gc\n nf: nrf\n template:\n metadata:\n labels:\n + \ project: free5gc\n nf: nrf\n spec:\n initContainers:\n + \ - name: wait-mongo\n image: busybox:1.32.0\n env:\n - + name: DEPENDENCIES\n value: mongodb:27017\n command: [\"sh\", + \"-c\", \"until nc -z $DEPENDENCIES; do echo waiting for the MongoDB; sleep + 2; done;\"]\n containers:\n - name: nrf\n image: towards5gs/free5gc-nrf:v3.1.1\n + \ imagePullPolicy: IfNotPresent\n securityContext:\n {}\n + \ ports:\n - containerPort: 8000\n command: [\"./nrf\"]\n + \ args: [\"-c\", \"../config/nrfcfg.yaml\"]\n env: \n - + name: DB_URI\n value: mongodb://mongodb/free5gc\n - name: + GIN_MODE\n value: release\n volumeMounts:\n - mountPath: + /free5gc/config/\n name: nrf-volume\n resources:\n limits:\n + \ cpu: 100m\n memory: 128Mi\n requests:\n + \ cpu: 100m\n memory: 128Mi\n readinessProbe:\n + \ initialDelaySeconds: 0\n periodSeconds: 1\n timeoutSeconds: + 1\n failureThreshold: 40\n successThreshold: 1\n httpGet:\n + \ scheme: \"HTTP\"\n port: 8000\n livenessProbe:\n + \ initialDelaySeconds: 120\n periodSeconds: 10\n timeoutSeconds: + 10\n failureThreshold: 3\n successThreshold: 1\n httpGet:\n + \ scheme: \"HTTP\"\n port: 8000\n dnsPolicy: ClusterFirst\n + \ restartPolicy: Always\n\n volumes:\n - name: nrf-volume\n projected:\n + \ sources:\n - configMap:\n name: nrf-configmap\n" + nrf/nrf-service.yaml: | + --- + apiVersion: v1 + kind: Service + metadata: + name: nrf-nnrf + labels: + app.kubernetes.io/version: "v3.1.1" + project: free5gc + nf: nrf + spec: + type: ClusterIP + ports: + - port: 8000 + targetPort: 8000 + protocol: TCP + name: http + selector: + project: free5gc + nf: nrf + nssf/nssf-configmap.yaml: "---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: + nssf-configmap\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n app: + free5gc\ndata:\n nssfcfg.yaml: |\n info:\n version: 1.0.1\n description: + NSSF initial local configuration\n\n configuration:\n serviceNameList:\n + \ - nnssf-nsselection\n - nnssf-nssaiavailability\n\n sbi:\n + \ scheme: http\n registerIPv4: nssf-nnssf # IP used to register + to NRF\n bindingIPv4: 0.0.0.0 # IP used to bind the service\n port: + 80\n tls:\n key: config/TLS/nssf.key\n pem: config/TLS/nssf.pem\n + \ \n nrfUri: http://nrf-nnrf:8000\n \n nsiList:\n - + snssai:\n sst: 1\n nsiInformationList:\n - nrfId: + http://nrf-nnrf:8000/nnrf-nfm/v1/nf-instances\n nsiId: 10\n - + snssai:\n sst: 1\n sd: 1\n nsiInformationList:\n + \ - nrfId: http://nrf-nnrf:8000/nnrf-nfm/v1/nf-instances\n nsiId: + 11\n - snssai:\n sst: 1\n sd: 2\n nsiInformationList:\n + \ - nrfId: http://nrf-nnrf:8000/nnrf-nfm/v1/nf-instances\n nsiId: + 12\n - nrfId: http://nrf-nnrf:8000/nnrf-nfm/v1/nf-instances\n nsiId: + 12\n - snssai:\n sst: 1\n sd: 3\n nsiInformationList:\n + \ - nrfId: http://nrf-nnrf:8000/nnrf-nfm/v1/nf-instances\n nsiId: + 13\n - snssai:\n sst: 2\n nsiInformationList:\n - + nrfId: http://nrf-nnrf:8000/nnrf-nfm/v1/nf-instances\n nsiId: 20\n + \ - snssai:\n sst: 2\n sd: 1\n nsiInformationList:\n + \ - nrfId: http://nrf-nnrf:8000/nnrf-nfm/v1/nf-instances\n nsiId: + 21\n - snssai:\n sst: 1\n sd: 010203\n nsiInformationList:\n + \ - nrfId: http://nrf-nnrf:8000/nnrf-nfm/v1/nf-instances\n nsiId: + 22\n amfSetList:\n - amfSetId: 1\n amfList:\n - + ffa2e8d7-3275-49c7-8631-6af1df1d9d26\n - 0e8831c3-6286-4689-ab27-1e2161e15cb1\n + \ - a1fba9ba-2e39-4e22-9c74-f749da571d0d\n nrfAmfSet: http://nrf-nnrf:8081/nnrf-nfm/v1/nf-instances\n + \ supportedNssaiAvailabilityData:\n - tai:\n plmnId:\n + \ mcc: 466\n mnc: 92\n tac: + 33456\n supportedSnssaiList:\n - sst: 1\n sd: + 1\n - sst: 1\n sd: 2\n - sst: + 2\n sd: 1\n - tai:\n plmnId:\n mcc: + 466\n mnc: 92\n tac: 33457\n supportedSnssaiList:\n + \ - sst: 1\n - sst: 1\n sd: 1\n + \ - sst: 1\n sd: 2\n - amfSetId: 2\n nrfAmfSet: + http://nrf-nnrf:8084/nnrf-nfm/v1/nf-instances\n supportedNssaiAvailabilityData:\n + \ - tai:\n plmnId:\n mcc: 466\n mnc: + 92\n tac: 33456\n supportedSnssaiList:\n - + sst: 1\n - sst: 1\n sd: 1\n - + sst: 1\n sd: 3\n - sst: 2\n sd: + 1\n - tai:\n plmnId:\n mcc: 466\n + \ mnc: 92\n tac: 33458\n supportedSnssaiList:\n + \ - sst: 1\n - sst: 1\n sd: 1\n + \ - sst: 2\n nssfName: NSSF\n supportedPlmnList:\n - + mcc: 208\n mnc: 93\n supportedNssaiInPlmnList:\n - plmnId:\n + \ mcc: 208\n mnc: 93\n supportedSnssaiList:\n + \ - sst: 1\n sd: 010203\n - sst: 1\n sd: + 112233\n - sst: 1\n sd: 3\n - sst: 2\n sd: + 1\n - sst: 2\n sd: 2\n amfList:\n - nfId: + 469de254-2fe5-4ca0-8381-af3f500af77c\n supportedNssaiAvailabilityData:\n + \ - tai:\n plmnId:\n mcc: 466\n mnc: + 92\n tac: 33456\n supportedSnssaiList:\n - + sst: 1\n - sst: 1\n sd: 2\n - + sst: 2\n - tai:\n plmnId:\n mcc: + 466\n mnc: 92\n tac: 33457\n supportedSnssaiList:\n + \ - sst: 1\n sd: 1\n - sst: 1\n + \ sd: 2\n - nfId: fbe604a8-27b2-417e-bd7c-8a7be2691f8d\n + \ supportedNssaiAvailabilityData:\n - tai:\n plmnId:\n + \ mcc: 466\n mnc: 92\n tac: + 33458\n supportedSnssaiList:\n - sst: 1\n - + sst: 1\n sd: 1\n - sst: 1\n sd: + 3\n - sst: 2\n - tai:\n plmnId:\n mcc: + 466\n mnc: 92\n tac: 33459\n supportedSnssaiList:\n + \ - sst: 1\n - sst: 1\n sd: 1\n + \ - sst: 2\n - sst: 2\n sd: 1\n + \ - nfId: b9e6e2cb-5ce8-4cb6-9173-a266dd9a2f0c\n supportedNssaiAvailabilityData:\n + \ - tai:\n plmnId:\n mcc: 466\n mnc: + 92\n tac: 33456\n supportedSnssaiList:\n - + sst: 1\n - sst: 1\n sd: 1\n - + sst: 1\n sd: 2\n - sst: 2\n - tai:\n + \ plmnId:\n mcc: 466\n mnc: + 92\n tac: 33458\n supportedSnssaiList:\n - + sst: 1\n - sst: 1\n sd: 1\n - + sst: 2\n - sst: 2\n sd: 1\n taList:\n - + tai:\n plmnId:\n mcc: 466\n mnc: 92\n tac: + 33456\n accessType: 3GPP_ACCESS\n supportedSnssaiList:\n - + sst: 1\n - sst: 1\n sd: 1\n - sst: 1\n sd: + 2\n - sst: 2\n - tai:\n plmnId:\n mcc: + 466\n mnc: 92\n tac: 33457\n accessType: 3GPP_ACCESS\n + \ supportedSnssaiList:\n - sst: 1\n - sst: 1\n + \ sd: 1\n - sst: 1\n sd: 2\n - + sst: 2\n - tai:\n plmnId:\n mcc: 466\n mnc: + 92\n tac: 33458\n accessType: 3GPP_ACCESS\n supportedSnssaiList:\n + \ - sst: 1\n - sst: 1\n sd: 1\n - + sst: 1\n sd: 3\n - sst: 2\n restrictedSnssaiList:\n + \ - homePlmnId:\n mcc: 310\n mnc: 560\n + \ sNssaiList:\n - sst: 1\n sd: 3\n + \ - tai:\n plmnId:\n mcc: 466\n mnc: + 92\n tac: 33459\n accessType: 3GPP_ACCESS\n supportedSnssaiList:\n + \ - sst: 1\n - sst: 1\n sd: 1\n - + sst: 2\n - sst: 2\n sd: 1\n restrictedSnssaiList:\n + \ - homePlmnId:\n mcc: 310\n mnc: 560\n + \ sNssaiList:\n - sst: 2\n sd: 1\n + \ mappingListFromPlmn:\n - operatorName: NTT Docomo\n homePlmnId:\n + \ mcc: 440\n mnc: 10\n mappingOfSnssai:\n - + servingSnssai:\n sst: 1\n sd: 1\n homeSnssai:\n + \ sst: 1\n sd: 1\n - servingSnssai:\n + \ sst: 1\n sd: 2\n homeSnssai:\n sst: + 1\n sd: 3\n - servingSnssai:\n sst: + 1\n sd: 3\n homeSnssai:\n sst: 1\n + \ sd: 4\n - servingSnssai:\n sst: 2\n + \ sd: 1\n homeSnssai:\n sst: 2\n sd: + 2\n - operatorName: AT&T Mobility\n homePlmnId:\n mcc: + 310\n mnc: 560\n mappingOfSnssai:\n - servingSnssai:\n + \ sst: 1\n sd: 1\n homeSnssai:\n sst: + 1\n sd: 2\n - servingSnssai:\n sst: + 1\n sd: 2\n homeSnssai:\n sst: 1\n + \ sd: 3 \n\n logger:\n NSSF:\n ReportCaller: + false\n debugLevel: info\n" + nssf/nssf-deployment.yaml: "---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n + \ name: free5gc-nssf\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n + \ project: free5gc\n nf: nssf\nspec:\n replicas: 1\n selector:\n matchLabels:\n + \ project: free5gc\n nf: nssf\n template:\n metadata:\n labels:\n + \ project: free5gc\n nf: nssf\n spec:\n initContainers:\n + \ - name: wait-nrf\n image: towards5gs/initcurl:1.0.0\n env:\n + \ - name: DEPENDENCIES\n value: http://nrf-nnrf:8000\n command: + ['sh', '-c', 'set -x; for dependency in $DEPENDENCIES; do while [ $(curl --insecure + --connect-timeout 1 -s -o /dev/null -w \"%{http_code}\" $dependency) -ne 200 + ]; do echo waiting for dependencies; sleep 1; done; done;']\n\n containers:\n + \ - name: nssf\n image: towards5gs/free5gc-nssf:v3.1.1\n imagePullPolicy: + IfNotPresent\n securityContext:\n {}\n ports:\n - + containerPort: 80\n command: [\"./nssf\"]\n args: [\"-c\", \"../config/nssfcfg.yaml\"]\n + \ env: \n - name: GIN_MODE\n value: release\n volumeMounts:\n + \ - mountPath: /free5gc/config/\n name: nssf-volume\n resources:\n + \ limits:\n cpu: 100m\n memory: 128Mi\n + \ requests:\n cpu: 100m\n memory: 128Mi\n + \ dnsPolicy: ClusterFirst\n restartPolicy: Always\n\n volumes:\n + \ - name: nssf-volume\n projected:\n sources:\n - + configMap:\n name: nssf-configmap\n" + nssf/nssf-service.yaml: | + --- + apiVersion: v1 + kind: Service + metadata: + name: nssf-nnssf + labels: + app.kubernetes.io/version: "v3.1.1" + project: free5gc + nf: nssf + spec: + type: ClusterIP + ports: + - port: 80 + targetPort: 80 + protocol: TCP + name: http + selector: + project: free5gc + nf: nssf + package-context.yaml: | + apiVersion: v1 + kind: ConfigMap + metadata: + name: kptfile.kpt.dev + annotations: + config.kubernetes.io/local-config: "true" + data: + name: free5gc + namespace: free5gc + pcf/pcf-configmap.yaml: "---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: + pcf-configmap\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n app: + free5gc\ndata:\n pcfcfg.yaml: |\n info:\n version: 1.0.1\n description: + PCF initial local configuration\n\n configuration:\n serviceList:\n + \ - serviceName: npcf-am-policy-control\n - serviceName: npcf-smpolicycontrol\n + \ suppFeat: 3fff\n - serviceName: npcf-bdtpolicycontrol\n - + serviceName: npcf-policyauthorization\n suppFeat: 3\n - serviceName: + npcf-eventexposure\n - serviceName: npcf-ue-policy-control\n\n sbi:\n + \ scheme: http\n registerIPv4: pcf-npcf # IP used to register + to NRF\n bindingIPv4: 0.0.0.0 # IP used to bind the service\n port: + 80\n tls:\n key: config/TLS/pcf.key\n pem: config/TLS/pcf.pem\n + \ \n mongodb: # the mongodb connected by this PCF\n name: + free5gc # name of the mongodb\n url: mongodb://mongodb:27017 + # a valid URL of the mongodb\n \n nrfUri: http://nrf-nnrf:8000\n pcfName: + PCF\n timeFormat: 2019-01-02 15:04:05\n defaultBdtRefId: BdtPolicyId-\n + \ locality: area1\n\n logger:\n PCF:\n ReportCaller: false\n + \ debugLevel: info\n" + pcf/pcf-deployment.yaml: | + --- + apiVersion: apps/v1 + kind: Deployment + metadata: + name: free5gc-pcf + labels: + app.kubernetes.io/version: "v3.1.1" + project: free5gc + nf: pcf + spec: + replicas: 1 + selector: + matchLabels: + project: free5gc + nf: pcf + template: + metadata: + labels: + project: free5gc + nf: pcf + spec: + initContainers: + - name: wait-nrf + image: towards5gs/initcurl:1.0.0 + env: + - name: DEPENDENCIES + value: http://nrf-nnrf:8000 + command: ['sh', '-c', 'set -x; for dependency in $DEPENDENCIES; do while [ $(curl --insecure --connect-timeout 1 -s -o /dev/null -w "%{http_code}" $dependency) -ne 200 ]; do echo waiting for dependencies; sleep 1; done; done;'] + + containers: + - name: pcf + image: towards5gs/free5gc-pcf:v3.1.1 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 80 + command: ["./pcf"] + args: ["-c", "../config/pcfcfg.yaml"] + env: + - name: GIN_MODE + value: release + volumeMounts: + - mountPath: /free5gc/config/ + name: pcf-volume + resources: + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi + dnsPolicy: ClusterFirst + restartPolicy: Always + + volumes: + - name: pcf-volume + projected: + sources: + - configMap: + name: pcf-configmap + pcf/pcf-service.yaml: | + --- + apiVersion: v1 + kind: Service + metadata: + name: pcf-npcf + labels: + app.kubernetes.io/version: "v3.1.1" + project: free5gc + nf: pcf + spec: + type: ClusterIP + ports: + - port: 80 + targetPort: 80 + protocol: TCP + name: http + selector: + project: free5gc + nf: pcf + udm/udm-configmap.yaml: "---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: + udm-configmap\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n app: + free5gc\ndata:\n udmcfg.yaml: |\n info:\n version: 1.0.2\n description: + UDM initial local configuration\n\n configuration:\n serviceNameList:\n + \ - nudm-sdm\n - nudm-uecm\n - nudm-ueau\n - nudm-ee\n + \ - nudm-pp\n \n sbi:\n scheme: http\n registerIPv4: + udm-nudm # IP used to register to NRF\n bindingIPv4: 0.0.0.0 # IP used + to bind the service\n port: 80\n tls:\n key: config/TLS/udm.key\n + \ pem: config/TLS/udm.pem\n \n nrfUri: http://nrf-nnrf:8000\n + \ # test data set from TS33501-f60 Annex C.4\n SuciProfile:\n - + ProtectionScheme: 1 # Protect Scheme: Profile A\n PrivateKey: c53c22208b61860b06c62e5406a7b330c2b577aa5558981510d128247d38bd1d\n + \ PublicKey: 5a8d38864820197c3394b92613b20b91633cbd897119273bf8e4a6f4eec0a650\n + \ - ProtectionScheme: 2 # Protect Scheme: Profile B\n PrivateKey: + F1AB1074477EBCC7F554EA1C5FC368B1616730155E0041AC447D6301975FECDA\n PublicKey: + 0472DA71976234CE833A6907425867B82E074D44EF907DFB4B3E21C1C2256EBCD15A7DED52FCBB097A4ED250E036C7B9C8C7004C4EEDC4F068CD7BF8D3F900E3B4\n\n + \ logger:\n UDM:\n ReportCaller: false\n debugLevel: info\n" + udm/udm-deployment.yaml: "---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n + \ name: free5gc-udm\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n + \ project: free5gc\n nf: udm\nspec:\n replicas: 1\n selector:\n matchLabels:\n + \ project: free5gc\n nf: udm\n template:\n metadata:\n labels:\n + \ project: free5gc\n nf: udm\n spec:\n initContainers:\n + \ - name: wait-nrf\n image: towards5gs/initcurl:1.0.0\n env:\n + \ - name: DEPENDENCIES\n value: http://nrf-nnrf:8000\n command: + ['sh', '-c', 'set -x; for dependency in $DEPENDENCIES; do while [ $(curl --insecure + --connect-timeout 1 -s -o /dev/null -w \"%{http_code}\" $dependency) -ne 200 + ]; do echo waiting for dependencies; sleep 1; done; done;']\n\n containers:\n + \ - name: udm\n image: towards5gs/free5gc-udm:v3.1.1\n imagePullPolicy: + IfNotPresent\n ports:\n - containerPort: 80\n command: + [\"./udm\"]\n args: [\"-c\", \"../config/udmcfg.yaml\"]\n env: + \n - name: GIN_MODE\n value: release\n volumeMounts:\n + \ - mountPath: /free5gc/config/\n name: udm-volume\n resources:\n + \ limits:\n cpu: 100m\n memory: 128Mi\n + \ requests:\n cpu: 100m\n memory: 128Mi\n + \ dnsPolicy: ClusterFirst\n restartPolicy: Always\n\n volumes:\n + \ - name: udm-volume\n projected:\n sources:\n - + configMap:\n name: udm-configmap\n" + udm/udm-service.yaml: | + --- + apiVersion: v1 + kind: Service + metadata: + name: udm-nudm + labels: + app.kubernetes.io/version: "v3.1.1" + project: free5gc + nf: udm + spec: + type: ClusterIP + ports: + - port: 80 + targetPort: 80 + protocol: TCP + name: http + selector: + project: free5gc + nf: udm + udr/udr-configmap.yaml: "---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: + udr-configmap\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n app: + free5gc\ndata:\n udrcfg.yaml: |\n info:\n version: 1.0.1\n description: + UDR initial local configuration\n\n configuration:\n sbi:\n scheme: + http\n registerIPv4: udr-nudr # IP used to register to NRF\n bindingIPv4: + 0.0.0.0 # IP used to bind the service\n port: 80\n tls:\n key: + config/TLS/udr.key\n pem: config/TLS/udr.pem\n\n mongodb:\n name: + free5gc\n url: mongodb://mongodb:27017 \n \n nrfUri: + http://nrf-nnrf:8000\n\n logger:\n MongoDBLibrary:\n ReportCaller: + false\n debugLevel: info\n OpenApi:\n ReportCaller: false\n + \ debugLevel: info\n PathUtil:\n ReportCaller: false\n debugLevel: + info\n UDR:\n ReportCaller: false\n debugLevel: info\n" + udr/udr-deployment.yaml: "---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n + \ name: free5gc-udr\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n + \ project: free5gc\n nf: udr\nspec:\n replicas: 1\n selector:\n matchLabels:\n + \ project: free5gc\n nf: udr\n template:\n metadata:\n labels:\n + \ project: free5gc\n nf: udr\n spec:\n initContainers:\n + \ - name: wait-nrf\n image: towards5gs/initcurl:1.0.0\n env:\n + \ - name: DEPENDENCIES\n value: http://nrf-nnrf:8000\n command: + ['sh', '-c', 'set -x; for dependency in $DEPENDENCIES; do while [ $(curl --insecure + --connect-timeout 1 -s -o /dev/null -w \"%{http_code}\" $dependency) -ne 200 + ]; do echo waiting for dependencies; sleep 1; done; done;']\n\n containers:\n + \ - name: udr\n image: towards5gs/free5gc-udr:v3.1.1\n imagePullPolicy: + IfNotPresent\n ports:\n - containerPort: 80\n command: + [\"./udr\"]\n args: [\"-c\", \"../config/udrcfg.yaml\"]\n env: + \n - name: DB_URI\n value: mongodb://mongodb/free5gc\n - + name: GIN_MODE\n value: release\n volumeMounts:\n - + mountPath: /free5gc/config/\n name: udr-volume\n resources:\n + \ limits:\n cpu: 100m\n memory: 128Mi\n + \ requests:\n cpu: 100m\n memory: 128Mi\n + \ dnsPolicy: ClusterFirst\n restartPolicy: Always\n\n volumes:\n + \ - name: udr-volume\n projected:\n sources:\n - + configMap:\n name: udr-configmap\n" + udr/udr-service.yaml: | + --- + apiVersion: v1 + kind: Service + metadata: + name: udr-nudr + labels: + app.kubernetes.io/version: "v3.1.1" + project: free5gc + nf: udr + spec: + type: ClusterIP + ports: + - port: 80 + targetPort: 80 + protocol: TCP + name: http + selector: + project: free5gc + nf: udr + webui/webui-configmap.yaml: "---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n + \ name: webui-configmap\n labels:\n app.kubernetes.io/version: \"v3.1.1\"\n + \ app: free5gc\ndata:\n webuicfg.yaml: |\n info:\n version: 1.0.0\n + \ description: WEBUI initial local configuration\n\n configuration:\n + \ mongodb:\n name: free5gc\n url: mongodb://mongodb:27017\n + \ \n logger:\n WEBUI:\n ReportCaller: false\n debugLevel: + info\n" + webui/webui-deployment.yaml: | + --- + apiVersion: apps/v1 + kind: Deployment + metadata: + name: free5gc-webui + labels: + app.kubernetes.io/version: "v3.1.1" + project: free5gc + nf: webui + spec: + replicas: 1 + selector: + matchLabels: + project: free5gc + nf: webui + template: + metadata: + labels: + project: free5gc + nf: webui + spec: + initContainers: + - name: wait-mongo + image: busybox:1.32.0 + env: + - name: DEPENDENCIES + value: mongodb:27017 + command: ["sh", "-c", "until nc -z $DEPENDENCIES; do echo waiting for the MongoDB; sleep 2; done;"] + containers: + - name: webui + image: towards5gs/free5gc-webui:v3.1.1 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 5000 + command: ["./webconsole"] + args: ["-c", "../config/webuicfg.yaml"] + env: + - name: GIN_MODE + value: release + volumeMounts: + - mountPath: /free5gc/config/ + name: webui-volume + resources: + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi + readinessProbe: + initialDelaySeconds: 0 + periodSeconds: 1 + timeoutSeconds: 1 + failureThreshold: 40 + successThreshold: 1 + httpGet: + scheme: HTTP + port: 5000 + livenessProbe: + initialDelaySeconds: 120 + periodSeconds: 10 + timeoutSeconds: 10 + failureThreshold: 3 + successThreshold: 1 + httpGet: + scheme: HTTP + port: 5000 + dnsPolicy: ClusterFirst + restartPolicy: Always + + volumes: + - name: webui-volume + projected: + sources: + - configMap: + name: webui-configmap + webui/webui-service.yaml: | + --- + apiVersion: v1 + kind: Service + metadata: + name: webui-service + labels: + app.kubernetes.io/version: "v3.1.1" + project: free5gc + nf: webui + spec: + type: NodePort + ports: + - port: 5000 + targetPort: 5000 + nodePort: 30500 + protocol: TCP + name: http + selector: + project: free5gc + nf: webui + revision: v1 + workspaceName: v1 +status: + renderStatus: + error: "" + result: + exitCode: 0 + metadata: + creationTimestamp: null +``` +
    + +## The porchctl command + +The `porchtcl` command is an administration command for acting on Porch `Repository` (repo) and `PackageRevision` (rpkg) CRs. See its [documentation for usage information](https://github.com/nephio-project/porch/blob/main/docs/porchctl-cli-guide.md). + +
    +Check that porchctl lists our repos: + +``` +porchctl repo -n porch-demo get +NAME TYPE CONTENT DEPLOYMENT READY ADDRESS +edge1 git Package true True http://172.18.255.200:3000/nephio/edge1.git +external-blueprints git Package false True https://github.com/nephio-project/free5gc-packages.git +management git Package false True http://172.18.255.200:3000/nephio/management.git +``` +
    + +
    +Check that porchctl lists our remote packages (PackageRevisions): + +``` +porchctl rpkg -n porch-demo get +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +external-blueprints-922121d0bcdd56bfa8cae6c375720e2b5f358ab0 free5gc-cp main main false Published external-blueprints +external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9 free5gc-cp v1 v1 true Published external-blueprints +external-blueprints-716aae722092dbbb9470e56079b90ad76ec8f0d5 free5gc-operator main main false Published external-blueprints +external-blueprints-d65dc89f7a2472650651e9aea90edfcc81a9afc6 free5gc-operator v1 v1 false Published external-blueprints +external-blueprints-9fee880e8fa52066f052c9cae7aac2e2bc1b5a54 free5gc-operator v2 v2 false Published external-blueprints +external-blueprints-91d60ee31d2d0a1a6d5f1807593d5419434accd3 free5gc-operator v3 v3 false Published external-blueprints +external-blueprints-21f19a0641cf520e7dc6268e64c58c2c30c27036 free5gc-operator v4 v4 false Published external-blueprints +external-blueprints-bf2e7522ee92680bd49571ab309e3f61320cf36d free5gc-operator v5 v5 true Published external-blueprints +external-blueprints-c1b9ecb73118e001ab1d1213e6a2c94ab67a0939 free5gc-upf main main false Published external-blueprints +external-blueprints-5d48b1516e7b1ea15830ffd76b230862119981bd free5gc-upf v1 v1 true Published external-blueprints +external-blueprints-ed97798b46b36d135cf23d813eccad4857dff90f pkg-example-amf-bp main main false Published external-blueprints +external-blueprints-ed744bfdf4a4d15d4fcf3c46fde27fd6ac32d180 pkg-example-amf-bp v1 v1 false Published external-blueprints +external-blueprints-5489faa80782f91f1a07d04e206935d14c1eb24c pkg-example-amf-bp v2 v2 false Published external-blueprints +external-blueprints-16e2255bd433ef532684a3c1434ae0bede175107 pkg-example-amf-bp v3 v3 false Published external-blueprints +external-blueprints-7689cc6c953fa83ea61283983ce966dcdffd9bae pkg-example-amf-bp v4 v4 false Published external-blueprints +external-blueprints-caff9609883eea7b20b73b7425e6694f8eb6adc3 pkg-example-amf-bp v5 v5 true Published external-blueprints +external-blueprints-00b6673c438909975548b2b9f20c2e1663161815 pkg-example-smf-bp main main false Published external-blueprints +external-blueprints-4f7dfbede99dc08f2b5144ca550ca218109c52f2 pkg-example-smf-bp v1 v1 false Published external-blueprints +external-blueprints-3d9ab8f61ce1d35e264d5719d4b3c0da1ab02328 pkg-example-smf-bp v2 v2 false Published external-blueprints +external-blueprints-2006501702e105501784c78be9e7d57e426d85e8 pkg-example-smf-bp v3 v3 false Published external-blueprints +external-blueprints-c97ed7c13b3aa47cb257217f144960743aec1253 pkg-example-smf-bp v4 v4 false Published external-blueprints +external-blueprints-3bd78e46b014dac5cc0c58788c1820d043d61569 pkg-example-smf-bp v5 v5 true Published external-blueprints +external-blueprints-c3f660848d9d7a4df5481ec2e06196884778cd84 pkg-example-upf-bp main main false Published external-blueprints +external-blueprints-4cb00a17c1ee2585d6c187ba4d0211da960c0940 pkg-example-upf-bp v1 v1 false Published external-blueprints +external-blueprints-5903efe295026124e6fea926df154a72c5bd1ea9 pkg-example-upf-bp v2 v2 false Published external-blueprints +external-blueprints-16142d8d23c1b8e868a9524a1b21634c79b432d5 pkg-example-upf-bp v3 v3 false Published external-blueprints +external-blueprints-60ef45bb8f55b63556e7467f16088325022a7ece pkg-example-upf-bp v4 v4 false Published external-blueprints +external-blueprints-7757966cc7b965f1b9372370a4b382c8375a2b40 pkg-example-upf-bp v5 v5 true Published external-blueprints +``` +
    + +The output above is similar to the output of `kubectl get packagerevision -n porch-demo` above. + +## Creating a blueprint in Porch + +### Blueprint with no Kpt pipelines + +Create a new package in our `management` repo using the sample `network-function` package provided. This network function kpt package is a demo Kpt package that installs [nginx](https://github.com/nginx). + +``` +porchctl -n porch-demo rpkg init network-function --repository=management --workspace=v1 +management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 created +porchctl -n porch-demo rpkg get --name network-function +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 network-function v1 false Draft management +``` + +This command creates a new PackageRevision CR in porch and also creates a branch called `network-function/v1` in our gitea `management` repo. Use the Gitea web UI to confirm that the branch has been created and note that it only has default content as yet. + +We now pull the package we have initialized from Porch. + +``` +porchctl -n porch-demo rpkg pull management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 blueprints/initialized/network-function +``` + +We update the initialized package and add our local changes. +``` +cp blueprints/local-changes/network-function/* blueprints/initialized/network-function +``` + +Now, we push the package contents to porch: +``` +porchctl -n porch-demo rpkg push management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 blueprints/initialized/network-function +``` + +Check on the Gitea web UI and we can see that the actual package contents have been pushed. + +Now we propose and approve the package. + +``` +porchctl -n porch-demo rpkg propose management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 +management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 proposed + +porchctl -n porch-demo rpkg get --name network-function +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 network-function v1 false Proposed management + +porchctl -n porch-demo rpkg approve management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 +management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 approved + +porchctl -n porch-demo rpkg get --name network-function +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 network-function v1 v1 true Published management + +``` + +Once we approve the package, the package is merged into the main branch in the `management` repo and the branch called `network-function/v1` in that repo is removed. Use the Gitea UI to verify this. We now have our blueprint package in our `management` repo and we can deploy this package into workload clusters. + +### Blueprint with a Kpt pipeline + +The second blueprint blueprint in the `blueprint` directory is called `network-function-auto-namespace`. This network function is exactly the same as the `network-function` package except that it has a Kpt function that automatically creates a namespace with the namespace configured in the `name` field in the `package-context.yaml` file. Note that no namespace is defined in the metadata of the `deployment.yaml` file of this Kpt package. + +We use the same sequence of commands again to publish our blueprint package for `network-function-auto-namespace`. + +``` +porchctl -n porch-demo rpkg init network-function-auto-namespace --repository=management --workspace=v1 +management-c97bc433db93f2e8a3d413bed57216c2a72fc7e3 created + +porchctl -n porch-demo rpkg pull management-c97bc433db93f2e8a3d413bed57216c2a72fc7e3 blueprints/initialized/network-function-auto-namespace + +cp blueprints/local-changes/network-function-auto-namespace/* blueprints/initialized/network-function-auto-namespace + +porchctl -n porch-demo rpkg push management-c97bc433db93f2e8a3d413bed57216c2a72fc7e3 blueprints/initialized/network-function-auto-namespace +``` + +Examine the `drafts/network-function-auto-namespace/v1` branch in Gitea. Notice that the `set-namespace` Kpt finction in the pipeline in the `Kptfile` has set the namespace in the `deployment.yaml` file to the value `default-namespace-name`, which it read from the `package-context.yaml` file. + +Now we propose and approve the package. + +``` +porchctl -n porch-demo rpkg propose management-c97bc433db93f2e8a3d413bed57216c2a72fc7e3 +management-c97bc433db93f2e8a3d413bed57216c2a72fc7e3 proposed + +porchctl -n porch-demo rpkg approve management-c97bc433db93f2e8a3d413bed57216c2a72fc7e3 +management-c97bc433db93f2e8a3d413bed57216c2a72fc7e3 approved + +porchctl -n porch-demo rpkg get --name network-function-auto-namespace +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +management-f9a6f2802111b9e81c296422c03aae279725f6df network-function-auto-namespace v1 main false Published management +management-c97bc433db93f2e8a3d413bed57216c2a72fc7e3 network-function-auto-namespace v1 v1 true Published management + +``` + +## Deploying a blueprint onto a workload cluster + +### Blueprint with no Kpt pipelines + +The process of deploying a blueprint package from our `management` repo clones the package, then modifies it for use on the workload cluster. The cloned package is then initialized, pushed, proposed, and approved onto the `edge1` repo. Remember that the `edge1` repo is being monitored by Configsync from the `edge1` cluster, so once the package appears in the `edge1` repo on the management cluster, it will be pulled by Configsync and applied to the `edge1` cluster. + +``` +porchctl -n porch-demo rpkg pull management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 tmp_packages_for_deployment/edge1-network-function-a.clone.tmp + +find tmp_packages_for_deployment/edge1-network-function-a.clone.tmp + +tmp_packages_for_deployment/edge1-network-function-a.clone.tmp +tmp_packages_for_deployment/edge1-network-function-a.clone.tmp/deployment.yaml +tmp_packages_for_deployment/edge1-network-function-a.clone.tmp/.KptRevisionMetadata +tmp_packages_for_deployment/edge1-network-function-a.clone.tmp/README.md +tmp_packages_for_deployment/edge1-network-function-a.clone.tmp/Kptfile +tmp_packages_for_deployment/edge1-network-function-a.clone.tmp/package-context.yaml +``` +The package we created in the last section is cloned. We now remove the original metadata from the package. +``` +rm tmp_packages_for_deployment/edge1-network-function-a.clone.tmp/.KptRevisionMetadata +``` + +We use a kpt function to change the namespace that will be used for the deployment of the network function. + +``` +kpt fn eval --image=gcr.io/kpt-fn/set-namespace:v0.4.1 tmp_packages_for_deployment/edge1-network-function-a.clone.tmp -- namespace=edge1-network-function-a + +[RUNNING] "gcr.io/kpt-fn/set-namespace:v0.4.1" +[PASS] "gcr.io/kpt-fn/set-namespace:v0.4.1" in 300ms + Results: + [info]: namespace "" updated to "edge1-network-function-a", 1 value(s) changed +``` + +We now initialize and push the package to the `edge1` repo: + +``` +porchctl -n porch-demo rpkg init edge1-network-function-a --repository=edge1 --workspace=v1 +edge1-d701be9b849b8b8724a6e052cbc74ca127b737c3 created + +porchctl -n porch-demo rpkg pull edge1-d701be9b849b8b8724a6e052cbc74ca127b737c3 tmp_packages_for_deployment/edge1-network-function-a + +cp tmp_packages_for_deployment/edge1-network-function-a.clone.tmp/* tmp_packages_for_deployment/edge1-network-function-a +rm -fr tmp_packages_for_deployment/edge1-network-function-a.clone.tmp + +porchctl -n porch-demo rpkg push edge1-d701be9b849b8b8724a6e052cbc74ca127b737c3 tmp_packages_for_deployment/edge1-network-function-a + +porchctl -n porch-demo rpkg get --name edge1-network-function-a +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +edge1-d701be9b849b8b8724a6e052cbc74ca127b737c3 network-function-a v1 false Draft edge1 +``` + +You can verify that the package is in the `network-function-a/v1` branch of the deployment repo using the Gitea web UI. + + +Check that the `edge1-network-function-a` package is not deployed on the edge1 cluster yet: +``` +export KUBECONFIG=~/.kube/kind-edge1-config + +kubectl get pod -n edge1-network-function-a +No resources found in network-function-a namespace. + +``` + +We now propose and approve the deployment package, which merges the package to the `edge1` repo and further triggers Configsync to apply the package to the `edge1` cluster. + +``` +export KUBECONFIG=~/.kube/kind-management-config + +porchctl -n porch-demo rpkg propose edge1-d701be9b849b8b8724a6e052cbc74ca127b737c3 +edge1-d701be9b849b8b8724a6e052cbc74ca127b737c3 proposed + +porchctl -n porch-demo rpkg approve edge1-d701be9b849b8b8724a6e052cbc74ca127b737c3 +edge1-d701be9b849b8b8724a6e052cbc74ca127b737c3 approved + +porchctl -n porch-demo rpkg get --name edge1-network-function-a +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +edge1-d701be9b849b8b8724a6e052cbc74ca127b737c3 network-function-a v1 v1 true Published edge1 +``` + +We can now check that the `network-function-a` package is deployed on the edge1 cluster and that the pod is running +``` +export KUBECONFIG=~/.kube/kind-edge1-config + +kubectl get pod -n edge1-network-function-a +No resources found in network-function-a namespace. + +kubectl get pod -n edge1-network-function-a +NAME READY STATUS RESTARTS AGE +network-function-9779fc9f5-4rqp2 1/1 ContainerCreating 0 9s + +kubectl get pod -n edge1-network-function-a +NAME READY STATUS RESTARTS AGE +network-function-9779fc9f5-4rqp2 1/1 Running 0 44s +``` + +### Blueprint with a Kpt pipeline + +The process for deploying a blueprint with a Kpt pipeline runs the Kpt pipeline automatically with whatever configuration we give it. Rather than explicitly running a Kpt function to change the namespace, we will specify the namespace as configuration and the pipeline will apply it to the deployment. + +``` +porchctl -n porch-demo rpkg pull management-c97bc433db93f2e8a3d413bed57216c2a72fc7e3 tmp_packages_for_deployment/edge1-network-function-auto-namespace-a.clone.tmp + +find tmp_packages_for_deployment/edge1-network-function-auto-namespace-a.clone.tmp + +tmp_packages_for_deployment/edge1-network-function-auto-namespace-a.clone.tmp +tmp_packages_for_deployment/edge1-network-function-auto-namespace-a.clone.tmp/deployment.yaml +tmp_packages_for_deployment/edge1-network-function-auto-namespace-a.clone.tmp/.KptRevisionMetadata +tmp_packages_for_deployment/edge1-network-function-auto-namespace-a.clone.tmp/README.md +tmp_packages_for_deployment/edge1-network-function-auto-namespace-a.clone.tmp/Kptfile +tmp_packages_for_deployment/edge1-network-function-auto-namespace-a.clone.tmp/package-context.yaml +``` + +We now remove the original metadata from the package. +``` +rm tmp_packages_for_deployment/edge1-network-function-auto-namespace-a.clone.tmp/.KptRevisionMetadata +``` + +The package we created in the last section is cloned. We now initialize and push the package to the `edge1` repo: + +``` +porchctl -n porch-demo rpkg init edge1-network-function-auto-namespace-a --repository=edge1 --workspace=v1 +edge1-48997da49ca0a733b0834c1a27943f1a0e075180 created + +porchctl -n porch-demo rpkg pull edge1-48997da49ca0a733b0834c1a27943f1a0e075180 tmp_packages_for_deployment/edge1-network-function-auto-namespace-a + +cp tmp_packages_for_deployment/edge1-network-function-auto-namespace-a.clone.tmp/* tmp_packages_for_deployment/edge1-network-function-auto-namespace-a +rm -fr tmp_packages_for_deployment/edge1-network-function-auto-namespace-a.clone.tmp +``` + + +We now simply configure the namespace we want to apply. edit the `tmp_packages_for_deployment/edge1-network-function-auto-namespace-a/package-context.yaml` file and set the namespace to use: + +``` +8c8 +< name: default-namespace-name +--- +> name: edge1-network-function-auto-namespace-a +``` + +We now push the package to the `edge1` repo: + +``` +porchctl -n porch-demo rpkg push edge1-48997da49ca0a733b0834c1a27943f1a0e075180 tmp_packages_for_deployment/edge1-network-function-auto-namespace-a +[RUNNING] "gcr.io/kpt-fn/set-namespace:v0.4.1" +[PASS] "gcr.io/kpt-fn/set-namespace:v0.4.1" + Results: + [info]: namespace "default-namespace-name" updated to "edge1-network-function-auto-namespace-a", 1 value(s) changed + +porchctl -n porch-demo rpkg get --name edge1-network-function-auto-namespace-a +``` + +You can verify that the package is in the `network-function-auto-namespace-a/v1` branch of the deployment repo using the Gitea web UI. You can see that the kpt pipeline fired and set the `edge1-network-function-auto-namespace-a` namespace in the `deployment.yaml` file on the `drafts/edge1-network-function-auto-namespace-a/v1` branch on the `edge1` repo in gitea. + +Check that the `edge1-network-function-auto-namespace-a` package is not deployed on the edge1 cluster yet: +``` +export KUBECONFIG=~/.kube/kind-edge1-config + +kubectl get pod -n edge1-network-function-auto-namespace-a +No resources found in network-function-auto-namespace-a namespace. + +``` + +We now propose and approve the deployment package, which merges the package to the `edge1` repo and further triggers Configsync to apply the package to the `edge1` cluster. + +``` +export KUBECONFIG=~/.kube/kind-management-config + +porchctl -n porch-demo rpkg propose edge1-48997da49ca0a733b0834c1a27943f1a0e075180 +edge1-48997da49ca0a733b0834c1a27943f1a0e075180 proposed + +porchctl -n porch-demo rpkg approve edge1-48997da49ca0a733b0834c1a27943f1a0e075180 +edge1-48997da49ca0a733b0834c1a27943f1a0e075180 approved + +porchctl -n porch-demo rpkg get --name edge1-network-function-auto-namespace-a +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +edge1-48997da49ca0a733b0834c1a27943f1a0e075180 edge1-network-function-auto-namespace-a v1 v1 true Published edge1 +``` + +We can now check that the `network-function-auto-namespace-a` package is deployed on the edge1 cluster and that the pod is running +``` +export KUBECONFIG=~/.kube/kind-edge1-config + +kubectl get pod -n edge1-network-function-auto-namespace-a +No resources found in network-function-auto-namespace-a namespace. + +kubectl get pod -n edge1-network-function-auto-namespace-a +NAME READY STATUS RESTARTS AGE +network-function-auto-namespace-85bc658d67-rbzt6 1/1 ContainerCreating 0 3s + +kubectl get pod -n edge1-network-function-auto-namespace-a +NAME READY STATUS RESTARTS AGE +network-function-auto-namespace-85bc658d67-rbzt6 1/1 Running 0 10s +``` + +## Deploying using Package Variant Sets + +### Simple PackageVariantSet + +The PackageVariant CR is defined in the [simple-variant.yaml](simple-variant.yaml) file. In this very simple PackageVariant, the `network-function` package in the `management` repo is cloned into the `edge1` repo as the `network-function-b` and `network-function-c` package variants. + +> **_NOTE:_** This simple package variant does not specify any configuration changes. Normally, as well as cloning and renaming, configuration changes would be applied on a package variant. + +> Use `kubectl explain PackageVariantSet` to get help on the structure of the PackageVariantSet CRD. + +Applying the PackageVariantSet creates the new packages as draft packages: + +``` +kubectl apply -f simple-variant.yaml + +kubectl get PackageRevisions -n porch-demo | grep -v 'external-blueprints' +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +edge1-bc8294d121360ad305c9a826a8734adcf5f1b9c0 network-function-a v1 main false Published edge1 +edge1-9b4b4d99c43b5c5c8489a47bbce9a61f79904946 network-function-a v1 v1 true Published edge1 +edge1-a31b56c7db509652f00724dd49746660757cd98a network-function-b packagevariant-1 false Draft edge1 +edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 network-function-c packagevariant-1 false Draft edge1 +management-49580fc22bcf3bf51d334a00b6baa41df597219e network-function v1 main false Published management +management-8b80738a6e0707e3718ae1db3668d0b8ca3f1c82 network-function v1 v1 true Published management + +porchctl -n porch-demo rpkg get --name network-function-b +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +edge1-a31b56c7db509652f00724dd49746660757cd98a network-function-b packagevariant-1 false Draft edge1 + +porchctl -n porch-demo rpkg get --name network-function-c +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 network-function-c packagevariant-1 false Draft edge1 +``` + +We can see that our two new packages are created as draft packages on the edge1 repo. We can also examine the PacakgeVariant CRs that have been created: +``` +kubectl get PackageVariant -n porch-demo +NAMESPACE NAME READY STATUS RESTARTS AGE +network-function-a network-function-9779fc9f5-2tswc 1/1 Running 0 19h +network-function-b network-function-9779fc9f5-6zwhh 1/1 Running 0 76s +network-function-c network-function-9779fc9f5-h7nsb 1/1 Running 0 41s +``` + +
    +It is also interesting to examine the yaml of the PackageVariant: + +``` +kubectl get PackageVariant -n porch-demo -o yaml +apiVersion: v1 +items: +- apiVersion: config.porch.kpt.dev/v1alpha1 + kind: PackageVariant + metadata: + creationTimestamp: "2024-01-09T15:00:00Z" + finalizers: + - config.porch.kpt.dev/packagevariants + generation: 1 + labels: + config.porch.kpt.dev/packagevariantset: a923d4fc-a3a7-437c-84d1-52b30dd6cf49 + name: network-function-edge1-network-function-b + namespace: porch-demo + ownerReferences: + - apiVersion: config.porch.kpt.dev/v1alpha2 + controller: true + kind: PackageVariantSet + name: network-function + uid: a923d4fc-a3a7-437c-84d1-52b30dd6cf49 + resourceVersion: "237053" + uid: 7a81099c-5a0b-49d8-b73c-48e33cd134e5 + spec: + downstream: + package: network-function-b + repo: edge1 + upstream: + package: network-function + repo: management + revision: v1 + status: + conditions: + - lastTransitionTime: "2024-01-09T15:00:00Z" + message: all validation checks passed + reason: Valid + status: "False" + type: Stalled + - lastTransitionTime: "2024-01-09T15:00:31Z" + message: successfully ensured downstream package variant + reason: NoErrors + status: "True" + type: Ready + downstreamTargets: + - name: edge1-a31b56c7db509652f00724dd49746660757cd98a +- apiVersion: config.porch.kpt.dev/v1alpha1 + kind: PackageVariant + metadata: + creationTimestamp: "2024-01-09T15:00:00Z" + finalizers: + - config.porch.kpt.dev/packagevariants + generation: 1 + labels: + config.porch.kpt.dev/packagevariantset: a923d4fc-a3a7-437c-84d1-52b30dd6cf49 + name: network-function-edge1-network-function-c + namespace: porch-demo + ownerReferences: + - apiVersion: config.porch.kpt.dev/v1alpha2 + controller: true + kind: PackageVariantSet + name: network-function + uid: a923d4fc-a3a7-437c-84d1-52b30dd6cf49 + resourceVersion: "237056" + uid: da037d0a-9a7a-4e85-842c-1324e9da819a + spec: + downstream: + package: network-function-c + repo: edge1 + upstream: + package: network-function + repo: management + revision: v1 + status: + conditions: + - lastTransitionTime: "2024-01-09T15:00:01Z" + message: all validation checks passed + reason: Valid + status: "False" + type: Stalled + - lastTransitionTime: "2024-01-09T15:00:31Z" + message: successfully ensured downstream package variant + reason: NoErrors + status: "True" + type: Ready + downstreamTargets: + - name: edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 +kind: List +metadata: + resourceVersion: "" +``` +
    + +We now want to customize and deploy our two packages. To do this we must pull the pacakges locally, render the kpt functions, and then push the rendered packages back up to the `edge1` repo. + +``` +porchctl rpkg pull edge1-a31b56c7db509652f00724dd49746660757cd98a tmp_packages_for_deployment/edge1-network-function-b --namespace=porch-demo +kpt fn eval --image=gcr.io/kpt-fn/set-namespace:v0.4.1 tmp_packages_for_deployment/edge1-network-function-b -- namespace=network-function-b +porchctl rpkg push edge1-a31b56c7db509652f00724dd49746660757cd98a tmp_packages_for_deployment/edge1-network-function-b --namespace=porch-demo + +porchctl rpkg pull edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 tmp_packages_for_deployment/edge1-network-function-c --namespace=porch-demo +kpt fn eval --image=gcr.io/kpt-fn/set-namespace:v0.4.1 tmp_packages_for_deployment/edge1-network-function-c -- namespace=network-function-c +porchctl rpkg push edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 tmp_packages_for_deployment/edge1-network-function-c --namespace=porch-demo +``` + +Check that the namespace has been updated on the two packages in the `edge1` repo using the Gitea web UI. + +Now our two packages are ready for deployment: + +``` +porchctl rpkg propose edge1-a31b56c7db509652f00724dd49746660757cd98a --namespace=porch-demo +edge1-a31b56c7db509652f00724dd49746660757cd98a proposed + +porchctl rpkg approve edge1-a31b56c7db509652f00724dd49746660757cd98a --namespace=porch-demo +edge1-a31b56c7db509652f00724dd49746660757cd98a approved + +porchctl rpkg propose edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 --namespace=porch-demo +edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 proposed + +porchctl rpkg approve edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 --namespace=porch-demo +edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 approved +``` + +We can now check that the `network-function-b` and `network-function-c` packages are deployed on the edge1 cluster and that the pods are running +``` +export KUBECONFIG=~/.kube/kind-edge1-config + +kubectl get pod -A | egrep '(NAMESPACE|network-function)' +NAMESPACE NAME READY STATUS RESTARTS AGE +network-function-a network-function-9779fc9f5-2tswc 1/1 Running 0 19h +network-function-b network-function-9779fc9f5-6zwhh 1/1 Running 0 76s +network-function-c network-function-9779fc9f5-h7nsb 1/1 Running 0 41s +``` + +### Using a PackageVariantSet to automatically set the package name and package namespace + +The PackageVariant CR is defined in the [name-namespace-variant.yaml](name-namespace-variant.yaml) file. In this PackageVariant, the `network-function-auto-namespace` package in the `management` repo is cloned into the `edge1` repo as the `network-function-auto-namespace-x` and `network-function-auto-namespace-y` package variants, similar to the PackageVariant in `simple-variant.yaml`. + +Here note the extra `template` section provided for the repositories in the PackageVariant: + +``` +template: + downstream: + packageExpr: "target.package + '-cumulus'" +``` + +This template means that each package in the `spec.targets.repositories..packageNames` list will have the suffix `-cumulus` added to its name. This allows us to automatically generate unique package names. Applying the PackageVariantSet also automatically sets a unique namespace for each network function because applying the PackageVariantSet automatically triggers the Kpt pipeline in the `network-function-auto-namespace` Kpt package to gerenate unique namespaces for each deployed package. + +> Many other mutatinos can be performed using a PackageVariantSet. Use `kubectl explain PackageVariantSet` to get help on the structure of the PackageVariantSet CRD to see the various mutations that are possible. + +Applying the PackageVariantSet creates the new packages as draft packages: + +``` +kubectl apply -f name-namespace-variant.yaml +packagevariantset.config.porch.kpt.dev/network-function-auto-namespace created + +kunectl get -n porch-demo PackageVariantSet network-function-auto-namespace +NAME AGE +network-function-auto-namespace 38s + +kubectl get PackageRevisions -n porch-demo | grep auto-namespace +edge1-1f521f05a684adfa8562bf330f7bc72b50e21cc5 edge1-network-function-auto-namespace-a v1 main false Published edge1 +edge1-48997da49ca0a733b0834c1a27943f1a0e075180 edge1-network-function-auto-namespace-a v1 v1 true Published edge1 +edge1-009659a8532552b86263434f68618554e12f4f7c network-function-auto-namespace-x-cumulonimbus packagevariant-1 false Draft edge1 +edge1-77dbfed49b6cb0723b7c672b224de04c0cead67e network-function-auto-namespace-y-cumulonimbus packagevariant-1 false Draft edge1 +management-f9a6f2802111b9e81c296422c03aae279725f6df network-function-auto-namespace v1 main false Published management +management-c97bc433db93f2e8a3d413bed57216c2a72fc7e3 network-function-auto-namespace v1 v1 true Published management +``` +Note that the suffix `x-cumulonimbus` and `y-cumulonimbus` has been palced on the package names. + +Examine the `edge1` repo on Giea and you should see two new draft branches. + +- drafts/network-function-auto-namespace-x-cumulonimbus/packagevariant-1 +- drafts/network-function-auto-namespace-y-cumulonimbus/packagevariant-1 + +In these packages, you will see that: + +1. The package name has been generated as `network-function-auto-namespace-x-cumulonimbus` and `network-function-auto-namespace-y-cumulonimbus`in all files in the packages +2. The namespace has been generated as `network-function-auto-namespace-x-cumulonimbus` and `network-function-auto-namespace-y-cumulonimbus` respectively in the `demployment.yaml` files +3. The PackageVariant has set the `data.name` field as `network-function-auto-namespace-x-cumulonimbus` and `network-function-auto-namespace-y-cumulonimbus` respectively in the `pckage-context.yaml` files + +Note that this has all been performed automatically; weh have not had to perform the `porchctl rpkg pull/kpt fn render/porchctl rpkg push` combination of commands to make these chages as we had to in the `simple-variant.yaml` case above. + +Now, let us explore the packages further: + +``` +porchctl -n porch-demo rpkg get --name network-function-auto-namespace-x-cumulonimbus +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +edge1-009659a8532552b86263434f68618554e12f4f7c network-function-auto-namespace-x-cumulonimbus packagevariant-1 false Draft edge1 + +porchctl -n porch-demo rpkg get --name network-function-auto-namespace-y-cumulonimbus +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +edge1-77dbfed49b6cb0723b7c672b224de04c0cead67e network-function-auto-namespace-y-cumulonimbus packagevariant-1 false Draft edge1 +``` + +We can see that our two new packages are created as draft packages on the edge1 repo. We can also examine the PacakgeVariant CRs that have been created: +``` +kubectl get PackageVariant -n porch-demo +NAME AGE +network-function-auto-namespace-edge1-network-function-35079f9f 3m41s +network-function-auto-namespace-edge1-network-function-d521d2c0 3m41s +network-function-edge1-network-function-b 38m +network-function-edge1-network-function-c 38m +``` + +
    +It is also interesting to examine the yaml of a PackageVariant: + +``` +kubectl get PackageVariant -n porch-demo network-function-auto-namespace-edge1-network-function-35079f9f -o yaml +apiVersion: config.porch.kpt.dev/v1alpha1 +kind: PackageVariant +metadata: + creationTimestamp: "2024-01-24T15:10:19Z" + finalizers: + - config.porch.kpt.dev/packagevariants + generation: 1 + labels: + config.porch.kpt.dev/packagevariantset: 71edbdff-21c1-45f4-b9cb-6d2ecfc3da4e + name: network-function-auto-namespace-edge1-network-function-35079f9f + namespace: porch-demo + ownerReferences: + - apiVersion: config.porch.kpt.dev/v1alpha2 + controller: true + kind: PackageVariantSet + name: network-function-auto-namespace + uid: 71edbdff-21c1-45f4-b9cb-6d2ecfc3da4e + resourceVersion: "404083" + uid: 5ae69c2d-6aac-4942-b717-918325650190 +spec: + downstream: + package: network-function-auto-namespace-x-cumulonimbus + repo: edge1 + upstream: + package: network-function-auto-namespace + repo: management + revision: v1 +status: + conditions: + - lastTransitionTime: "2024-01-24T15:10:19Z" + message: all validation checks passed + reason: Valid + status: "False" + type: Stalled + - lastTransitionTime: "2024-01-24T15:10:49Z" + message: successfully ensured downstream package variant + reason: NoErrors + status: "True" + type: Ready + downstreamTargets: + - name: edge1-009659a8532552b86263434f68618554e12f4f7c +``` +
    + +Our two packages are ready for deployment: + +``` +porchctl rpkg propose edge1-009659a8532552b86263434f68618554e12f4f7c --namespace=porch-demo +edge1-009659a8532552b86263434f68618554e12f4f7c proposed + +porchctl rpkg approve edge1-009659a8532552b86263434f68618554e12f4f7c --namespace=porch-demo +edge1-009659a8532552b86263434f68618554e12f4f7c approved + +porchctl rpkg propose edge1-77dbfed49b6cb0723b7c672b224de04c0cead67e --namespace=porch-demo +edge1-77dbfed49b6cb0723b7c672b224de04c0cead67e proposed + +porchctl rpkg approve edge1-77dbfed49b6cb0723b7c672b224de04c0cead67e --namespace=porch-demo +edge1-77dbfed49b6cb0723b7c672b224de04c0cead67e approved +``` + +We can now check that the packages are deployed on the edge1 cluster and that the pods are running + +``` +export KUBECONFIG=~/.kube/kind-edge1-config + +kubectl get pod -A | egrep '(NAMESPACE|network-function)' +NAMESPACE NAME READY STATUS RESTARTS AGE +edge1-network-function-a network-function-9779fc9f5-87scj 1/1 Running 1 (2d1h ago) 4d22h +edge1-network-function-auto-namespace-a network-function-auto-namespace-85bc658d67-rbzt6 1/1 Running 1 (2d1h ago) 4d22h +network-function-b network-function-9779fc9f5-twh2g 1/1 Running 0 45m +network-function-c network-function-9779fc9f5-whhr8 1/1 Running 0 44m + +kubectl get pod -A | egrep '(NAMESPACE|network-function)' +NAMESPACE NAME READY STATUS RESTARTS AGE +edge1-network-function-a network-function-9779fc9f5-87scj 1/1 Running 1 (2d1h ago) 4d22h +edge1-network-function-auto-namespace-a network-function-auto-namespace-85bc658d67-rbzt6 1/1 Running 1 (2d1h ago) 4d22h +network-function-auto-namespace-x-cumulonimbus network-function-auto-namespace-85bc658d67-86gml 0/1 ContainerCreating 0 1s +network-function-b network-function-9779fc9f5-twh2g 1/1 Running 0 45m +network-function-c network-function-9779fc9f5-whhr8 1/1 Running 0 44m + +kubectl get pod -A | egrep '(NAMESPACE|network-function)' +NAMESPACE NAME READY STATUS RESTARTS AGE +edge1-network-function-a network-function-9779fc9f5-87scj 1/1 Running 1 (2d1h ago) 4d22h +edge1-network-function-auto-namespace-a network-function-auto-namespace-85bc658d67-rbzt6 1/1 Running 1 (2d1h ago) 4d22h +network-function-auto-namespace-x-cumulonimbus network-function-auto-namespace-85bc658d67-86gml 1/1 Running 0 10s +network-function-b network-function-9779fc9f5-twh2g 1/1 Running 0 45m +network-function-c network-function-9779fc9f5-whhr8 1/1 Running 0 45m + +kubectl get pod -A | egrep '(NAMESPACE|network-function)' +NAMESPACE NAME READY STATUS RESTARTS AGE +edge1-network-function-a network-function-9779fc9f5-87scj 1/1 Running 1 (2d1h ago) 4d22h +edge1-network-function-auto-namespace-a network-function-auto-namespace-85bc658d67-rbzt6 1/1 Running 1 (2d1h ago) 4d22h +network-function-auto-namespace-x-cumulonimbus network-function-auto-namespace-85bc658d67-86gml 1/1 Running 0 50s +network-function-b network-function-9779fc9f5-twh2g 1/1 Running 0 46m +network-function-c network-function-9779fc9f5-whhr8 1/1 Running 0 45m + +kubectl get pod -A | egrep '(NAMESPACE|network-function)' +NAMESPACE NAME READY STATUS RESTARTS AGE +edge1-network-function-a network-function-9779fc9f5-87scj 1/1 Running 1 (2d1h ago) 4d22h +edge1-network-function-auto-namespace-a network-function-auto-namespace-85bc658d67-rbzt6 1/1 Running 1 (2d1h ago) 4d22h +network-function-auto-namespace-x-cumulonimbus network-function-auto-namespace-85bc658d67-86gml 1/1 Running 0 51s +network-function-auto-namespace-y-cumulonimbus network-function-auto-namespace-85bc658d67-tp5m8 0/1 ContainerCreating 0 1s +network-function-b network-function-9779fc9f5-twh2g 1/1 Running 0 46m +network-function-c network-function-9779fc9f5-whhr8 1/1 Running 0 45m + +kubectl get pod -A | egrep '(NAMESPACE|network-function)' +NAMESPACE NAME READY STATUS RESTARTS AGE +edge1-network-function-a network-function-9779fc9f5-87scj 1/1 Running 1 (2d1h ago) 4d22h +edge1-network-function-auto-namespace-a network-function-auto-namespace-85bc658d67-rbzt6 1/1 Running 1 (2d1h ago) 4d22h +network-function-auto-namespace-x-cumulonimbus network-function-auto-namespace-85bc658d67-86gml 1/1 Running 0 54s +network-function-auto-namespace-y-cumulonimbus network-function-auto-namespace-85bc658d67-tp5m8 1/1 Running 0 4s +network-function-b network-function-9779fc9f5-twh2g 1/1 Running 0 46m +network-function-c network-function-9779fc9f5-whhr8 1/1 Running 0 45m +``` diff --git a/content/en/docs/porch/running-porch/_index.md b/content/en/docs/porch/running-porch/_index.md new file mode 100644 index 00000000..4c68b980 --- /dev/null +++ b/content/en/docs/porch/running-porch/_index.md @@ -0,0 +1,7 @@ +--- +title: "Running Porch" +type: docs +weight: 6 +description: +--- + diff --git a/content/en/docs/porch/running-porch/running-locally.md b/content/en/docs/porch/running-porch/running-locally.md new file mode 100644 index 00000000..94490b40 --- /dev/null +++ b/content/en/docs/porch/running-porch/running-locally.md @@ -0,0 +1,121 @@ +--- +title: "Running Porch Locally" +type: docs +weight: 1 +description: +--- + +## Prerequisites + +To run Porch locally, you will need: + +* Linux machine (technically it is possible to run Porch locally on a Mac but + due to differences in Docker between Linux and Mac, the Porch scripts are + confirmed to work on Linux) +* [go 1.21](https://go.dev/dl/) or newer +* [docker](https://docs.docker.com/get-docker/) +* [git](https://git-scm.com/) +* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/) +* `make` + +## Getting Started + +Clone this repository into `${GOPATH}/src/github.com/GoogleContainerTools/kpt`. + +```sh +git clone https://github.com/GoogleContainerTools/kpt.git "${GOPATH}/src/github.com/GoogleContainerTools/kpt" +``` + +Download dependencies: + +```sh +make tidy +``` + +## Running Porch + +Porch consists of: +* k8s extension apiserver [porch](https://github.com/nephio-project/porch/tree/main/pkg/apiserver) +* kpt function evaluator [func](https://github.com/nephio-project/porch/tree/main/func) +* k8s [controllers](https://github.com/nephio-project/porch/tree/main/controllers) + +In addition, to run Porch locally, we need to run the main k8s apiserver and its backing storage, etcd. + +To build and run Porch locally in one command, run: + +```sh +# Go into the porch directory: +cd "${GOPATH}/src/github.com/GoogleContainerTools/kpt/porch" + +# Start Porch in one command: +make +``` + +This will: + +* create Docker network named `porch` +* build and start `etcd` Docker container +* build and start main k8s apiserver Docker container +* build and start the kpt function evaluator microservice + [func](https://github.com/nephio-project/porch/tree/main/func) Docker container +* build Porch binary and run it locally +* configure Porch as the extension apiserver + +**Note:** this command does not build and start the Porch k8s controllers. Those +are not required for basic package orchestration but are required for deploying packages. + +You can also run the commands individually which can be useful when developing, +in particular building and running Porch extension apiserver. + +```sh +# Create Porch network +make network + +# Build and start etcd container +make start-etcd + +# Build and start main apiserver container +make start-kube-apiserver + +# Build and start kpt function evaluator microservice Docker container +make start-function-runner + +# Build and start Porch on your local machine. +make run-local +``` + +Porch will run directly on your local machine and API requests will be forwarded to it from the +main apiserver. Configure `kubectl` context to interact with the main k8s apiserver running as +Docker container: + +```sh +export KUBECONFIG=${PWD}/deployments/local/kubeconfig + +# Confirm Porch is running +kubectl api-resources | grep porch + +repositories config.porch.kpt.dev/v1alpha1 true Repository +functions porch.kpt.dev/v1alpha1 true Function +packagerevisionresources porch.kpt.dev/v1alpha1 true PackageRevisionResources +packagerevisions porch.kpt.dev/v1alpha1 true PackageRevision +``` + +## Restarting Porch + +If you make code changes, an expedient way to rebuild and restart porch is: + +* Stop Porch running in the shell session (Ctrl+C) +* Run `make run-local` again to rebuild and restart Porch + +## Stopping Porch + +To stop Porch and all associated Docker containers, including the Docker network, run: + +```sh +make stop +``` + +## Troubleshooting + +If you run into issues that look like `git: authentication required`, make sure you have SSH +keys set up on your local machine. diff --git a/content/en/docs/porch/running-porch/running-on-GKE.md b/content/en/docs/porch/running-porch/running-on-GKE.md new file mode 100644 index 00000000..df1b3e4a --- /dev/null +++ b/content/en/docs/porch/running-porch/running-on-GKE.md @@ -0,0 +1,271 @@ +--- +title: "Running Porch on GKE" +type: docs +weight: 2 +description: +--- + +You can install Porch by either using one of the +[released versions](https://github.com/GoogleContainerTools/kpt/releases), or +building Porch from sources. + +## Prerequisites + +Note: Porch should run on any kubernetes cluster and should work on any cloud. +We have just started by documenting one known-good configuration: GCP and GKE. +We would welcome comparable installation instructions or feedback from people +that try it out on other clouds / configurations. + +To run one of the [released versions](https://github.com/GoogleContainerTools/kpt/releases) +of Porch on GKE, you will need: + +* A [GCP Project](https://console.cloud.google.com/projectcreate) +* [gcloud](https://cloud.google.com/sdk/docs/install) +* [kubectl](https://kubernetes.io/docs/tasks/tools/); you can install it via + `gcloud components install kubectl` +* [kpt](https://kpt.dev/) +* Command line utilities such as `curl`, `tar` + +To build and run Porch on GKE, you will also need: + +* A container registry which will work with your GKE cluster. + [Artifact Registry](https://console.cloud.google.com/artifacts) + or [Container Registry](https://console.cloud.google.com/gcr) work well + though you can use others too. +* [go 1.17](https://go.dev/dl/) or newer +* [docker](https://docs.docker.com/get-docker/) +* [Configured docker credential helper](https://cloud.google.com/sdk/gcloud/reference/auth/configure-docker) +* [git](https://git-scm.com/) +* [make](https://www.gnu.org/software/make/) + +## Getting Started + +Make sure your `gcloud` is configured with your project (alternatively, you can +augment all following `gcloud` commands below with `--project` flag): + +```sh +gcloud config set project YOUR_GCP_PROJECT +``` + +Select a GKE cluster or create a new one: + +```sh +gcloud services enable container.googleapis.com +gcloud container clusters create-auto --region us-central1 porch-dev +``` + +**Note:** For development of Porch, in particular for running Porch tests, +Standard GKE cluster is currently preferable. Select a +[GCP region](https://cloud.google.com/compute/docs/regions-zones#available) + that works best for your needs: + + ```sh +gcloud services enable container.googleapis.com +gcloud container clusters create --region us-central1 porch-dev +``` + +And ensure `kubectl` is targeting your GKE cluster: + +```sh +gcloud container clusters get-credentials --region us-central1 porch-dev +``` + +## Run Released Version of Porch + +To run a released version of Porch, download the release config bundle from +[Porch release page](https://github.com/GoogleContainerTools/kpt/releases); +please note you'll need to scroll past recent kpt releases to the most +recent `porch/...` release. + +Untar and apply the `deployment-blueprint.tar.gz` config bundle. This will install: + +* Porch server +* [Config Sync](https://kpt.dev/gitops/configsync/) + +```sh +mkdir porch-install +tar xzf ~/Downloads/deployment-blueprint.tar.gz -C porch-install +kubectl apply -f porch-install +kubectl wait deployment --for=condition=Available porch-server -n porch-system +``` + +You can verify that Porch is running by querying the `api-resources`: + +```sh +kubectl api-resources | grep porch +``` +Expected output will include: + +``` +repositories config.porch.kpt.dev/v1alpha1 true Repository +functions porch.kpt.dev/v1alpha1 true Function +packagerevisionresources porch.kpt.dev/v1alpha1 true PackageRevisionResources +packagerevisions porch.kpt.dev/v1alpha1 true PackageRevision +``` + +To install ConfigSync: + +```sh +echo " +apiVersion: configmanagement.gke.io/v1 +kind: ConfigManagement +metadata: + name: config-management +spec: + enableMultiRepo: true +" | kubectl apply -f - +``` + +You can start [using Porch](guides/porch-user-guide.md). + +## Run Custom Build of Porch + +To run custom build of Porch, you will need additional [prerequisites](#prerequisites). +The commands below use [Google Container Registry](https://console.cloud.google.com/gcr). + +Clone this repository into `${GOPATH}/src/github.com/GoogleContainerTools/kpt`. + +```sh +git clone https://github.com/GoogleContainerTools/kpt.git "${GOPATH}/src/github.com/GoogleContainerTools/kpt" +``` + +[Configure](https://cloud.google.com/sdk/gcloud/reference/auth/configure-docker) +docker credential helper for your repository + +If your use case doesn't require Porch to interact with GCP container registries, +you can build and deploy Porch by running the following command. It will build and +push Porch Docker images into (by default) Google Container Registry named (example +shown is the Porch server image): + +`gcr.io/YOUR-PROJECT-ID/porch-server:SHORT-COMMIT-SHA` + + +```sh +IMAGE_TAG=$(git rev-parse --short HEAD) make push-and-deploy-no-sa +``` + +If you want to use different repository, you can set `IMAGE_REPO` variable +(see [Makefile](https://github.com/GoogleContainerTools/kpt/blob/main/porch/Makefile#L28) +for details). + +The `make push-and-deploy-no-sa` target will install Porch but not Config Sync. +You can install Config Sync in your k8s cluster manually following the +[documentation](https://github.com/GoogleContainerTools/kpt-config-sync/blob/main/docs/installation.md). + +**Note**: The `-no-sa` (no service account) targets create Porch deployment +configuration which does not associate Kubernetes service accounts with GCP +service accounts. This is sufficient for Porch to integate with Git repositories +using Basic Auth, for example GitHub. + +As above, you can verify that Porch is running by querying the `api-resources`: + +```sh +kubectl api-resources | grep porch +``` + +And start [using Porch](guides/porch-user-guide.md) if the Porch resources are +available. + +### Workload Identity + +[Workload Identity](https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity) +is a simple way to access Google Cloud services from porch. + +#### Google Cloud Source Repositories + +[Cloud Source Repositories](https://cloud.google.com/source-repositories) can be access using +workload identity, removing the need to store credentials in the cluster. + +To set it up, create the necessary service accounts and give it the required roles: + +```sh +GCP_PROJECT_ID=$(gcloud config get-value project) + +# Create GCP service account (GSA) for Porch server. +gcloud iam service-accounts create porch-server + +# We want to create and delete images. Assign IAM roles to allow repository +# administration. +gcloud projects add-iam-policy-binding ${GCP_PROJECT_ID} \ + --member "serviceAccount:porch-server@${GCP_PROJECT_ID}.iam.gserviceaccount.com" \ + --role "roles/source.admin" + +gcloud iam service-accounts add-iam-policy-binding porch-server@${GCP_PROJECT_ID}.iam.gserviceaccount.com \ + --role roles/iam.workloadIdentityUser \ + --member "serviceAccount:${GCP_PROJECT_ID}.svc.id.goog[porch-system/porch-server]" + +# We need to associate the Kubernetes Service Account (KSA) +# with the GSA by annotating the KSA. +kubectl annotate serviceaccount porch-server -n porch-system \ + iam.gke.io/gcp-service-account=porch-server@${GCP_PROJECT_ID}.iam.gserviceaccount.com +``` + +Build Porch, push images, and deploy porch server and controllers using the +`make` target that adds workload identity service account annotations: + +```sh +IMAGE_TAG=$(git rev-parse --short HEAD) make push-and-deploy +``` + +As above, you can verify that Porch is running by querying the `api-resources`: + +```sh +kubectl api-resources | grep porch +``` + +To register a repository, use the following command: +```sh +kpt alpha repo register --repo-workload-identity --namespace=default https://source.developers.google.com/p//r/ +``` + +#### OCI + +To integrate with OCI repositories such as +[Artifact Registry](https://console.cloud.google.com/artifacts) or +[Container Registry](https://console.cloud.google.com/gcr), Porch relies on +[workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity). + +For that use case, create service accounts and assign roles: + +```sh +GCP_PROJECT_ID=$(gcloud config get-value project) + +# Create GCP service account for Porch server. +gcloud iam service-accounts create porch-server +# Create GCP service account for Porch sync controller. +gcloud iam service-accounts create porch-sync + +# We want to create and delete images. Assign IAM roles to allow repository +# administration. +gcloud projects add-iam-policy-binding ${GCP_PROJECT_ID} \ + --member "serviceAccount:porch-server@${GCP_PROJECT_ID}.iam.gserviceaccount.com" \ + --role "roles/artifactregistry.repoAdmin" + +gcloud iam service-accounts add-iam-policy-binding porch-server@${GCP_PROJECT_ID}.iam.gserviceaccount.com \ + --role roles/iam.workloadIdentityUser \ + --member "serviceAccount:${GCP_PROJECT_ID}.svc.id.goog[porch-system/porch-server]" + +gcloud projects add-iam-policy-binding ${GCP_PROJECT_ID} \ + --member "serviceAccount:porch-sync@${GCP_PROJECT_ID}.iam.gserviceaccount.com" \ + --role "roles/artifactregistry.reader" + +gcloud iam service-accounts add-iam-policy-binding porch-sync@${GCP_PROJECT_ID}.iam.gserviceaccount.com \ + --role roles/iam.workloadIdentityUser \ + --member "serviceAccount:${GCP_PROJECT_ID}.svc.id.goog[porch-system/porch-controllers]" +``` + +Build Porch, push images, and deploy porch server and controllers using the +`make` target that adds workload identity service account annotations: + +```sh +IMAGE_TAG=$(git rev-parse --short HEAD) make push-and-deploy +``` + +As above, you can verify that Porch is running by querying the `api-resources`: + +```sh +kubectl api-resources | grep porch +``` + +And start [using Porch](guides/porch-user-guide.md) if the Porch resources are +available. From 0ca31a195ba7e68529152d23739759d15e7d687e Mon Sep 17 00:00:00 2001 From: Schweier Dominika Date: Thu, 4 Jul 2024 10:28:20 +0200 Subject: [PATCH 4/6] Adding Porch Contributor Guide Signed-off-by: Schweier Dominika --- .../docs/porch/contribturos-guide/_index.md | 112 ++++++++++ .../porch/contribturos-guide/dev-process.md | 205 ++++++++++++++++++ .../contribturos-guide/environment-setup.md | 157 ++++++++++++++ 3 files changed, 474 insertions(+) create mode 100644 content/en/docs/porch/contribturos-guide/_index.md create mode 100644 content/en/docs/porch/contribturos-guide/dev-process.md create mode 100644 content/en/docs/porch/contribturos-guide/environment-setup.md diff --git a/content/en/docs/porch/contribturos-guide/_index.md b/content/en/docs/porch/contribturos-guide/_index.md new file mode 100644 index 00000000..f5c7cf3e --- /dev/null +++ b/content/en/docs/porch/contribturos-guide/_index.md @@ -0,0 +1,112 @@ +--- +title: "Porch Contributor Guide" +type: docs +weight: 7 +description: +--- + +## Changing Porch API + +If you change the API resources, in `api/porch/.../*.go`, update the generated code by running: + +```sh +make generate +``` + +## Components + +Porch comprises of several software components: + +* [api](https://github.com/nephio-project/porch/tree/main/api): Definition of the KRM API supported by the Porch extension apiserver +* [porchctl](https://github.com/nephio-project/porch/tree/main/cmd/porchctl): CLI command tool for administration of Porch `Repository` and `PackageRevision` custom resources. +* [apiserver](https://github.com/nephio-project/porch/tree/main/pkg/apiserver): The Porch apiserver implementation, REST handlers, Porch `main` function +* [engine](https://github.com/nephio-project/porch/tree/main/pkg/engine): Core logic of Package Orchestration - operations on package contents +* [func](https://github.com/nephio-project/porch/tree/main/func): KRM function evaluator microservice; exposes gRPC API +* [repository](https://github.com/nephio-project/porch/blob/main/pkg/repository): Repository integration package +* [git](https://github.com/nephio-project/porch/tree/main/pkg/git): Integration with Git repository. +* [oci](https://github.com/nephio-project/porch/tree/main/pkg/oci): Integration with OCI repository. +* [cache](https://github.com/nephio-project/porch/tree/main/pkg/cache): Package caching. +* [controllers](https://github.com/nephio-project/porch/tree/main/controllers): `Repository` CRD. No controller; + Porch apiserver watches these resources for changes as repositories are (un-)registered. +* [test](https://github.com/nephio-project/porch/tree/main/test): Test Git Server for Porch e2e testing, and + [e2e](https://github.com/nephio-project/porch/tree/main/test/e2e) tests. + +## Running Porch + +See dedicated documentation on running Porch: + +* [locally](../running-porch/running-locally.md) +* [on GKE](../running-porch/running-on-GKE.md) + +## Build the Container Images + +Build Docker images of Porch components: + +```sh +# Build Images +make build-images + +# Push Images to Docker Registry +make push-images + +# Supported make variables: +# IMAGE_TAG - image tag, i.e. 'latest' (defaults to 'latest') +# GCP_PROJECT_ID - GCP project hosting gcr.io repository (will translate to gcr.io/${GCP_PROJECT_ID}) +# IMAGE_REPO - overwrites the default image repository + +# Example: +IMAGE_TAG=$(git rev-parse --short HEAD) make push-images +``` + +## Running Locally + +Follow [running-locally.md](../running-porch/running-locally.md) to run Porch locally. + +## Debugging + +To debug Porch, run Porch locally [running-locally.md](../running-porch/running-locally.md), exit porch server running in the shell, +and launch Porch under the debugger. VSCode debug session is pre-configured in [launch.json](https://github.com/nephio-project/porch/blob/main/.vscode/launch.json). + +Update the launch arguments to your needs. + +## Code Pointers + +Some useful code pointers: + +* Porch REST API handlers in [registry/porch](https://github.com/nephio-project/porch/tree/main/pkg/registry/porch), for example + [packagerevision.go](https://github.com/nephio-project/porch/tree/main/pkg/registry/porch/packagerevision.go) +* Background task handling cache updates in [background.go](https://github.com/nephio-project/porch/tree/main/pkg/registry/porch/background.go) +* Git repository integration in [pkg/git](https://github.com/nephio-project/porch/tree/main/pkg/git) +* OCI repository integration in [pkg/oci](https://github.com/nephio-project/porch/tree/main/pkg/oci) +* CaD Engine in [engine](https://github.com/nephio-project/porch/tree/main/pkg/engine) +* e2e tests in [e2e](https://github.com/nephio-project/porch/tree/main/test/e2e). See below more on testing. + +## Running Tests + +All tests can be run using `make test`. Individual tests can be run using `go test`. +End-to-End tests assume that Porch instance is running and `KUBECONFIG` is configured +with the instance. The tests will automatically detect whether they are running against +Porch running on local machien or k8s cluster and will start Git server appropriately, +then run test suite against the Porch instance. + +## Makefile Targets + +* `make generate`: generate code based on Porch API definitions (runs k8s code generators) +* `make tidy`: tidies all Porch modules +* `make fmt`: formats golang sources +* `make build-images`: builds Porch Docker images +* `make push-images`: builds and pushes Porch Docker images +* `make deployment-config`: customizes configuration which installs Porch + in k8s cluster with correct image names, annotations, service accounts. + The deployment-ready configuration is copied into `./.build/deploy` +* `make deploy`: deploys Porch in the k8s cluster configured with current kubectl context +* `make push-and-deploy`: builds, pushes Porch Docker images, creates deployment configuration, and deploys Porch +* `make` or `make all`: builds and runs Porch [locally](../running-porch/running-locally.md) +* `make test`: runs tests + +## VSCode + +[VSCode](https://code.visualstudio.com/) works really well for editing and debugging. +Because Porch is comprises of multiple go modules, there is a pre-configured +multi-folder workspace in [porch.code-workspace](https://github.com/nephio-project/porch/blob/main/porch.code-workspace). +Open it in VSCode (File / Open Workspace from File) to use Workspace Folders. \ No newline at end of file diff --git a/content/en/docs/porch/contribturos-guide/dev-process.md b/content/en/docs/porch/contribturos-guide/dev-process.md new file mode 100644 index 00000000..c737a57c --- /dev/null +++ b/content/en/docs/porch/contribturos-guide/dev-process.md @@ -0,0 +1,205 @@ +--- +title: "Development process" +type: docs +weight: 3 +description: +--- + +After you ran the setup script as explained in the [environment setup](environment-setup.md) you are ready to start the actual development of porch. That process involves (among others) a combination of the tasks explained below. + +## Build and deploy all of porch + +The following command will rebuild all of porch and deploy all of its components into your porch-test kind cluster (created in the [environment setup](environment-setup.md)): + +```bash +make run-in-kind +``` + +## Troubleshoot the porch API server + +There are several ways to develop, test and troubleshoot the porch API server. In this chapter we describe an option where every other parts of porch is running in the porch-test kind cluster, but the porch API server is running locally on your machine, typically in an IDE. + +The following command will rebuild and deploy porch, except the porch API server component, and also prepares your environment for connecting the local API server with the in-cluster components. + +```bash +make run-in-kind-no-server +``` + +After issuing this command you are expected to start the porch API server locally on your machine (outside of the kind cluster); probably in your IDE, potentially in a debugger. + +### Configure VSCode to run the Porch (api)server + +The simplest way to run the porch API server is to launch it in a VSCode IDE, as described by the following process: + +1. Open the `porch.code-workspace` file in the root of the porch git repo. + +1. Edit your local `.vscode/launch.json` file as follows: Change the `--kubeconfig` argument of the `Launch Server` configuration to point to a KUBECONFIG file that is set to the kind cluster as the current context. + > **_NOTE:_** If your current KUBECONFIG environment variable already points to the porch-test kind cluster, then you don't have to touch anything. + +1. Launch the Porch server locally in VSCode by selecting the "Launch Server" configuration on the VSCode "Run and Debug" window. For more information please refer to the [VSCode debugging documentation](https://code.visualstudio.com/docs/editor/debugging). + +### Check to ensure that the API server is serving requests: + +```bash +curl https://localhost:4443/apis/porch.kpt.dev/v1alpha1 -k +``` + +
    +Sample output + +```json +{ + "kind": "APIResourceList", + "apiVersion": "v1", + "groupVersion": "porch.kpt.dev/v1alpha1", + "resources": [ + { + "name": "functions", + "singularName": "", + "namespaced": true, + "kind": "Function", + "verbs": [ + "get", + "list" + ] + }, + { + "name": "packagerevisionresources", + "singularName": "", + "namespaced": true, + "kind": "PackageRevisionResources", + "verbs": [ + "get", + "list", + "patch", + "update" + ] + }, + { + "name": "packagerevisions", + "singularName": "", + "namespaced": true, + "kind": "PackageRevision", + "verbs": [ + "create", + "delete", + "get", + "list", + "patch", + "update", + "watch" + ] + }, + { + "name": "packagerevisions/approval", + "singularName": "", + "namespaced": true, + "kind": "PackageRevision", + "verbs": [ + "get", + "patch", + "update" + ] + }, + { + "name": "packages", + "singularName": "", + "namespaced": true, + "kind": "Package", + "verbs": [ + "create", + "delete", + "get", + "list", + "patch", + "update" + ] + } + ] +} +``` + +
    + + +## Troubleshoot the porch controllers + +There are several ways to develop, test and troubleshoot the porch controllers (i.e. PackageVariant, PackageVariantSet). In this chapter we describe an option where every other parts of porch is running in the porch-test kind cluster, but the process hosting all porch controllers is running locally on your machine. + +The following command will rebuild and deploy porch, except the porch-controllers component: + +```bash +make run-in-kind-no-controllers +``` + +After issuing this command you are expected to start the porch controllers process locally on your machine (outside of the kind cluster); probably in your IDE, potentially in a debugger. If you are using VS Code you can use the "Launch Controllers" configuration that is defined in the [launch.json](https://github.com/nephio-project/porch/blob/main/.vscode/launch.json) file of the porch git repo. + +## Run the unit tests + +```bash +make test +``` + +## Run the end-to-end tests + +To run the end-to-end tests against the Kubernetes API server where KUBECONFIG points to, simply issue: + +```bash +make test-e2e +``` + +To run the end-to-end tests against a clean deployment, simply issue: + +```bash +make test-e2e-clean +``` +This will +- create a brand new kind cluster, +- rebuild porch +- deploy the newly built porch into the new cluster +- run the end-to-end tests against that +- deletes the kind cluster if all tests passed + +This process closely mimics the end-to-end tests that are run against your PR on Github. + +In order to run just one particular test case you can execute something similar to this: + +```bash +E2E=1 go test -v ./test/e2e -run TestE2E/PorchSuite/TestPackageRevisionInMultipleNamespaces +``` +or this: +```bash +E2E=1 go test -v ./test/e2e/cli -run TestPorch/rpkg-lifecycle + +``` + +## Switching between tasks + +The `make run-in-kind`, `make run-in-kind-no-server` and `make run-in-kind-no-controller` commands can be executed right after each other. No clean-up or restart is required between them. The make scripts will intelligently do the necessary changes in your current porch deployment in kind (e.g. removing or re-adding the porch API server). + +You can always find the configuration of your current deployment in `.build/deploy`. + +You can always use `make test` and `make test-e2e` to test your current setup, no matter which of the above detailed configurations it is. + +## Getting to know the make targets + +Try: `make help` + +## Restart with a clean-slate + +Sometimes the development kind cluster gets cluttered and you may experience weird behavior from porch. +In this case you might want to restart with a clean slate: +First, delete the development kind cluster with the following command: + +```bash +kind delete cluster --name porch-test +``` + +then re-run the [setup script](https://github.com/nephio-project/porch/blob/main/scripts/setup-dev-env.sh): + +```bash +./scripts/setup-dev-env.sh +``` + +finally deploy porch into the kind cluster by any of the methods explained above. + diff --git a/content/en/docs/porch/contribturos-guide/environment-setup.md b/content/en/docs/porch/contribturos-guide/environment-setup.md new file mode 100644 index 00000000..a15b50ad --- /dev/null +++ b/content/en/docs/porch/contribturos-guide/environment-setup.md @@ -0,0 +1,157 @@ +--- +title: "Setting up the environment" +type: docs +weight: 2 +description: +--- + +This tutorial gives short instructions on how to set up a development environment for Porch. It outlines the steps to get +a [kind](https://kind.sigs.k8s.io/) cluster up and running to which a Porch instance running in Visual Studio Code can connect to and interact with. +if you are not familiar with how porch works, it is highly recommended that you go through the [Starting with Porch tutorial](../install-and-using-porch.md) before going through this one. + +> **_NOTE:_** As your Dev environment, you can run the code on a remote VM and use the [VSCode Remote SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) plugin to connect to it. +TODO: re-check WSL2 + Docker Desktop setup + +## Extra steps for MacOS users + +The script the `make deployment-config` target to generate the deployment files for porch. The scripts called by this make target use recent `bash` additions and expect the gnu version of the `sed` command. MacOS comes with `bash` 3.x.x by default and with a version of `sed` that is incompatible with gnu `sed`. TODO: check if sed is indeed still used. + +1. Install `bash` 4.x.x or better of `bash` using homebrew, see [this this post for details](https://apple.stackexchange.com/questions/193411/update-bash-to-version-4-0-on-osx) +2. Install `gsed` using homebrew, see [this post for details](https://stackoverflow.com/questions/4247068/sed-command-with-i-option-failing-on-mac-but-works-on-linux) +3. `sudo ln -s /opt/homebrew/bin/gsed /opt/homebrew/bin/sed` create a soft link for `sed` from `gsed` +4. Ensure that `/opt/homebrew/bin` is earlier in your path than `/bin` and `/usr/bin` + +> **_NOTE:_** The changes above **permanently** change the `bash` version and `sed` for **all** applications and may cause side effects. You may wish to revert the changes (particularly the `sed-->gsed` soft link) when you complete your work on Porch. + +## Setup the environment automatically + +The [`./scripts/setup-dev-env.sh` setup script](https://github.com/nephio-project/porch/blob/main/scripts/setup-dev-env.sh) automatically builds a porch development environment. +Please note that this is only one of many possible ways of building a working porch development environment so feel free to customize it to suit your needs. +The setup script will perform the following steps: + +1. Install a kind cluster. + The name of the cluster is read from the PORCH_TEST_CLUSTER environment variable, otherwise it defaults to `porch-test`. + The configuration of the cluster is taken from [here](https://github.com/nephio-project/porch/blob/main/deployments/local/kind_porch_test_cluster.yaml). + +1. Install the MetalLB load balancer into the cluster, in order to allow `LoadBalancer` typed Services to work properly. + +1. Install the Gitea git server into the cluster. + This can be used to test porch during development, but it is not used in automated end-to-end tests. + Gitea is exposed to the host via port 3000. The GUI is accessible via , or (username: nephio, password: secret). + + > **_NOTE:_** If you are using WSL2 (Windows Subsystem for Linux), then Gitea is also accessible from the Windows host via the URL. + +1. Generate the PKI resources (key pairs and certificates) required for end-to-end tests. + +1.
    Build the porch CLI binary. + The result will be generated as `.build/porchctl`. + +That's it! If you want to run the steps manually, please use the code of the script as a detailed description. + +The setup script is idempotent in the sense that you can rerun it without cleaning up first. This also means that if the script is interrupted for any reason, and you run it again it should effectively continue the process where it left off. + +## Extra manual steps + +Copy the `.build/porchctl` binary (that was built by the setup script) to somewhere in your $PATH, or add the `.build` directory to your PATH. + +## Build and deploy porch + +You can build all of porch, and also deploy it into your newly created kind cluster with this command. + +```bash +make run-in-kind +``` + +See more advanced variants of this command in the [detailed description of the development process](dev-process.md). + +## Check that everything works as expected + +At this point you are basically ready to start developing porch, but before you start it is worth checking that everything works as expected. + +### Check that the apiservice is ready + +```bash +kubectl get apiservice v1alpha1.porch.kpt.dev +``` + +Sample output: + +```bash +NAME SERVICE AVAILABLE AGE +v1alpha1.porch.kpt.dev porch-system/api True 18m +``` + +### Check the porch api-resources + +```bash +kubectl api-resources | grep porch +``` + +Sample output: + +```bash +packagerevs config.porch.kpt.dev/v1alpha1 true PackageRev +packagevariants config.porch.kpt.dev/v1alpha1 true PackageVariant +packagevariantsets config.porch.kpt.dev/v1alpha2 true PackageVariantSet +repositories config.porch.kpt.dev/v1alpha1 true Repository +functions porch.kpt.dev/v1alpha1 true Function +packagerevisionresources porch.kpt.dev/v1alpha1 true PackageRevisionResources +packagerevisions porch.kpt.dev/v1alpha1 true PackageRevision +packages porch.kpt.dev/v1alpha1 true PorchPackage +``` + +## Create Repositories using your local Porch server + +To connect Porch to Gitea, follow [step 7 in the Starting with Porch](../install-and-using-porch.md) tutorial to create the repositories in Porch. + +You will notice logging messages in VSCode when you run the command `kubectl apply -f porch-repositories.yaml` command. + +You can check that your locally running Porch server has created the repositories by running the `porchctl` command: + +```bash +porchctl repo get -A +``` + +Sample output: + +```bash +NAME TYPE CONTENT DEPLOYMENT READY ADDRESS +external-blueprints git Package false True https://github.com/nephio-project/free5gc-packages.git +management git Package false True http://172.18.255.200:3000/nephio/management.git +``` + +You can also check the repositories using kubectl. + +```bash +kubectl get repositories -n porch-demo +``` + +Sample output: + +```bash +NAME TYPE CONTENT DEPLOYMENT READY ADDRESS +external-blueprints git Package false True https://github.com/nephio-project/free5gc-packages.git +management git Package false True http://172.18.255.200:3000/nephio/management.git +``` + +You now have a locally running Porch (api)server. Happy developing! + +## Restart from scratch + +Sometimes the development cluster gets cluttered and you may experience weird behavior from porch. +In this case you might want to restart with a clean slate, by deleting the development cluster with the following command: + +```bash +kind delete cluster --name porch-test +``` + +and running the [setup script](https://github.com/nephio-project/porch/blob/main/scripts/setup-dev-env.sh) again: + +```bash +./scripts/setup-dev-env.sh +``` + +## Getting started with actual development + +You can find a detailed description of the actual development process [here](dev-process.md). + From 25644753a2e5c3d126ef2009781abfc71ad0d077 Mon Sep 17 00:00:00 2001 From: Gergely Csatari Date: Thu, 4 Jul 2024 16:37:51 +0300 Subject: [PATCH 5/6] Finalinzing the migration of the Porch documentation Signed-off-by: Gergely Csatari --- .linkspector.yml | 1 + .../docs/porch/contribturos-guide/_index.md | 11 +- .../contribturos-guide/environment-setup.md | 81 +++-- .../porch/running-porch/running-on-GKE.md | 13 +- content/en/docs/porch/using-porch/_index.md | 7 + .../install-and-using-porch.md | 295 +++++++++++------- .../porch/using-porch/porchctl-cli-guide.md | 77 +++++ 7 files changed, 323 insertions(+), 162 deletions(-) create mode 100644 content/en/docs/porch/using-porch/_index.md rename content/en/docs/porch/{ => using-porch}/install-and-using-porch.md (94%) create mode 100644 content/en/docs/porch/using-porch/porchctl-cli-guide.md diff --git a/.linkspector.yml b/.linkspector.yml index 4eeb3c98..00e62e46 100644 --- a/.linkspector.yml +++ b/.linkspector.yml @@ -10,6 +10,7 @@ aliveStatusCodes: ignorePatterns: - pattern: "^http://localhost.*$" - pattern: "^http://HOSTNAME:PORT.*$" + - pattern: "172\\.18\\.255\\.200" replacementPatterns: - pattern: ".md#.*$" replacement: ".md" diff --git a/content/en/docs/porch/contribturos-guide/_index.md b/content/en/docs/porch/contribturos-guide/_index.md index f5c7cf3e..36205c97 100644 --- a/content/en/docs/porch/contribturos-guide/_index.md +++ b/content/en/docs/porch/contribturos-guide/_index.md @@ -60,12 +60,13 @@ IMAGE_TAG=$(git rev-parse --short HEAD) make push-images ## Running Locally -Follow [running-locally.md](../running-porch/running-locally.md) to run Porch locally. +Follow the [Running Porch Locally](../running-porch/running-locally.md) guide to run Porch locally. ## Debugging -To debug Porch, run Porch locally [running-locally.md](../running-porch/running-locally.md), exit porch server running in the shell, -and launch Porch under the debugger. VSCode debug session is pre-configured in [launch.json](https://github.com/nephio-project/porch/blob/main/.vscode/launch.json). +To debug Porch, run Porch locally [running-locally.md](../running-porch/running-locally.md), exit porch server running +in the shell, and launch Porch under the debugger. VSCode debug session is pre-configured in +[launch.json](https://github.com/nephio-project/porch/blob/main/.vscode/launch.json). Update the launch arguments to your needs. @@ -73,8 +74,8 @@ Update the launch arguments to your needs. Some useful code pointers: -* Porch REST API handlers in [registry/porch](https://github.com/nephio-project/porch/tree/main/pkg/registry/porch), for example - [packagerevision.go](https://github.com/nephio-project/porch/tree/main/pkg/registry/porch/packagerevision.go) +* Porch REST API handlers in [registry/porch](https://github.com/nephio-project/porch/tree/main/pkg/registry/porch), + for example [packagerevision.go](https://github.com/nephio-project/porch/tree/main/pkg/registry/porch/packagerevision.go) * Background task handling cache updates in [background.go](https://github.com/nephio-project/porch/tree/main/pkg/registry/porch/background.go) * Git repository integration in [pkg/git](https://github.com/nephio-project/porch/tree/main/pkg/git) * OCI repository integration in [pkg/oci](https://github.com/nephio-project/porch/tree/main/pkg/oci) diff --git a/content/en/docs/porch/contribturos-guide/environment-setup.md b/content/en/docs/porch/contribturos-guide/environment-setup.md index a15b50ad..39db5d08 100644 --- a/content/en/docs/porch/contribturos-guide/environment-setup.md +++ b/content/en/docs/porch/contribturos-guide/environment-setup.md @@ -5,54 +5,76 @@ weight: 2 description: --- -This tutorial gives short instructions on how to set up a development environment for Porch. It outlines the steps to get -a [kind](https://kind.sigs.k8s.io/) cluster up and running to which a Porch instance running in Visual Studio Code can connect to and interact with. -if you are not familiar with how porch works, it is highly recommended that you go through the [Starting with Porch tutorial](../install-and-using-porch.md) before going through this one. +This tutorial gives short instructions on how to set up a development environment for Porch. It outlines the steps to +get a [kind](https://kind.sigs.k8s.io/) cluster up and running to which a Porch instance running in Visual Studio Code +can connect to and interact with. If you are not familiar with how porch works, it is highly recommended that you go +through the [Starting with Porch tutorial](../using-porch/install-and-using-porch.md) before going through this one. -> **_NOTE:_** As your Dev environment, you can run the code on a remote VM and use the [VSCode Remote SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) plugin to connect to it. +{{% alert title="Note" color="primary" %}} + +As your Dev environment, you can run the code on a remote VM and use the +[VSCode Remote SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) +plugin to connect to it. TODO: re-check WSL2 + Docker Desktop setup +{{% /alert %}} + ## Extra steps for MacOS users -The script the `make deployment-config` target to generate the deployment files for porch. The scripts called by this make target use recent `bash` additions and expect the gnu version of the `sed` command. MacOS comes with `bash` 3.x.x by default and with a version of `sed` that is incompatible with gnu `sed`. TODO: check if sed is indeed still used. +The script the `make deployment-config` target to generate the deployment files for porch. The scripts called by this +make target use recent `bash` additions and expect the gnu version of the `sed` command. MacOS comes with `bash` 3.x.x +by default and with a version of `sed` that is incompatible with gnu `sed`. TODO: check if sed is indeed still used. -1. Install `bash` 4.x.x or better of `bash` using homebrew, see [this this post for details](https://apple.stackexchange.com/questions/193411/update-bash-to-version-4-0-on-osx) -2. Install `gsed` using homebrew, see [this post for details](https://stackoverflow.com/questions/4247068/sed-command-with-i-option-failing-on-mac-but-works-on-linux) +1. Install `bash` 4.x.x or better of `bash` using homebrew, see + [this this post for details](https://apple.stackexchange.com/questions/193411/update-bash-to-version-4-0-on-osx) +2. Install `gsed` using homebrew, see + [this post for details](https://stackoverflow.com/questions/4247068/sed-command-with-i-option-failing-on-mac-but-works-on-linux) 3. `sudo ln -s /opt/homebrew/bin/gsed /opt/homebrew/bin/sed` create a soft link for `sed` from `gsed` 4. Ensure that `/opt/homebrew/bin` is earlier in your path than `/bin` and `/usr/bin` -> **_NOTE:_** The changes above **permanently** change the `bash` version and `sed` for **all** applications and may cause side effects. You may wish to revert the changes (particularly the `sed-->gsed` soft link) when you complete your work on Porch. +{{% alert title="Note" color="primary" %}} -## Setup the environment automatically +The changes above **permanently** change the `bash` version and `sed` for **all** applications and may cause side +effects. You may wish to revert the changes (particularly the `sed-->gsed` soft link) when you complete your work on +Porch. -The [`./scripts/setup-dev-env.sh` setup script](https://github.com/nephio-project/porch/blob/main/scripts/setup-dev-env.sh) automatically builds a porch development environment. -Please note that this is only one of many possible ways of building a working porch development environment so feel free to customize it to suit your needs. -The setup script will perform the following steps: +{{% /alert %}} -1. Install a kind cluster. - The name of the cluster is read from the PORCH_TEST_CLUSTER environment variable, otherwise it defaults to `porch-test`. - The configuration of the cluster is taken from [here](https://github.com/nephio-project/porch/blob/main/deployments/local/kind_porch_test_cluster.yaml). -1. Install the MetalLB load balancer into the cluster, in order to allow `LoadBalancer` typed Services to work properly. +## Setup the environment automatically -1. Install the Gitea git server into the cluster. - This can be used to test porch during development, but it is not used in automated end-to-end tests. - Gitea is exposed to the host via port 3000. The GUI is accessible via , or (username: nephio, password: secret). +The [`./scripts/setup-dev-env.sh`](https://github.com/nephio-project/porch/blob/main/scripts/setup-dev-env.sh) setup +script automatically builds a porch development environment. +Please note that this is only one of many possible ways of building a working porch development environment so feel free +to customize it to suit your needs. - > **_NOTE:_** If you are using WSL2 (Windows Subsystem for Linux), then Gitea is also accessible from the Windows host via the URL. +The setup script will perform the following steps: +1. Install a kind cluster. The name of the cluster is read from the PORCH_TEST_CLUSTER environment variable, otherwise + it defaults to `porch-test`. The configuration of the cluster is taken from + [here](https://github.com/nephio-project/porch/blob/main/deployments/local/kind_porch_test_cluster.yaml). +1. Install the MetalLB load balancer into the cluster, in order to allow `LoadBalancer` typed Services to work properly. +1. Install the Gitea git server into the cluster. This can be used to test porch during development, but it is not used + in automated end-to-end tests. Gitea is exposed to the host via port 3000. The GUI is accessible via + , or (username: nephio, password: secret). + {{% alert title="Note" color="primary" %}} + + If you are using WSL2 (Windows Subsystem for Linux), then Gitea is also accessible from the Windows host via the + URL. + + {{% /alert %}} 1. Generate the PKI resources (key pairs and certificates) required for end-to-end tests. - -1. Build the porch CLI binary. - The result will be generated as `.build/porchctl`. +1. Build the porch CLI binary. The result will be generated as `.build/porchctl`. That's it! If you want to run the steps manually, please use the code of the script as a detailed description. -The setup script is idempotent in the sense that you can rerun it without cleaning up first. This also means that if the script is interrupted for any reason, and you run it again it should effectively continue the process where it left off. +The setup script is idempotent in the sense that you can rerun it without cleaning up first. This also means that if the +script is interrupted for any reason, and you run it again it should effectively continue the process where it left off. ## Extra manual steps -Copy the `.build/porchctl` binary (that was built by the setup script) to somewhere in your $PATH, or add the `.build` directory to your PATH. +Copy the `.build/porchctl` binary (that was built by the setup script) to somewhere in your $PATH, or add the `.build` +directory to your PATH. ## Build and deploy porch @@ -66,7 +88,8 @@ See more advanced variants of this command in the [detailed description of the d ## Check that everything works as expected -At this point you are basically ready to start developing porch, but before you start it is worth checking that everything works as expected. +At this point you are basically ready to start developing porch, but before you start it is worth checking that +everything works as expected. ### Check that the apiservice is ready @@ -102,7 +125,8 @@ packages porch.kpt.dev/v1alpha1 ## Create Repositories using your local Porch server -To connect Porch to Gitea, follow [step 7 in the Starting with Porch](../install-and-using-porch.md) tutorial to create the repositories in Porch. +To connect Porch to Gitea, follow [step 7 in the Starting with Porch](../using-porch/install-and-using-porch.md) +tutorial to create the repositories in Porch. You will notice logging messages in VSCode when you run the command `kubectl apply -f porch-repositories.yaml` command. @@ -139,7 +163,8 @@ You now have a locally running Porch (api)server. Happy developing! ## Restart from scratch Sometimes the development cluster gets cluttered and you may experience weird behavior from porch. -In this case you might want to restart with a clean slate, by deleting the development cluster with the following command: +In this case you might want to restart with a clean slate, by deleting the development cluster with the following +command: ```bash kind delete cluster --name porch-test diff --git a/content/en/docs/porch/running-porch/running-on-GKE.md b/content/en/docs/porch/running-porch/running-on-GKE.md index df1b3e4a..37e7b39e 100644 --- a/content/en/docs/porch/running-porch/running-on-GKE.md +++ b/content/en/docs/porch/running-porch/running-on-GKE.md @@ -116,8 +116,6 @@ spec: " | kubectl apply -f - ``` -You can start [using Porch](guides/porch-user-guide.md). - ## Run Custom Build of Porch To run custom build of Porch, you will need additional [prerequisites](#prerequisites). @@ -145,8 +143,7 @@ IMAGE_TAG=$(git rev-parse --short HEAD) make push-and-deploy-no-sa ``` If you want to use different repository, you can set `IMAGE_REPO` variable -(see [Makefile](https://github.com/GoogleContainerTools/kpt/blob/main/porch/Makefile#L28) -for details). +(see [Makefile](https://github.com/nephio-project/porch/blob/main/Makefile#L32) for details). The `make push-and-deploy-no-sa` target will install Porch but not Config Sync. You can install Config Sync in your k8s cluster manually following the @@ -163,9 +160,6 @@ As above, you can verify that Porch is running by querying the `api-resources`: kubectl api-resources | grep porch ``` -And start [using Porch](guides/porch-user-guide.md) if the Porch resources are -available. - ### Workload Identity [Workload Identity](https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity) @@ -265,7 +259,4 @@ As above, you can verify that Porch is running by querying the `api-resources`: ```sh kubectl api-resources | grep porch -``` - -And start [using Porch](guides/porch-user-guide.md) if the Porch resources are -available. +``` \ No newline at end of file diff --git a/content/en/docs/porch/using-porch/_index.md b/content/en/docs/porch/using-porch/_index.md new file mode 100644 index 00000000..10c4c350 --- /dev/null +++ b/content/en/docs/porch/using-porch/_index.md @@ -0,0 +1,7 @@ +--- +title: "Using Porch" +type: docs +weight: 6 +description: +--- + diff --git a/content/en/docs/porch/install-and-using-porch.md b/content/en/docs/porch/using-porch/install-and-using-porch.md similarity index 94% rename from content/en/docs/porch/install-and-using-porch.md rename to content/en/docs/porch/using-porch/install-and-using-porch.md index 16a7e506..7342c66d 100644 --- a/content/en/docs/porch/install-and-using-porch.md +++ b/content/en/docs/porch/using-porch/install-and-using-porch.md @@ -1,29 +1,24 @@ -# Starting with Porch Tutorial - -This tutorial is a guide to installing and using Porch. It is based on the [Porch demo produced by Tal Liron of Google](https://github.com/tliron/klab/tree/main/environments/porch-demo). Users should be very comfortable with using `git`, `docker`, and `kubernetes`. - -# Table of Contents -1. [Prerequisites](#Prerequisites) -2. [Create the Kind clusters for management and edge1](#Create-the-Kind-clusters-for-management-and-edge1) -3. [Install MetalLB on the management cluster](#Install-MetalLB-on-the-management-cluster) -4. [Deploy and set up gitea on the management cluster](#Deploy-and-set-up-gitea-on-the-management-cluster) -5. [Create repositories on Gitea for `management` and `edge1`](#Create-repositories-on-Gitea-for-management-and-edge1) -6. [Install Porch](#Install-Porch) -7. [Connect the Gitea repositories to Porch](#Connect-the-Gitea-repositories-to-Porch) -8. [Configure configsync on the workload cluster](#Configure-configsync-on-the-workload-cluster) -9. [Exploring the Porch resources](#Exploring-the-Porch-resources) -10. [The porchctl command](#The-porchctl-command) -11. [Creating a blueprint in Porch](#Creating-a-blueprint-in-Porch) -12. [Deploying a blueprint onto a workload cluster](#Deploying-a-blueprint-onto-a-workload-cluster) -13. [Deploying using Package Variant Sets](#Deploying-using-Package-Variant-Sets) - -See also [the Nephio Learning Resource](https://github.com/nephio-project/docs/blob/main/learning.md) page for background help and information. +--- +title: "Install and use Porch" +type: docs +weight: 3 +description: "A tutorial to install and use Porch" +--- + +This tutorial is a guide to installing and using Porch. It is based on the +[Porch demo produced by Tal Liron of Google](https://github.com/tliron/klab/tree/main/environments/porch-demo). Users +should be very comfortable with using `git`, `docker`, and `kubernetes`. + +See also [the Nephio Learning Resource](https://github.com/nephio-project/docs/blob/main/learning.md) page for +background help and information. ## Prerequisites -The tutorial can be executed on a Linux VM or directly on a laptop. It has been verified to execute on a Macbook Pro M1 machine and an Ubuntu 20.04 VM. +The tutorial can be executed on a Linux VM or directly on a laptop. It has been verified to execute on a Macbook Pro M1 +machine and an Ubuntu 20.04 VM. The following software should be installed prior to running through the tutorial: + 1. [git](https://git-scm.com/) 2. [Docker](https://www.docker.com/get-started/) 3. [kubectl](https://kubernetes.io/docs/reference/kubectl/) @@ -35,7 +30,7 @@ The following software should be installed prior to running through the tutorial ## Clone the repo and cd into the tutorial -``` +```bash git clone https://github.com/nephio-project/porch.git cd porch/docs/tutorials/starting-with-porch/ @@ -45,21 +40,21 @@ cd porch/docs/tutorials/starting-with-porch/ Create the clusters: -``` +```bash kind create cluster --config=kind_management_cluster.yaml kind create cluster --config=kind_edge1_cluster.yaml ``` Output the kubectl config for the clusters: -``` +```bash kind get kubeconfig --name=management > ~/.kube/kind-management-config kind get kubeconfig --name=edge1 > ~/.kube/kind-edge1-config ``` Toggling kubectl between the clusters: -``` +```bash export KUBECONFIG=~/.kube/kind-management-config export KUBECONFIG=~/.kube/kind-edge1-config @@ -68,7 +63,8 @@ export KUBECONFIG=~/.kube/kind-edge1-config ## Install MetalLB on the management cluster Install the MetalLB load balancer on the management cluster to expose services: -``` + +```bash export KUBECONFIG=~/.kube/kind-management-config kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.12/config/manifests/metallb-native.yaml kubectl wait --namespace metallb-system \ @@ -78,18 +74,21 @@ kubectl wait --namespace metallb-system \ ``` Check the subnet that is being used by the `kind` network in docker -``` + +```bash docker network inspect kind | grep Subnet ``` Sample output: -``` + +```yaml "Subnet": "172.18.0.0/16", "Subnet": "fc00:f853:ccd:e793::/64" ``` Edit the `metallb-conf.yaml` file and ensure the `spec.addresses` range is in the IPv4 subnet being used by the `kind` network in docker. -``` + +```yaml ... spec: addresses: @@ -98,7 +97,8 @@ spec: ``` Apply the MetalLB configuration: -``` + +```bash kubectl apply -f metallb-conf.yaml ``` @@ -106,7 +106,7 @@ kubectl apply -f metallb-conf.yaml Get the gitea kpt package: -``` +```bash export KUBECONFIG=~/.kube/kind-management-config cd kpt_packages @@ -115,7 +115,8 @@ kpt pkg get https://github.com/nephio-project/catalog/tree/main/distros/sandbox/ ``` Comment out the preconfigured IP address from the `gitea/service-gitea.yaml` file in the gitea Kpt package: -``` + +```bash 11c11 < metallb.universe.tf/loadBalancerIPs: 172.18.0.200 --- @@ -123,7 +124,8 @@ Comment out the preconfigured IP address from the `gitea/service-gitea.yaml` fil ``` Now render, init and apply the Gitea Kpt package: -``` + +```bash kpt fn render gitea kpt live init gitea # You only need to do this command once kpt live apply gitea @@ -131,12 +133,13 @@ kpt live apply gitea Once the package is applied, all the gitea pods should come up and you should be able to reach the Gitea UI on the exposed IP Address/port of the gitea service. -``` +```bash kubectl get svc -n gitea gitea NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gitea LoadBalancer 10.96.243.120 172.18.255.200 22:31305/TCP,3000:31102/TCP 10m ``` + The UI is available at http://172.18.255.200:3000 in the example above. To login to Gitea, use the credentials `nephio:secret`. @@ -149,14 +152,16 @@ On the gitea UI, click the '+' opposite "Repositories" and fill in the form for - Description: Something appropriate Alternatively, we can create the repos via curl: -``` + +```bash curl -k -H "content-type: application/json" "http://nephio:secret@172.18.255.200:3000/api/v1/user/repos" --data '{"name":"management"}' curl -k -H "content-type: application/json" "http://nephio:secret@172.18.255.200:3000/api/v1/user/repos" --data '{"name":"edge1"}' ``` Check the repos: -``` + +```bash curl -k -H "content-type: application/json" "http://nephio:secret@172.18.255.200:3000/api/v1/user/repos" | grep -Po '"name": *\K"[^"]*"' ``` @@ -164,7 +169,7 @@ Now initialize both repos with an initial commit. Initialize the `management` repo -``` +```bash cd ../repos git clone http://172.18.255.200:3000/nephio/management cd management @@ -185,7 +190,7 @@ cd .. Initialize the `edge1` repo -``` +```bash git clone http://172.18.255.200:3000/nephio/edge1 cd edge1 @@ -206,7 +211,8 @@ cd ../../ ## Install Porch We will use the Porch Kpt package from Nephio catalog repo. -``` + +```bash cd kpt_packages kpt pkg get https://github.com/nephio-project/catalog/tree/main/nephio/core/porch @@ -214,13 +220,15 @@ kpt pkg get https://github.com/nephio-project/catalog/tree/main/nephio/core/porc Now we can install porch. We render the kpt package and then init and apply it. -``` +```bash kpt fn render porch kpt live init porch # You only need to do this command once kpt live apply porch ``` + Check that the Porch PODs are running on the management cluster: -``` + +```bash kubectl get pod -n porch-system NAME READY STATUS RESTARTS AGE function-runner-7994f65554-nrzdh 1/1 Running 0 81s @@ -228,8 +236,10 @@ function-runner-7994f65554-txh9l 1/1 Running 0 81s porch-controllers-7fb4497b77-2r2r6 1/1 Running 0 81s porch-server-68bfdddbbf-pfqsm 1/1 Running 0 81s ``` + Check that the Porch CRDs and other resources have been created: -``` + +```bash kubectl api-resources | grep porch packagerevs config.porch.kpt.dev/v1alpha1 true PackageRev packagevariants config.porch.kpt.dev/v1alpha1 true PackageVariant @@ -245,13 +255,13 @@ packages porch.kpt.dev/v1alpha1 Create a demo namespace: -``` +```bash kubectl create namespace porch-demo ``` Create a secret for the Gitea credentials in the demo namespace: -``` +```bash kubectl create secret generic gitea \ --namespace=porch-demo \ --type=kubernetes.io/basic-auth \ @@ -260,12 +270,14 @@ kubectl create secret generic gitea \ ``` Now, define the Gitea repositories in Porch: -``` + +```bash kubectl apply -f porch-repositories.yaml ``` Check that the repositories have been correctly created: -``` + +```bash kubectl get repositories -n porch-demo NAME TYPE CONTENT DEPLOYMENT READY ADDRESS edge1 git Package true True http://172.18.255.200:3000/nephio/edge1.git @@ -275,9 +287,10 @@ management git Package false True http://172.18.255.20 ## Configure configsync on the workload cluster -Configsync is installed on the `edge1` cluster so that it syncs the contents of the `edge1` repository onto the `edge1` workload cluster. We will use the configsync package from Nephio. +Configsync is installed on the `edge1` cluster so that it syncs the contents of the `edge1` repository onto the `edge1` +workload cluster. We will use the configsync package from Nephio. -``` +```bash export KUBECONFIG=~/.kube/kind-edge1-config cd kpt_packages @@ -289,7 +302,8 @@ kpt live apply configsync ``` Check that the configsync PODs are up and running: -``` + +```bash kubectl get pod -n config-management-system NAME READY STATUS RESTARTS AGE config-management-operator-6946b77565-f45pc 1/1 Running 0 118m @@ -298,12 +312,13 @@ reconciler-manager-5b5d8557-gnhb2 2/2 Running 0 118m Now, we need to set up a Rootsync CR to synchronize the `edge1` repo: -``` +```bash kpt pkg get https://github.com/nephio-project/catalog/tree/main/nephio/optional/rootsync ``` Edit the `rootsync/package-context.yaml` file to set the name of the cluster/repo we are syncing from/to: -``` + +```bash 9c9 < name: example-rootsync --- @@ -311,12 +326,15 @@ Edit the `rootsync/package-context.yaml` file to set the name of the cluster/rep ``` Render the package. This configures the `rootsync/rootsync.yaml` file in the Kpt package: -``` + +```bash kpt fn render rootsync ``` -Edit the `rootsync/rootsync.yaml` file to set the IP address of Gitea and to turn off authentication for accessing gitea: -``` +Edit the `rootsync/rootsync.yaml` file to set the IP address of Gitea and to turn off authentication for accessing +gitea: + +```bash 11c11 < repo: http://172.18.0.200:3000/nephio/example-cluster-name.git --- @@ -333,31 +351,36 @@ Edit the `rootsync/rootsync.yaml` file to set the IP address of Gitea and to tur ``` Initialize and apply rootsync: -``` + +```bash export KUBECONFIG=~/.kube/kind-edge1-config kpt live init rootsync # This command is only needed once kpt live apply rootsync ``` + Check that the RootSync CR is created: -``` + +```bash kubectl get rootsync -n config-management-system NAME RENDERINGCOMMIT RENDERINGERRORCOUNT SOURCECOMMIT SOURCEERRORCOUNT SYNCCOMMIT SYNCERRORCOUNT edge1 613eb1ad5632d95c4336894f8a128cc871fb3266 613eb1ad5632d95c4336894f8a128cc871fb3266 613eb1ad5632d95c4336894f8a128cc871fb3266 ``` Check that Configsync is synchronized with the repo on the management cluster: -``` + +```bash kubectl get pod -n config-management-system -l app=reconciler NAME READY STATUS RESTARTS AGE root-reconciler-edge1-68576f878c-92k54 4/4 Running 0 2d17h kubectl logs -n config-management-system root-reconciler-edge1-68576f878c-92k54 -c git-sync -f -``` -
    -Produces output similar to this ``` + +The result should be similar to: + +```bash INFO: detected pid 1, running init handler I0105 17:50:11.472934 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="" "cmd"="git config --global gc.autoDetach false" I0105 17:50:11.493046 15 cmd.go:48] "level"=5 "msg"="running command" "cwd"="" "cmd"="git config --global gc.pruneExpire now" @@ -401,12 +424,12 @@ I0108 11:04:05.981750 15 cmd.go:48] "level"=5 "msg"="running command" "cwd" I0108 11:04:06.079536 15 main.go:1065] "level"=1 "msg"="no update required" "rev"="HEAD" "local"="385295a2143f10a6cda0cf4609c45d7499185e01" "remote"="385295a2143f10a6cda0cf4609c45d7499185e01" I0108 11:04:06.079599 15 main.go:585] "level"=1 "msg"="next sync" "wait_time"=15000000000 ``` -
    ## Exploring the Porch resources We have configured three repositories in Porch: -``` + +```bash kubectl get repositories -n porch-demo NAME TYPE CONTENT DEPLOYMENT READY ADDRESS edge1 git Package true True http://172.18.255.200:3000/nephio/edge1.git @@ -414,16 +437,19 @@ external-blueprints git Package false True https://github.com/n management git Package false True http://172.18.255.200:3000/nephio/management.git ``` -A repository is a CR of the Porch Repository CRD. You can examine the 'repositories.config.porch.kpt.dev' CRD with either of the following commands (both of which are rather verbose): -``` +A repository is a CR of the Porch Repository CRD. You can examine the 'repositories.config.porch.kpt.dev' CRD with +either of the following commands (both of which are rather verbose): + +```bash kubectl get crd -n porch-system repositories.config.porch.kpt.dev -o yaml kubectl describe crd -n porch-system repositories.config.porch.kpt.dev ``` + You can of course examine any other CRD using the commands above and changing the CRD name/namespace. The full list of Nephio CRDs is as below: -``` +```bash kubectl api-resources --api-group=porch.kpt.dev NAME SHORTNAMES APIVERSION NAMESPACED KIND functions porch.kpt.dev/v1alpha1 true Function @@ -432,10 +458,9 @@ packagerevisions porch.kpt.dev/v1alpha1 true Pa packages porch.kpt.dev/v1alpha1 true Package ``` -
    -The PackageRevision CRD is used to keep track of revision (or version) of each package found in the repos. +The PackageRevision CRD is used to keep track of revision (or version) of each package found in the repos. -``` +```bash kubectl get packagerevision -n porch-demo NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY external-blueprints-922121d0bcdd56bfa8cae6c375720e2b5f358ab0 free5gc-cp main main false Published external-blueprints @@ -467,12 +492,11 @@ external-blueprints-16142d8d23c1b8e868a9524a1b21634c79b432d5 pkg-example-upf-b external-blueprints-60ef45bb8f55b63556e7467f16088325022a7ece pkg-example-upf-bp v4 v4 false Published external-blueprints external-blueprints-7757966cc7b965f1b9372370a4b382c8375a2b40 pkg-example-upf-bp v5 v5 true Published external-blueprints ``` -
    -
    -The PackageRevisionResources resource is an API Aggregation resource that Porch uses to wrap the GET URL for the package on its repo. +The PackageRevisionResources resource is an API Aggregation resource that Porch uses to wrap the GET URL for the package +on its repo. -``` +```bash kubectl get packagerevisionresources -n porch-demo NAME PACKAGE WORKSPACENAME REVISION REPOSITORY FILES external-blueprints-922121d0bcdd56bfa8cae6c375720e2b5f358ab0 free5gc-cp main main external-blueprints 28 @@ -504,15 +528,16 @@ external-blueprints-16142d8d23c1b8e868a9524a1b21634c79b432d5 pkg-example-upf-b external-blueprints-60ef45bb8f55b63556e7467f16088325022a7ece pkg-example-upf-bp v4 v4 external-blueprints 17 external-blueprints-7757966cc7b965f1b9372370a4b382c8375a2b40 pkg-example-upf-bp v5 v5 external-blueprints 17 ``` -
    Let's examine the `free5gc-cp v1` package. -
    -The PackageRevision CR name for free5gc-cp v1 is external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9. +The PackageRevision CR name for free5gc-cp v1 is external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9. -``` +```bash kubectl get packagerevision -n porch-demo external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9 -o yaml +``` + +```yaml apiVersion: porch.kpt.dev/v1alpha1 kind: PackageRevision metadata: @@ -534,13 +559,17 @@ status: publishedBy: dnaleksandrov@gmail.com upstreamLock: {} ``` -
    + +Getting the PackageRevisionResources pulls the package from its repository with each file serialized into a name-value +map of resources in it's spec.
    -Getting the PackageRevisionResources pulls the package from its repository with each file serialized into a name-value map of resources in it's spec. +Open this to see the command and the result -``` +```bash kubectl get packagerevisionresources -n porch-demo external-blueprints-dabbc422fdf0b8e5942e767d929b524e25f7eef9 -o yaml +``` +```yaml apiVersion: porch.kpt.dev/v1alpha1 kind: PackageRevisionResources metadata: @@ -1267,19 +1296,18 @@ status: ## The porchctl command -The `porchtcl` command is an administration command for acting on Porch `Repository` (repo) and `PackageRevision` (rpkg) CRs. See its [documentation for usage information](https://github.com/nephio-project/porch/blob/main/docs/porchctl-cli-guide.md). +The `porchtcl` command is an administration command for acting on Porch `Repository` (repo) and `PackageRevision` (rpkg) +CRs. See its [documentation for usage information](porchctl-cli-guide.md). -
    -Check that porchctl lists our repos: +Check that porchctl lists our repos: -``` +```bash porchctl repo -n porch-demo get NAME TYPE CONTENT DEPLOYMENT READY ADDRESS edge1 git Package true True http://172.18.255.200:3000/nephio/edge1.git external-blueprints git Package false True https://github.com/nephio-project/free5gc-packages.git management git Package false True http://172.18.255.200:3000/nephio/management.git ``` -
    Check that porchctl lists our remote packages (PackageRevisions): @@ -1609,15 +1637,24 @@ network-function-auto-namespace-85bc658d67-rbzt6 1/1 Running 0 ### Simple PackageVariantSet -The PackageVariant CR is defined in the [simple-variant.yaml](simple-variant.yaml) file. In this very simple PackageVariant, the `network-function` package in the `management` repo is cloned into the `edge1` repo as the `network-function-b` and `network-function-c` package variants. +The PackageVariant CR is defined in the +[simple-variant.yaml](https://github.com/nephio-project/porch/blob/main/docs/tutorials/starting-with-porch/simple-variant.yaml) +file. In this very simple PackageVariant, the `network-function` package in the `management` repo is cloned into the +`edge1` repo as the `network-function-b` and `network-function-c` package variants. + + +{{% alert title="Note" color="primary" %}} + +This simple package variant does not specify any configuration changes. Normally, as well as cloning and renaming, +configuration changes would be applied on a package variant. -> **_NOTE:_** This simple package variant does not specify any configuration changes. Normally, as well as cloning and renaming, configuration changes would be applied on a package variant. +Use `kubectl explain PackageVariantSet` to get help on the structure of the PackageVariantSet CRD. -> Use `kubectl explain PackageVariantSet` to get help on the structure of the PackageVariantSet CRD. +{{% /alert %}} Applying the PackageVariantSet creates the new packages as draft packages: -``` +```bash kubectl apply -f simple-variant.yaml kubectl get PackageRevisions -n porch-demo | grep -v 'external-blueprints' @@ -1638,8 +1675,10 @@ NAME PACKAGE WORKSPACEN edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 network-function-c packagevariant-1 false Draft edge1 ``` -We can see that our two new packages are created as draft packages on the edge1 repo. We can also examine the PacakgeVariant CRs that have been created: -``` +We can see that our two new packages are created as draft packages on the edge1 repo. We can also examine the +PacakgeVariant CRs that have been created: + +```bash kubectl get PackageVariant -n porch-demo NAMESPACE NAME READY STATUS RESTARTS AGE network-function-a network-function-9779fc9f5-2tswc 1/1 Running 0 19h @@ -1647,10 +1686,10 @@ network-function-b network-function-9779fc9f5-6zwhh network-function-c network-function-9779fc9f5-h7nsb 1/1 Running 0 41s ``` -
    -It is also interesting to examine the yaml of the PackageVariant: -``` +It is also interesting to examine the yaml of the PackageVariant: + +```yaml kubectl get PackageVariant -n porch-demo -o yaml apiVersion: v1 items: @@ -1740,11 +1779,11 @@ kind: List metadata: resourceVersion: "" ``` -
    -We now want to customize and deploy our two packages. To do this we must pull the pacakges locally, render the kpt functions, and then push the rendered packages back up to the `edge1` repo. +We now want to customize and deploy our two packages. To do this we must pull the pacakges locally, render the kpt +functions, and then push the rendered packages back up to the `edge1` repo. -``` +```bash porchctl rpkg pull edge1-a31b56c7db509652f00724dd49746660757cd98a tmp_packages_for_deployment/edge1-network-function-b --namespace=porch-demo kpt fn eval --image=gcr.io/kpt-fn/set-namespace:v0.4.1 tmp_packages_for_deployment/edge1-network-function-b -- namespace=network-function-b porchctl rpkg push edge1-a31b56c7db509652f00724dd49746660757cd98a tmp_packages_for_deployment/edge1-network-function-b --namespace=porch-demo @@ -1758,7 +1797,7 @@ Check that the namespace has been updated on the two packages in the `edge1` rep Now our two packages are ready for deployment: -``` +```bash porchctl rpkg propose edge1-a31b56c7db509652f00724dd49746660757cd98a --namespace=porch-demo edge1-a31b56c7db509652f00724dd49746660757cd98a proposed @@ -1772,8 +1811,10 @@ porchctl rpkg approve edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 --namespace edge1-ee14f7ce850ddb0a380cf201d86f48419dc291f4 approved ``` -We can now check that the `network-function-b` and `network-function-c` packages are deployed on the edge1 cluster and that the pods are running -``` +We can now check that the `network-function-b` and `network-function-c` packages are deployed on the edge1 cluster and +that the pods are running + +```bash export KUBECONFIG=~/.kube/kind-edge1-config kubectl get pod -A | egrep '(NAMESPACE|network-function)' @@ -1785,23 +1826,36 @@ network-function-c network-function-9779fc9f5-h7nsb ### Using a PackageVariantSet to automatically set the package name and package namespace -The PackageVariant CR is defined in the [name-namespace-variant.yaml](name-namespace-variant.yaml) file. In this PackageVariant, the `network-function-auto-namespace` package in the `management` repo is cloned into the `edge1` repo as the `network-function-auto-namespace-x` and `network-function-auto-namespace-y` package variants, similar to the PackageVariant in `simple-variant.yaml`. +The PackageVariant CR is defined in the +[name-namespace-variant.yaml](https://github.com/nephio-project/porch/blob/main/docs/tutorials/starting-with-porch/name-namespace-variant.yaml) +file. In this PackageVariant, the `network-function-auto-namespace` package in the `management` repo is cloned into the +`edge1` repo as the `network-function-auto-namespace-x` and `network-function-auto-namespace-y` package variants, +similar to the PackageVariant in `simple-variant.yaml`. Here note the extra `template` section provided for the repositories in the PackageVariant: -``` +```yaml template: downstream: packageExpr: "target.package + '-cumulus'" ``` -This template means that each package in the `spec.targets.repositories..packageNames` list will have the suffix `-cumulus` added to its name. This allows us to automatically generate unique package names. Applying the PackageVariantSet also automatically sets a unique namespace for each network function because applying the PackageVariantSet automatically triggers the Kpt pipeline in the `network-function-auto-namespace` Kpt package to gerenate unique namespaces for each deployed package. +This template means that each package in the `spec.targets.repositories..packageNames` list will have the suffix +`-cumulus` added to its name. This allows us to automatically generate unique package names. Applying the +PackageVariantSet also automatically sets a unique namespace for each network function because applying the +PackageVariantSet automatically triggers the Kpt pipeline in the `network-function-auto-namespace` Kpt package to +gerenate unique namespaces for each deployed package. + +{{% alert title="Note" color="primary" %}} -> Many other mutatinos can be performed using a PackageVariantSet. Use `kubectl explain PackageVariantSet` to get help on the structure of the PackageVariantSet CRD to see the various mutations that are possible. +Many other mutatinos can be performed using a PackageVariantSet. Use `kubectl explain PackageVariantSet` to get help on +the structure of the PackageVariantSet CRD to see the various mutations that are possible. + +{{% /alert %}} Applying the PackageVariantSet creates the new packages as draft packages: -``` +```bash kubectl apply -f name-namespace-variant.yaml packagevariantset.config.porch.kpt.dev/network-function-auto-namespace created @@ -1817,6 +1871,7 @@ edge1-77dbfed49b6cb0723b7c672b224de04c0cead67e network-function- management-f9a6f2802111b9e81c296422c03aae279725f6df network-function-auto-namespace v1 main false Published management management-c97bc433db93f2e8a3d413bed57216c2a72fc7e3 network-function-auto-namespace v1 v1 true Published management ``` + Note that the suffix `x-cumulonimbus` and `y-cumulonimbus` has been palced on the package names. Examine the `edge1` repo on Giea and you should see two new draft branches. @@ -1826,15 +1881,20 @@ Examine the `edge1` repo on Giea and you should see two new draft branches. In these packages, you will see that: -1. The package name has been generated as `network-function-auto-namespace-x-cumulonimbus` and `network-function-auto-namespace-y-cumulonimbus`in all files in the packages -2. The namespace has been generated as `network-function-auto-namespace-x-cumulonimbus` and `network-function-auto-namespace-y-cumulonimbus` respectively in the `demployment.yaml` files -3. The PackageVariant has set the `data.name` field as `network-function-auto-namespace-x-cumulonimbus` and `network-function-auto-namespace-y-cumulonimbus` respectively in the `pckage-context.yaml` files +1. The package name has been generated as `network-function-auto-namespace-x-cumulonimbus` and + `network-function-auto-namespace-y-cumulonimbus`in all files in the packages +2. The namespace has been generated as `network-function-auto-namespace-x-cumulonimbus` and + `network-function-auto-namespace-y-cumulonimbus` respectively in the `demployment.yaml` files +3. The PackageVariant has set the `data.name` field as `network-function-auto-namespace-x-cumulonimbus` and + `network-function-auto-namespace-y-cumulonimbus` respectively in the `pckage-context.yaml` files -Note that this has all been performed automatically; weh have not had to perform the `porchctl rpkg pull/kpt fn render/porchctl rpkg push` combination of commands to make these chages as we had to in the `simple-variant.yaml` case above. +Note that this has all been performed automatically; weh have not had to perform the +`porchctl rpkg pull/kpt fn render/porchctl rpkg push` combination of commands to make these chages as we had to in the +`simple-variant.yaml` case above. Now, let us explore the packages further: -``` +```bash porchctl -n porch-demo rpkg get --name network-function-auto-namespace-x-cumulonimbus NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY edge1-009659a8532552b86263434f68618554e12f4f7c network-function-auto-namespace-x-cumulonimbus packagevariant-1 false Draft edge1 @@ -1844,8 +1904,10 @@ NAME PACKAGE edge1-77dbfed49b6cb0723b7c672b224de04c0cead67e network-function-auto-namespace-y-cumulonimbus packagevariant-1 false Draft edge1 ``` -We can see that our two new packages are created as draft packages on the edge1 repo. We can also examine the PacakgeVariant CRs that have been created: -``` +We can see that our two new packages are created as draft packages on the edge1 repo. We can also examine the +PacakgeVariant CRs that have been created: + +```bash kubectl get PackageVariant -n porch-demo NAME AGE network-function-auto-namespace-edge1-network-function-35079f9f 3m41s @@ -1854,10 +1916,9 @@ network-function-edge1-network-function-b 38m network-function-edge1-network-function-c 38m ``` -
    -It is also interesting to examine the yaml of a PackageVariant: +It is also interesting to examine the yaml of a PackageVariant: -``` +```yaml kubectl get PackageVariant -n porch-demo network-function-auto-namespace-edge1-network-function-35079f9f -o yaml apiVersion: config.porch.kpt.dev/v1alpha1 kind: PackageVariant @@ -1901,11 +1962,9 @@ status: downstreamTargets: - name: edge1-009659a8532552b86263434f68618554e12f4f7c ``` -
    - Our two packages are ready for deployment: -``` +```bash porchctl rpkg propose edge1-009659a8532552b86263434f68618554e12f4f7c --namespace=porch-demo edge1-009659a8532552b86263434f68618554e12f4f7c proposed @@ -1921,7 +1980,7 @@ edge1-77dbfed49b6cb0723b7c672b224de04c0cead67e approved We can now check that the packages are deployed on the edge1 cluster and that the pods are running -``` +```bash export KUBECONFIG=~/.kube/kind-edge1-config kubectl get pod -A | egrep '(NAMESPACE|network-function)' diff --git a/content/en/docs/porch/using-porch/porchctl-cli-guide.md b/content/en/docs/porch/using-porch/porchctl-cli-guide.md new file mode 100644 index 00000000..5d548f6d --- /dev/null +++ b/content/en/docs/porch/using-porch/porchctl-cli-guide.md @@ -0,0 +1,77 @@ +--- +title: "Using the CLI of Porch" +type: docs +weight: 3 +description: +--- + +## Using the porchctl cli + + +When Porch was ported to Nephio, the `kpt alpha rpkg` commands in kpt were moved into a new command called `porchctl`. + +To use it locally, [download](https://github.com/nephio-project/porch/releases), unpack and add it to your PATH. + +_Optional: Generate the autocompletion script for the specified shell to add to your profile._ + +``` +porchctl completion bash +``` + +Check that porchctl is working: + +``` +porchctl --help + +porchctl interacts with a Kubernetes API server with the Porch +server installed as an aggregated API server. It allows you to +manage Porch repository registrations and the packages within +those repositories. + +Usage: + porchctl [flags] + porchctl [command] + +Available Commands: + completion Generate the autocompletion script for the specified shell + help Help about any command + repo Manage package repositories. + rpkg Manage packages. + version Print the version number of porchctl + +Flags: + -h, --help help for porchctl + --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) + --truncate-output Enable the truncation for output (default true) + -v, --v Level number for the log level verbosity + +Use "porchctl [command] --help" for more information about a command. + +``` + +The `porchtcl` command is an administration command for acting on Porch `Repository` (repo) and `PackageRevision` (rpkg) CRs. + +The commands for administering repositories are: + +| Command | Description | +| --------------------- | ------------------------------ | +| `porchctl repo get` | List registered repositories. | +| `porchctl repo reg` | Register a package repository. | +| `porchctl repo unreg` | Unregister a repository. | + +The commands for administering package revisions are: + +| Command | Description | +| ------------------------------ | --------------------------------------------------------------------------------------- | +| `porchctl rpkg approve` | Approve a proposal to publish a package revision. | +| `porchctl rpkg clone` | Create a clone of an existing package revision. | +| `porchctl rpkg copy` | Create a new package revision from an existing one. | +| `porchctl rpkg del` | Delete a package revision. | +| `porchctl rpkg get` | List package revisions in registered repositories. | +| `porchctl rpkg init` | Initializes a new package in a repository. | +| `porchctl rpkg propose` | Propose that a package revision should be published. | +| `porchctl rpkg propose-delete` | Propose deletion of a published package revision. | +| `porchctl rpkg pull` | Pull the content of the package revision. | +| `porchctl rpkg push` | Push resources to a package revision. | +| `porchctl rpkg reject` | Reject a proposal to publish or delete a package revision. | +| `porchctl rpkg update` | Update a downstream package revision to a more recent revision of its upstream package. | From bf35733ce885c6a6fcc4a4f9c9b0ee97b5d38f11 Mon Sep 17 00:00:00 2001 From: Gergely Csatari Date: Fri, 5 Jul 2024 14:32:21 +0300 Subject: [PATCH 6/6] Adding Porch usage with kpt CLI and update release path Signed-off-by: Gergely Csatari --- .../porch/running-porch/running-on-GKE.md | 117 ++--- .../porch/using-porch/porchctl-cli-guide.md | 2 +- .../porch/using-porch/usage-porch-kpt-cli.md | 487 ++++++++++++++++++ 3 files changed, 547 insertions(+), 59 deletions(-) create mode 100644 content/en/docs/porch/using-porch/usage-porch-kpt-cli.md diff --git a/content/en/docs/porch/running-porch/running-on-GKE.md b/content/en/docs/porch/running-porch/running-on-GKE.md index 37e7b39e..f7354079 100644 --- a/content/en/docs/porch/running-porch/running-on-GKE.md +++ b/content/en/docs/porch/running-porch/running-on-GKE.md @@ -6,32 +6,32 @@ description: --- You can install Porch by either using one of the -[released versions](https://github.com/GoogleContainerTools/kpt/releases), or -building Porch from sources. +[released versions](https://github.com/nephio-project/porch/releases), or building Porch from sources. ## Prerequisites -Note: Porch should run on any kubernetes cluster and should work on any cloud. -We have just started by documenting one known-good configuration: GCP and GKE. -We would welcome comparable installation instructions or feedback from people +{{% alert title="Note" color="primary" %}} + +Porch should run on any kubernetes cluster and should work on any cloud. We have just started by documenting one +known-good configuration: GCP and GKE. We would welcome comparable installation instructions or feedback from people that try it out on other clouds / configurations. -To run one of the [released versions](https://github.com/GoogleContainerTools/kpt/releases) -of Porch on GKE, you will need: +{{% /alert %}} + +To run one of the [released versions](https://github.com/nephio-project/porch/releases) of Porch on GKE, you will +need: * A [GCP Project](https://console.cloud.google.com/projectcreate) * [gcloud](https://cloud.google.com/sdk/docs/install) -* [kubectl](https://kubernetes.io/docs/tasks/tools/); you can install it via - `gcloud components install kubectl` +* [kubectl](https://kubernetes.io/docs/tasks/tools/); you can install it via `gcloud components install kubectl` * [kpt](https://kpt.dev/) * Command line utilities such as `curl`, `tar` To build and run Porch on GKE, you will also need: * A container registry which will work with your GKE cluster. - [Artifact Registry](https://console.cloud.google.com/artifacts) - or [Container Registry](https://console.cloud.google.com/gcr) work well - though you can use others too. + [Artifact Registry](https://console.cloud.google.com/artifacts) or + [Container Registry](https://console.cloud.google.com/gcr) work well though you can use others too. * [go 1.17](https://go.dev/dl/) or newer * [docker](https://docs.docker.com/get-docker/) * [Configured docker credential helper](https://cloud.google.com/sdk/gcloud/reference/auth/configure-docker) @@ -40,49 +40,47 @@ To build and run Porch on GKE, you will also need: ## Getting Started -Make sure your `gcloud` is configured with your project (alternatively, you can -augment all following `gcloud` commands below with `--project` flag): +Make sure your `gcloud` is configured with your project (alternatively, you can augment all following `gcloud` +commands below with `--project` flag): -```sh +```bash gcloud config set project YOUR_GCP_PROJECT ``` Select a GKE cluster or create a new one: -```sh +```bash gcloud services enable container.googleapis.com gcloud container clusters create-auto --region us-central1 porch-dev ``` +{{% alert title="Note" color="primary" %}} -**Note:** For development of Porch, in particular for running Porch tests, -Standard GKE cluster is currently preferable. Select a -[GCP region](https://cloud.google.com/compute/docs/regions-zones#available) - that works best for your needs: +For development of Porch, in particular for running Porch tests, Standard GKE cluster is currently preferable. Select a +[GCP region](https://cloud.google.com/compute/docs/regions-zones#available) that works best for your needs: - ```sh + ```bash gcloud services enable container.googleapis.com gcloud container clusters create --region us-central1 porch-dev ``` And ensure `kubectl` is targeting your GKE cluster: -```sh +```bash gcloud container clusters get-credentials --region us-central1 porch-dev ``` +{{% /alert %}} ## Run Released Version of Porch To run a released version of Porch, download the release config bundle from -[Porch release page](https://github.com/GoogleContainerTools/kpt/releases); -please note you'll need to scroll past recent kpt releases to the most -recent `porch/...` release. +[Porch release page](https://github.com/nephio-project/porch/releases). Untar and apply the `deployment-blueprint.tar.gz` config bundle. This will install: * Porch server * [Config Sync](https://kpt.dev/gitops/configsync/) -```sh +```bash mkdir porch-install tar xzf ~/Downloads/deployment-blueprint.tar.gz -C porch-install kubectl apply -f porch-install @@ -91,12 +89,12 @@ kubectl wait deployment --for=condition=Available porch-server -n porch-system You can verify that Porch is running by querying the `api-resources`: -```sh +```bash kubectl api-resources | grep porch ``` Expected output will include: -``` +```bash repositories config.porch.kpt.dev/v1alpha1 true Repository functions porch.kpt.dev/v1alpha1 true Function packagerevisionresources porch.kpt.dev/v1alpha1 true PackageRevisionResources @@ -105,7 +103,7 @@ packagerevisions porch.kpt.dev/v1alpha1 To install ConfigSync: -```sh +```bash echo " apiVersion: configmanagement.gke.io/v1 kind: ConfigManagement @@ -118,61 +116,63 @@ spec: ## Run Custom Build of Porch -To run custom build of Porch, you will need additional [prerequisites](#prerequisites). -The commands below use [Google Container Registry](https://console.cloud.google.com/gcr). +To run custom build of Porch, you will need additional [prerequisites](#prerequisites). The commands below use +[Google Container Registry](https://console.cloud.google.com/gcr). Clone this repository into `${GOPATH}/src/github.com/GoogleContainerTools/kpt`. -```sh +```bash git clone https://github.com/GoogleContainerTools/kpt.git "${GOPATH}/src/github.com/GoogleContainerTools/kpt" ``` -[Configure](https://cloud.google.com/sdk/gcloud/reference/auth/configure-docker) -docker credential helper for your repository +[Configure](https://cloud.google.com/sdk/gcloud/reference/auth/configure-docker) docker credential helper for your +repository. -If your use case doesn't require Porch to interact with GCP container registries, -you can build and deploy Porch by running the following command. It will build and -push Porch Docker images into (by default) Google Container Registry named (example -shown is the Porch server image): +If your use case doesn't require Porch to interact with GCP container registries, you can build and deploy Porch by +running the following command. It will build and push Porch Docker images into (by default) Google Container Registry +named (example shown is the Porch server image): `gcr.io/YOUR-PROJECT-ID/porch-server:SHORT-COMMIT-SHA` -```sh +```bash IMAGE_TAG=$(git rev-parse --short HEAD) make push-and-deploy-no-sa ``` If you want to use different repository, you can set `IMAGE_REPO` variable (see [Makefile](https://github.com/nephio-project/porch/blob/main/Makefile#L32) for details). -The `make push-and-deploy-no-sa` target will install Porch but not Config Sync. -You can install Config Sync in your k8s cluster manually following the +The `make push-and-deploy-no-sa` target will install Porch but not Config Sync. You can install Config Sync in your k8s +cluster manually following the [documentation](https://github.com/GoogleContainerTools/kpt-config-sync/blob/main/docs/installation.md). -**Note**: The `-no-sa` (no service account) targets create Porch deployment +{{% alert title="Note" color="primary" %}} + +The `-no-sa` (no service account) targets create Porch deployment configuration which does not associate Kubernetes service accounts with GCP service accounts. This is sufficient for Porch to integate with Git repositories using Basic Auth, for example GitHub. As above, you can verify that Porch is running by querying the `api-resources`: -```sh +```bash kubectl api-resources | grep porch ``` +{{% /alert %}} ### Workload Identity -[Workload Identity](https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity) -is a simple way to access Google Cloud services from porch. +[Workload Identity](https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity) is a simple way to +access Google Cloud services from porch. #### Google Cloud Source Repositories -[Cloud Source Repositories](https://cloud.google.com/source-repositories) can be access using -workload identity, removing the need to store credentials in the cluster. +[Cloud Source Repositories](https://cloud.google.com/source-repositories) can be access using workload identity, +removing the need to store credentials in the cluster. To set it up, create the necessary service accounts and give it the required roles: -```sh +```bash GCP_PROJECT_ID=$(gcloud config get-value project) # Create GCP service account (GSA) for Porch server. @@ -194,21 +194,22 @@ kubectl annotate serviceaccount porch-server -n porch-system \ iam.gke.io/gcp-service-account=porch-server@${GCP_PROJECT_ID}.iam.gserviceaccount.com ``` -Build Porch, push images, and deploy porch server and controllers using the -`make` target that adds workload identity service account annotations: +Build Porch, push images, and deploy porch server and controllers using the `make` target that adds workload identity +service account annotations: -```sh +```bash IMAGE_TAG=$(git rev-parse --short HEAD) make push-and-deploy ``` As above, you can verify that Porch is running by querying the `api-resources`: -```sh +```bash kubectl api-resources | grep porch ``` To register a repository, use the following command: -```sh + +```bash kpt alpha repo register --repo-workload-identity --namespace=default https://source.developers.google.com/p//r/ ``` @@ -221,7 +222,7 @@ To integrate with OCI repositories such as For that use case, create service accounts and assign roles: -```sh +```bash GCP_PROJECT_ID=$(gcloud config get-value project) # Create GCP service account for Porch server. @@ -248,15 +249,15 @@ gcloud iam service-accounts add-iam-policy-binding porch-sync@${GCP_PROJECT_ID}. --member "serviceAccount:${GCP_PROJECT_ID}.svc.id.goog[porch-system/porch-controllers]" ``` -Build Porch, push images, and deploy porch server and controllers using the -`make` target that adds workload identity service account annotations: +Build Porch, push images, and deploy porch server and controllers using the `make` target that adds workload identity +service account annotations: -```sh +```bash IMAGE_TAG=$(git rev-parse --short HEAD) make push-and-deploy ``` As above, you can verify that Porch is running by querying the `api-resources`: -```sh +```bash kubectl api-resources | grep porch ``` \ No newline at end of file diff --git a/content/en/docs/porch/using-porch/porchctl-cli-guide.md b/content/en/docs/porch/using-porch/porchctl-cli-guide.md index 5d548f6d..87577b9d 100644 --- a/content/en/docs/porch/using-porch/porchctl-cli-guide.md +++ b/content/en/docs/porch/using-porch/porchctl-cli-guide.md @@ -1,5 +1,5 @@ --- -title: "Using the CLI of Porch" +title: "Using the Porch CLI" type: docs weight: 3 description: diff --git a/content/en/docs/porch/using-porch/usage-porch-kpt-cli.md b/content/en/docs/porch/using-porch/usage-porch-kpt-cli.md new file mode 100644 index 00000000..ea7cbac8 --- /dev/null +++ b/content/en/docs/porch/using-porch/usage-porch-kpt-cli.md @@ -0,0 +1,487 @@ +--- +title: "Using Porch with the kpt CLI" +type: docs +weight: 4 +description: +--- + + +This document is focused on using Porch via the `kpt` CLI. + +Installation of Porch, including prerequisites, is covered in a [dedicated document](install-and-using-porch.md). + +## Prerequisites + +To use Porch, you will need: + +* [`kpt`](https://kpt.dev) +* [`kubectl`](https://kubernetes.io/docs/tasks/tools/#kubectl) +* [`gcloud`](https://cloud.google.com/sdk/gcloud) (if running on GKE) + +Make sure that your `kubectl` context is set up for `kubectl` to interact with the correct Kubernetes instance (see +[installation instructions](install-and-using-porch.md) or the [running-locally](../running-porch/running-locally.md) +guide for details). + +To check whether `kubectl` is configured with your Porch cluster (or local instance), run: + +```bash +kubectl api-resources | grep porch +``` + +You should see the following four resourceds listed: + +```bash +repositories config.porch.kpt.dev/v1alpha1 true Repository +packagerevisionresources porch.kpt.dev/v1alpha1 true PackageRevisionResources +packagerevisions porch.kpt.dev/v1alpha1 true PackageRevision +functions porch.kpt.dev/v1alpha1 true Function +``` + +## Porch Resources + +Porch server manages the following resources: + +1. `repositories`: a repository (Git or OCI) can be registered with Porch to support discovery or management of KRM + configuration packages in those repositories, or discovery of KRM functions in those repositories. +2. `packagerevisions`: a specific revision of a KRM configuration package managed by Porch in one of the registered + repositories. This resource represents a _metadata view_ of the KRM configuration package. +3. `packagerevisionresources`: this resource represents the contents of the configuration package (KRM resources + contained in the package) +4. `functions`: function resource represents a KRM function discovered in a repository registered with Porch. Functions + are only supported with OCI repositories. + +Note that `packagerevisions` and `packagerevisionresources` represent different _views_ of the same underlying KRM +configuration package. `packagerevisions` represents the package metadata, and `packagerevisionresources` represents the +package content. The matching resources share the same `name` (as well as API group and version: +`porch.kpt.dev/v1alpha1`) and differ in resource kind (`PackageRevision` and `PackageRevisionResources` respectively). + +## Repository Registration + +To use Porch with a Git repository, you will need: + +* A Git repository for your blueprints. +* A [Personal Access Token](https://github.com/settings/tokens) (when using GitHub repository) for Porch to authenticate + with the repository. Porch requires the 'repo' scope. +* Or Basic Auth credentials for Porch to authenticate with the repository. + +To use Porch with an OCI repository ([Artifact Registry](https://console.cloud.google.com/artifacts) or +[Google Container Registry](https://cloud.google.com/container-registry)), first make sure to: + +* Enable [workload identity](https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity) for Porch +* Assign appropriate roles to the Porch workload identity service account + (`iam.gke.io/gcp-service-account=porch-server@$(GCP_PROJECT_ID).iam.gserviceaccount.com`) + to have appropriate level of access to your OCI repository. + +Use the `kpt alpha repo register` command to register your repository with Porch: + +```bash + +GITHUB_USERNAME= +GITHUB_TOKEN= + +$ kpt alpha repo register \ + --namespace default \ + --repo-basic-username=${GITHUB_USERNAME} \ + --repo-basic-password=${GITHUB_TOKEN} \ + https://github.com/${GITHUB_USERNAME}/blueprints.git +``` + +All command line flags supported: + +* `--directory` - Directory within the repository where to look for packages. +* `--branch` - Branch in the repository where finalized packages are committed (defaults to `main`). +* `--name` - Name of the package repository Kubernetes resource. If unspecified, will default to the name portion (last + segment) of the repository URL (`blueprint` in the example above) +* `--description` - Brief description of the package repository. +* `--deployment` - Boolean value; If specified, repository is a deployment repository; published packages in a + deployment repository are considered deployment-ready. +* `--repo-basic-username` - Username for repository authentication using basic auth. +* `--repo-basic-password` - Password for repository authentication using basic auth. + +Additionally, common `kubectl` command line flags for controlling aspects of +interaction with the Kubernetes apiserver, logging, and more (this is true for +all `kpt` CLI commands which interact with Porch). + +Use the `kpt alpha repo get` command to query registered repositories: + +```bash +$ kpt alpha repo get + +NAME TYPE CONTENT DEPLOYMENT READY ADDRESS +blueprints git Package True https://github.com/platkrm/blueprints.git +deployments git Package true True https://github.com/platkrm/deployments.git +``` + +The `kpt alpha get` commands support common `kubectl` +[flags](https://kubernetes.io/docs/reference/kubectl/cheatsheet/#formatting-output) to format output, for example +`kpt alpha repo get --output=yaml`. + +The command `kpt alpha repo unregister` can be used to unregister a repository: + +```bash +$ kpt alpha repo unregister deployments --namespace default +``` + +## Package Discovery And Introspection + +The `kpt alpha rpkg` command group contains commands for interacting with packages managed by the Package Orchestration +service. the `r` prefix used in the command group name stands for 'remote'. + +The `kpt alpha rpkg get` command list the packages in registered repositories: + +```bash +$ kpt alpha rpkg get + +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +blueprints-0349d71330b89ee48ac85167598ef23021fd0484 basens main main false Published blueprints +blueprints-2e47615fda05664491f72c58b8ab658683afa036 basens v1 v1 true Published blueprints +blueprints-7e2fe44bfdbb744d49bdaaaeac596200102c5f7c istions main main false Published blueprints +blueprints-ac6e872be4a4a3476922deca58cca3183b16a5f7 istions v1 v1 false Published blueprints +blueprints-421a5b5e43b03bc697d96f471929efc6ba3f54b3 istions v2 v2 true Published blueprints +... +``` + +The `LATEST` column indicates whether the package revision is the latest among the revisions of the same package. In the +output above, `v2` is the latest revision of `istions` package and `v1` is the latest revision of `basens` package. + +The `LIFECYCLE` column indicates the lifecycle stage of the package revision, one of: `Published`, `Draft` or +`Proposed`. + +The `REVISION` column indicates the revision of the package. Revisions are assigned when a package is `Published` and +starts at `v1`. + +The `WORKSPACENAME` column indicates the workspace name of the package. The workspace name is assigned when a draft +revision is created and is used as the branch name for proposed and draft package revisions. The workspace name must be +must be unique among package revisions in the same package. + +{{% alert title="Note" color="primary" %}} + +Packages exist in a hierarchical directory structure maintained by the underlying repository such as git, or in a +filesystem bundle of OCI images. The hierarchical, filesystem-compatible names of packages do not satisfy the +Kubernetes naming [constraints](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names). +Therefore, the names of the Kubernetes resources representing package revisions are computed as a hash. + +{{% /alert %}} + + +Simple filtering of package revisions by name (substring) and revision (exact match) is supported by the CLI using +`--name` and `--revision` flags: + +```bash +$ kpt alpha rpkg get --name istio --revision=v2 + +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +blueprints-421a5b5e43b03bc697d96f471929efc6ba3f54b3 istions v2 v2 true Published blueprints +``` + +The common `kubectl` flags that control output format are available as well: + +```bash +$ kpt alpha rpkg get blueprints-421a5b5e43b03bc697d96f471929efc6ba3f54b3 -ndefault -oyaml + +apiVersion: porch.kpt.dev/v1alpha1 +kind: PackageRevision +metadata: + labels: + kpt.dev/latest-revision: "true" + name: blueprints-421a5b5e43b03bc697d96f471929efc6ba3f54b3 + namespace: default +spec: + lifecycle: Published + packageName: istions + repository: blueprints + revision: v2 + workspaceName: v2 +... +``` + +The `kpt alpha rpkg pull` command can be used to read the package resources. + +The command can be used to print the package revision resources as `ResourceList` to `stdout`, which enables +[chaining](https://kpt.dev/book/04-using-functions/02-imperative-function-execution?id=chaining-functions-using-the-unix-pipe) +evaluation of functions on the package revision pulled from the Package Orchestration server. + +```bash +$ kpt alpha rpkg pull blueprints-421a5b5e43b03bc697d96f471929efc6ba3f54b3 -ndefault + +apiVersion: config.kubernetes.io/v1 +kind: ResourceList +items: +- apiVersion: kpt.dev/v1 + kind: Kptfile + metadata: + name: istions +... +``` + +Or, the package contents can be saved on local disk for direct introspection or editing: + +```bash +$ kpt alpha rpkg pull blueprints-421a5b5e43b03bc697d96f471929efc6ba3f54b3 ./istions -ndefault + +$ find istions + +istions +istions/istions.yaml +istions/README.md +istions/Kptfile +istions/package-context.yaml +... +``` + +## Authoring Packages + +Several commands in the `kpt alpha rpkg` group support package authoring: + +* `init` - Initializes a new package revision in the target repository. +* `clone` - Creates a clone of a source package in the target repository. +* `copy` - Creates a new package revision from an existing one. +* `push` - Pushes package resources into a remote package. +* `del` - Deletes one or more packages in registered repositories. + +The `kpt alpha rpkg init` command can be used to initialize a new package revision. Porch server will create and +initialize a new package (as a draft) and save it in the specified repository. + +```bash +$ kpt alpha rpkg init new-package --repository=deployments --workspace=v1 -ndefault + +deployments-c32b851b591b860efda29ba0e006725c8c1f7764 created + +$ kpt alpha rpkg get + +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +deployments-c32b851b591b860efda29ba0e006725c8c1f7764 new-package v1 false Draft deployments +... +``` + +The new package is created in the `Draft` lifecycle stage. This is true also for all commands that create new package +revision (`init`, `clone` and `copy`). + +Additional flags supported by the `kpt alpha rpkg init` command are: + +* `--repository` - Repository in which the package will be created. +* `--workspace` - Workspace of the new package. +* `--description` - Short description of the package. +* `--keywords` - List of keywords for the package. +* `--site` - Link to page with information about the package. + + +Use `kpt alpha rpkg clone` command to create a _downstream_ package by cloning an _upstream_ package: + +```bash +$ kpt alpha rpkg clone blueprints-421a5b5e43b03bc697d96f471929efc6ba3f54b3 istions-clone \ + --repository=deployments -ndefault +deployments-11ca1db650fa4bfa33deeb7f488fbdc50cdb3b82 created + +# Confirm the package revision was created +kpt alpha rpkg get deployments-11ca1db650fa4bfa33deeb7f488fbdc50cdb3b82 -ndefault +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +deployments-11ca1db650fa4bfa33deeb7f488fbdc50cdb3b82 istions-clone v1 false Draft deployments +``` + +`kpt alpha rpkg clone` can also be used to clone packages that are in repositories not registered with Porch, for +example: + +```bash +$ kpt alpha rpkg clone \ + https://github.com/GoogleCloudPlatform/blueprints.git cloned-bucket \ + --directory=catalog/bucket \ + --ref=main \ + --repository=deployments \ + --namespace=default +deployments-e06c2f6ec1afdd8c7d977fcf204e4d543778ddac created + +# Confirm the package revision was created +kpt alpha rpkg get deployments-e06c2f6ec1afdd8c7d977fcf204e4d543778ddac -ndefault +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +deployments-e06c2f6ec1afdd8c7d977fcf204e4d543778ddac cloned-bucket v1 false Draft deployments +``` + +The flags supported by the `kpt alpha rpkg clone` command are: + +* `--directory` - Directory within the upstream repository where the upstream + package is located. +* `--ref` - Ref in the upstream repository where the upstream package is + located. This can be a branch, tag, or SHA. +* `--repository` - Repository to which package will be cloned (downstream + repository). +* `--workspace` - Workspace to assign to the downstream package. +* `--strategy` - Update strategy that should be used when updating this package; + one of: `resource-merge`, `fast-forward`, `force-delete-replace`. + + +The `kpt alpha rpkg copy` command can be used to create a new revision of an existing package. It is a means to +modifying an already published package revision. + +```bash +$ kpt alpha rpkg copy \ + blueprints-421a5b5e43b03bc697d96f471929efc6ba3f54b3 \ + --workspace=v3 -ndefault + +# Confirm the package revision was created +$ kpt alpha rpkg get blueprints-bf11228f80de09f1a5dd9374dc92ebde3b503689 -ndefault +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +blueprints-bf11228f80de09f1a5dd9374dc92ebde3b503689 istions v3 false Draft blueprints +``` + +The `kpt alpha rpkg push` command can be used to update the resources (package contents) of a package _draft_: + +```bash +$ kpt alpha rpkg pull \ + deployments-c32b851b591b860efda29ba0e006725c8c1f7764 ./new-package -ndefault + +# Make edits using your favorite YAML editor, for example adding a new resource +$ cat < ./new-package/config-map.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: example-config-map +data: + color: orange +EOF + +# Push the updated contents to the Package Orchestration server, updating the +# package contents. +$ kpt alpha rpkg push \ + deployments-c32b851b591b860efda29ba0e006725c8c1f7764 ./new-package -ndefault + +# Confirm that the remote package now includes the new ConfigMap resource +$ kpt alpha rpkg pull deployments-c32b851b591b860efda29ba0e006725c8c1f7764 -ndefault + +apiVersion: config.kubernetes.io/v1 +kind: ResourceList +items: +... +- apiVersion: v1 + kind: ConfigMap + metadata: + name: example-config-map + data: + color: orange +... +``` + +Package revision can be deleted using `kpt alpha rpkg del` command: + +```bash +# Delete package revision +$ kpt alpha rpkg del blueprints-bf11228f80de09f1a5dd9374dc92ebde3b503689 -ndefault + +blueprints-bf11228f80de09f1a5dd9374dc92ebde3b503689 deleted +``` + +## Package Lifecycle and Approval Flow + +Authoring is performed on the package revisions in the _Draft_ lifecycle stage. Before a package can be deployed or +cloned, it must be _Published_. The approval flow is the process by which the package is advanced from _Draft_ state +through _Proposed_ state and finally to _Published_ lifecycle stage. + +The commands used to manage package lifecycle stages include: + +* `propose` - Proposes to finalize a package revision draft +* `approve` - Approves a proposal to finalize a package revision. +* `reject` - Rejects a proposal to finalize a package revision + +In the [Authoring Packages](#authoring-packages) section above we created several _draft_ packages and in this section +we will create proposals for publishing some of them. + +```bash +# List package revisions to identify relevant drafts: +$ kpt alpha rpkg get +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +... +deployments-e06c2f6ec1afdd8c7d977fcf204e4d543778ddac cloned-bucket v1 false Draft deployments +deployments-11ca1db650fa4bfa33deeb7f488fbdc50cdb3b82 istions-clone v1 false Draft deployments +deployments-c32b851b591b860efda29ba0e006725c8c1f7764 new-package v1 false Draft deployments + +# Propose two package revisions to be be published +$ kpt alpha rpkg propose \ + deployments-11ca1db650fa4bfa33deeb7f488fbdc50cdb3b82 \ + deployments-c32b851b591b860efda29ba0e006725c8c1f7764 \ + -ndefault + +deployments-11ca1db650fa4bfa33deeb7f488fbdc50cdb3b82 proposed +deployments-c32b851b591b860efda29ba0e006725c8c1f7764 proposed + +# Confirm the package revisions are now Proposed +$ kpt alpha rpkg get +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +... +deployments-e06c2f6ec1afdd8c7d977fcf204e4d543778ddac cloned-bucket v1 false Draft deployments +deployments-11ca1db650fa4bfa33deeb7f488fbdc50cdb3b82 istions-clone v1 false Proposed deployments +deployments-c32b851b591b860efda29ba0e006725c8c1f7764 new-package v1 false Proposed deployments +``` + +At this point, a person in _platform administrator_ role, or even an automated process, will review and either approve +or reject the proposals. To aid with the decision, the platform administrator may inspect the package contents using the +commands above, such as `kpt alpha rpkg pull`. + +```bash +# Approve a proposal to publish a package revision +$ kpt alpha rpkg approve deployments-11ca1db650fa4bfa33deeb7f488fbdc50cdb3b82 -ndefault +deployments-11ca1db650fa4bfa33deeb7f488fbdc50cdb3b82 approved + +# Reject a proposal to publish a package revision +$ kpt alpha rpkg reject deployments-c32b851b591b860efda29ba0e006725c8c1f7764 -ndefault +deployments-c32b851b591b860efda29ba0e006725c8c1f7764 rejected +``` + +Now the user can confirm lifecycle stages of the package revisions: + +```bash +# Confirm package revision lifecycle stages after approvals: +$ kpt alpha rpkg get +NAME PACKAGE WORKSPACENAME REVISION LATEST LIFECYCLE REPOSITORY +... +deployments-e06c2f6ec1afdd8c7d977fcf204e4d543778ddac cloned-bucket v1 false Draft deployments +deployments-11ca1db650fa4bfa33deeb7f488fbdc50cdb3b82 istions-clone v1 v1 true Published deployments +deployments-c32b851b591b860efda29ba0e006725c8c1f7764 new-package v1 false Draft deployments +``` + +Observe that the rejected proposal returned the package revision back to _Draft_ lifecycle stage. The package whose +proposal was approved is now in _Published_ state. + +## Deploying a Package + +Commands used in the context of deploying a package include are in the `kpt alpha sync` command group (named `sync` to +emphasize that Config Sync is the deploying mechanism and that configuration is being synchronized with the actuation +target as a means of deployment) and include: + +* `create` - Creates a sync of a package in the deployment cluster. +* `del` - Deletes the package RootSync. +* `get` - Gets a RootSync resource with which package was deployed. + +```bash +# Make sure Config Sync is configured to use multirepo mode +kubectl apply -f - <