Git Product home page Git Product logo

kumahq / kuma Goto Github PK

View Code? Open in Web Editor NEW
3.6K 61.0 328.0 249.07 MB

🐻 The multi-zone service mesh for containers, Kubernetes and VMs. Built with Envoy. CNCF Sandbox Project.

Home Page: https://kuma.io/install

License: Apache License 2.0

Shell 0.37% Makefile 0.73% Dockerfile 0.05% Go 98.54% HTML 0.05% PLpgSQL 0.02% Mustache 0.15% JavaScript 0.08% CSS 0.01%
service-mesh golang envoy envoyproxy kong servicemesh sidecar-proxy cloud-native kubernetes kuma

kuma's Introduction

Builds

GitHub Actions master

Code quality

Go Report Card OpenSSF Best Practices OpenSSF Scorecard License CLOMonitor

Releases

Docker hub Artifact HUB Package Hosting By: Cloudsmith

Social

Slack Twitter

Kuma is a modern Envoy-based service mesh that can run on every cloud, in a single or multi-zone capacity, across both Kubernetes and VMs. Thanks to its broad universal workload support, combined with native support for Envoy as its data plane proxy technology (but with no Envoy expertise required), Kuma provides modern L4-L7 service connectivity, discovery, security, observability, routing and more across any service on any platform, databases included.

Easy to use, with built-in service mesh policies for security, traffic control, discovery, observability and more, Kuma ships with an advanced multi-zone and multi-mesh support that automatically enables cross-zone communication across different clusters and clouds, and automatically propagates service mesh policies across the infrastructure. Kuma is currently being adopted by enterprise organizations around the world to support distributed service meshes across the application teams, on both Kubernetes and VMs.

Originally created and donated by Kong, Kuma is today CNCF (Cloud Native Computing Foundation) Sandbox project and therefore available with the same openness and neutrality as every other CNCF project. Kuma has been engineered to be both powerful yet simple to use, reducing the complexity of running a service mesh across every organization with very unique capabilities like multi-zone support, multi-mesh support, and a gradual and intuitive learning curve.

Users that require enterprise-level support for Kuma can explore the enterprise offerings available.

Built by Envoy contributors at Kong 🦍.

Get Started

Get Involved

Need help? In your journey with Kuma you can get in touch with the broader community via the official community channels.

Summary

Why Kuma?

Built with enterprise use-cases in mind, Kuma is a universal service mesh that supports both Kubernetes and VMs deployments across single and multi-zone setups, with turnkey service mesh policies to get up and running easily while supporting multi-tenancy and multi-mesh on the same control plane. Kuma is a CNCF Sandbox project.

Unlike other service mesh solutions, Kuma innovates the service mesh ecosystem by providing ease of use, native support for both Kubernetes and VMs on both the control plane and the data plane, multi-mesh support that can cross every boundary including Kubernetes namespaces, out of the box multi-zone and multi-cluster support with automatic policy synchronization and connectivity, zero-trust, observability and compliance in one-click, support for custom workload attributes that can be leveraged to accelerate PCI and GDPR compliance, and much more.

Below is an example of using Kuma's attributes to route all traffic generated by any PCI-compliant service in Switzerland, to only be routed within the Swiss region:

apiVersion: kuma.io/v1alpha1
kind: TrafficRoute
mesh: default
metadata:
  name: ch-pci-compliance
spec:
  sources:
    - match:
        kuma.io/service: '*'
        kuma.io/zone: 'CH'
        PCI: true
  destinations:
    - match:
        kuma.io/service: '*'
  conf:
    loadBalancer:
      roundRobin: {}
    split:
      - weight: 100
        destination:
          kuma.io/service: '*'
          kuma.io/zone: 'CH'

The above example can also be applied on virtual machines via the built-in kumactl CLI.

With Kuma, our application teams can stop building connectivity management code in every service and every application, and they can rely on modern service mesh infrastructure instead to improve their efficiency and the overall agility of the organization:

Features

  • Universal Control Plane: Easy to use, distributed, runs anywhere on both Kubernetes and VM/Bare Metal.
  • Lightweight Data Plane: Powered by Envoy to process any L4/L7 traffic, with automatic Envoy bootstrapping.
  • Automatic DP Injection: No code changes required in K8s. Easy YAML specification for VM and Bare Metal deployments.
  • Multi-Mesh: To setup multiple isolated Meshes in one cluster and one Control Plane, lowering OPs cost.
  • Single and Multi Zone: To deploy a service mesh that is cross-platform, cross-cloud and cross-cluster.
  • Automatic Discovery & Ingress: With built-in service discovery and connectivity across single and multi-zones.
  • Global & Remote CPs: For scalability across deployments with multiple zones, including hybrid VMs + K8s meshes.
  • mTLS: Automatic mTLS issuing, identity and encryption with optional support for third-party CA.
  • TLS Rotation: Automatic certificate rotation for all the data planes, with configurable settings.
  • Internal & External Services: Aggregation of internal services and support for services outside the mesh.
  • Traffic Permissions: To firewall traffic between the services of a Mesh.
  • Traffic Routing: With dynamic load-balancing for blue/green, canary, versioning and rollback deployments.
  • Fault Injection: To harden our systems by injecting controlled artificial faults and observe the behavior.
  • Traffic Logs: To log all the activity to a third-party service, like Splunk or ELK.
  • Traffic Tracing: To observe the full trace of the service traffic and determine bottlenecks.
  • Traffic Metrics: For every Envoy dataplane managed by Kuma with native Prometheus/Grafana support.
  • Retries: To improve application reliability by automatically retrying requests.
  • Proxy Configuration Templating: The easiest way to run and configure Envoy with low-level configuration.
  • Gateway Support: To support any API Gateway or Ingress, like Kong Gateway.
  • Healthchecks: Both active and passive.
  • GUI: Out of the box browser GUI to explore all the Service Meshes configured in the system.
  • Tagging Selectors: To apply sophisticated regional, cloud-specific and team-oriented policies.
  • Platform-Agnostic: Support for Kubernetes, VMs, and bare metal. Including hybrid deployments.
  • Transparent Proxying: Out of the box transparent proxying on Kubernetes, VMs and any other platform.
  • Network Overlay: Create a configurable Mesh overlay across different Kubernetes clusters and namespaces.

Distributions

Kuma is a platform-agnostic product that ships in different distributions. You can explore the available installation options at the official website.

You can use Kuma for modern greenfield applications built on containers as well as existing applications running on more traditional infrastructure. Kuma can be fully configured via CRDs (Custom Resource Definitions) on Kubernetes and via a RESTful HTTP API in other environments that can be easily integrated with CI/CD workflows.

Kuma also provides an easy to use kumactl CLI client for every environment, and an official GUI that can be accessed by the browser.

Roadmap

Kuma releases a minor version on a 10-week release cycle. The roadmap is tracked using milestones: https://github.com/kumahq/kuma/milestones

Development

Kuma is under active development and production-ready.

See Developer Guide for further details.

Enterprise Support

If you are implementing Kuma in a mission-critical environment and require enterprise support and features, please visit Enterprise to explore the available offerings.

Package Hosting

Package repository hosting is graciously provided by Cloudsmith. Cloudsmith is the only fully hosted, cloud-native, universal package management solution, that enables your organization to create, store and share packages in any format, to any place, with total confidence.

kuma's People

Contributors

austince avatar automaat avatar bartsmykla avatar dependabot[bot] avatar devadvocado avatar gabitchov avatar github-actions[bot] avatar gszr avatar icarus9913 avatar jakubdyszkiewicz avatar jewertow avatar jijiechen avatar johnharris85 avatar jpeach avatar kumahq[bot] avatar lahabana avatar lobkovilya avatar lukidzi avatar michaelbeaumont avatar mmorel-35 avatar nicoche avatar nikita15p avatar parkanzky avatar pradeepmurugesan avatar slonka avatar subnetmarco avatar sudeeptoroy avatar tharun208 avatar tomaszwylezek avatar yskopets avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kuma's Issues

Apply multiple resources using kumactl apply

There should be an option to apply multiple resources

name: backend-01
mesh: default
type: Dataplane
networking:
  inbound:
    - interface: 127.0.0.1:8080:8090
      tags:
        service: backend
        version: "1.0"
        env: production
  outbound:
    - interface: :30000
      service: postgres
      servicePort: 5432

---
name: backend-02
mesh: default
type: Dataplane
networking:
  inbound:
    - interface: 127.0.0.1:8080:8090
      tags:
        service: backend
        version: "1.0"
        env: production
  outbound:
    - interface: :30000
      service: postgres
      servicePort: 5432

Resources can have different types.

HTTP API server always listens on https

The API server should always listen on https, and we should provide the following functionality:

  • Auto-generate self-signed certificates for the API.
  • Allow the user to specify his own certificates.

Starting multiple services

When i'm trying to run more than one service, i'm getting the error:

unable to bind domain socket with id=0 (see --base-id option)
Error: exit status 1

I think this is related to Envoy proxy!!!

Setup CI pipeline

Create deb/rpm packages and Docker images for:

  • ubuntu:18.04
  • ubuntu:16.04
  • ubuntu:14.04
  • debian:9
  • debian:8
  • rhel:7
  • centos:7
  • amazonlinux:2
  • alpine:3.9

Investigate Envoy warning on kuma-dp run

[2019-09-08 11:55:40.685][353027][info][main] [external/envoy/source/server/server.cc:432] runtime: layers:
  - name: base
    static_layer:
      {}
  - name: admin
    admin_layer:
      {}
[2019-09-08 11:55:40.685][353027][warning][runtime] [external/envoy/source/common/runtime/runtime_impl.cc:485] Skipping unsupported runtime layer: name: "base"
static_layer {
}

Auto-discover control planes in K8s

I like @yskopets idea:

$ konvoyctl config control-planes add --auto-discover

Searching for Control Planes ...

> Searching for Control Planes installed on Kuberenetes
>> Checking `kubectl` context ...
>>> Searching for Control Plane inside `minikube` context ...
+++ Found Control Plane inside `minikube` context

The following Control Planes have been found on Kubernetes:
CONTEXT NAMESPACE 
minikube   konvoy-system
gke-test      konvoy-system
gke-pro      konvoy-system

Converge `get` and `inspect` in the CLI

For example:

$ kumactl get dataplanes
MESH      NAME        TAGS           STATUS   LAST CONNECTED AGO   LAST UPDATED AGO   TOTAL UPDATES   TOTAL ERRORS
default   dp-echo-1   service=echo   Online   4m47s                4m46s              2               0

and for the simplified version:

$ kumactl get dataplanes --compact
MESH      NAME        TAGS
default   dp-echo-1   service=echo

./bin/kumactl install control-plane generates images that are not available in bintray.

Summary

Standard installation fails due to missing docker image.

Steps To Reproduce

  1. Download kuma-0.1.0-darwin.tar.gz
  2. run ./bin/kumactl install control-plane | kubectl apply -f -
  3. kubectl -n kuma-system describe pods | grep Failed
    Warning Failed 11m (x4 over 12m) kubelet, kind-control-plane Failed to pull image "kong-docker-kuma-docker.bintray.io/kuma-injector:0.1.0-2-ga5a27f5": rpc error: code = Unknown desc = failed to resolve image "kong-docker-kuma-docker.bintray.io/kuma-injector:0.1.0-2-ga5a27f5": no available registry endpoint: kong-docker-kuma-docker.bintray.io/kuma-injector:0.1.0-2-ga5a27f5 not found

Additional Details & Logs

This commit appears to be responsible for the error.
https://github.com/Kong/kuma/commit/d047661f7e5213f641332918ec190c75d8b4976d

  • Version 0.1.0-2-ga5a27f5

  • Error logs
    $ docker pull kong-docker-kuma-docker.bintray.io/kuma-injector:0.1.0-2-ga5a27f5
    Error response from daemon: manifest for kong-docker-kuma-docker.bintray.io/kuma-injector:0.1.0-2-ga5a27f5 not found: manifest unknown: The named manifest is not known to the registry.

  • Configuration

  • Platform and Operating System
    mac os running kubernetes in kind

Kuma with Postgres

When running kuma control plane with postgres, i get this error:

kuma-cp.run	problem running Control Plane	{"error": "failed to execute query: SELECT spec, version FROM resources WHERE name=$1 AND namespace=$2 AND mesh=$3 AND type=$4;: pq: relation \"resources\" does not exist", "errorVerbose": "pq: relation \"resources\" does not exist\nfailed to execute query: SELECT spec, version FROM resources WHERE name=$1 AND namespace=$2 AND mesh=$3 AND type=$4;\ngithub.com/Kong/kuma/pkg/plugins/resources/postgres.(*postgresResourceStore).Get\n\t/home/ec2-user/kuma/pkg/plugins/resources/postgres/store.go:143\ngithub.com/Kong/kuma/pkg/core/managers/apis/mesh.(*meshManager).Get\n\t/home/ec2-user/kuma/pkg/core/managers/apis/mesh/mesh_manager.go:34\ngithub.com/Kong/kuma/pkg/core/resources/manager.(*customizableResourceManager).Get\n\t/home/ec2-user/kuma/pkg/core/resources/manager/customizable_manager.go:23\ngithub.com/Kong/kuma/pkg/core/bootstrap.createDefaultMesh\n\t/home/ec2-user/kuma/pkg/core/bootstrap/bootstrap.go:70\ngithub.com/Kong/kuma/pkg/core/bootstrap.onStartup.func1\n\t/home/ec2-user/kuma/pkg/core/bootstrap/bootstrap.go:101\ngithub.com/Kong/kuma/pkg/core/runtime.ComponentFunc.Start\n\t/home/ec2-user/kuma/pkg/core/runtime/component.go:15\ngithub.com/Kong/kuma/pkg/plugins/bootstrap/universal.(*componentManager).Start.func1\n\t/home/ec2-user/kuma/pkg/plugins/bootstrap/universal/component_manager.go:26\nruntime.goexit\n\t/usr/local/go/src/runtime/asm_amd64.s:1337"}
Error: failed to execute query: SELECT spec, version FROM resources WHERE name=$1 AND namespace=$2 AND mesh=$3 AND type=$4;: pq: relation "resources" does not exist

Validate the `Dataplane` object

  • Making sure that the tags have the mandatory service field.
  • Making sure that inboud is always present.
  • Validate the values in each field, including making sure that the interface value matches the right format.
  • Making sure the names are valid with no weird characters (ie, [a-zA-Z0-9\-\_]+).
  • And so on.

But really, do this for every object not just Dataplane.

App versioning

We need to describe a process of releasing new version of Kuma.
It should update the kumactl version, kuma-dp version and / on api-server etc.

Unexpected error when adding a data-plane

2019-09-05T16:52:23.700-0700	ERROR	bootstrap-server	Could not generate a bootstrap configuration	{"params": {"nodeId":"test","adminPort":9901}, "error": "the name should be provided after the dot", "errorVerbose": "the name should be provided after the dot\ngithub.com/Kong/konvoy/components/konvoy-control-plane/pkg/core/xds.ParseProxyIdFromString\n\t/Users/dhruvkaran.mehta/Projects/kuma/components/konvoy-control-plane/pkg/core/xds/types.go:44\ngithub.com/Kong/konvoy/components/konvoy-control-plane/pkg/xds/bootstrap.(*bootstrapGenerator).fetchDataplane\n\t/Users/dhruvkaran.mehta/Projects/kuma/components/konvoy-control-plane/pkg/xds/bootstrap/generator.go:71\ngithub.com/Kong/konvoy/components/konvoy-control-plane/pkg/xds/bootstrap.(*bootstrapGenerator).Generate\n\t/Users/dhruvkaran.mehta/Projects/kuma/components/konvoy-control-plane/pkg/xds/bootstrap/generator.go:43\ngithub.com/Kong/konvoy/components/konvoy-control-plane/pkg/xds/bootstrap.(*BootstrapServer).handleBootstrapRequest\n\t/Users/dhruvkaran.mehta/Projects/kuma/components/konvoy-control-plane/pkg/xds/bootstrap/server.go:71\nnet/http.HandlerFunc.ServeHTTP\n\t/usr/local/go/src/net/http/server.go:1995\nnet/http.(*ServeMux).ServeHTTP\n\t/usr/local/go/src/net/http/server.go:2375\nnet/http.serverHandler.ServeHTTP\n\t/usr/local/go/src/net/http/server.go:2774\nnet/http.(*conn).serve\n\t/usr/local/go/src/net/http/server.go:1878\nruntime.goexit\n\t/usr/local/go/src/runtime/asm_amd64.s:1337"}
github.com/go-logr/zapr.(*zapLogger).Error
	/Users/dhruvkaran.mehta/go/pkg/mod/github.com/go-logr/[email protected]/zapr.go:128
github.com/Kong/konvoy/components/konvoy-control-plane/pkg/xds/bootstrap.(*BootstrapServer).handleBootstrapRequest
	/Users/dhruvkaran.mehta/Projects/kuma/components/konvoy-control-plane/pkg/xds/bootstrap/server.go:77
net/http.HandlerFunc.ServeHTTP
	/usr/local/go/src/net/http/server.go:1995
net/http.(*ServeMux).ServeHTTP
	/usr/local/go/src/net/http/server.go:2375
net/http.serverHandler.ServeHTTP
	/usr/local/go/src/net/http/server.go:2774
net/http.(*conn).serve
	/usr/local/go/src/net/http/server.go:1878

HTTP API server not displayed at startup time

2019-09-05T16:37:01.520-0700	INFO	Skipping reading config from file
2019-09-05T16:37:01.522-0700	INFO	konvoy-cp.run	starting Control Plane
2019-09-05T16:37:01.524-0700	INFO	xds-server.grpc	starting	{"port": 5678}
2019-09-05T16:37:01.523-0700	INFO	xds-server.diagnostics	starting	{"port": 5680}
2019-09-05T16:37:01.523-0700	INFO	xds-server.http	starting	{"port": 5679}
2019-09-05T16:37:01.525-0700	INFO	bootstrap-server	starting	{"port": 5682}
2019-09-05T16:37:01.525-0700	INFO	Creating default mesh from the settings	{"mesh": {"mtls":{"ca":{"Type":{"Builtin":{}}}},"tracing":{"Type":null}}}

kumactl apply and Kuberentes

When kumactl tries to apply on a Kuma cluster that runs on Kubernetes, block the operation with a user-friendly message.

kumactl install postgres

There should be kumactl install postgres-schema command that prints the postgres schema to apply.

Improve error reporting in `konvoyctl apply`

Currently, if the user provides invalid input to konvoyctl apply, the error message isn't very helpful:

./build/artifacts/konvoyctl/konvoyctl apply -f examples/resources/mesh.yaml  
Error: unexpected status code: 400

In this case, the mesh field was missing from the input.

Validate `inbound` when `kuma-dp` starts

When kuma-dp starts it should validate that effectively there is a service running at the location specified by the inbound object in the Dataplane configuration.

Design of `konvoyctl list dataplanes`

Hi guys,

I’d like to get your feedback on a solution for konvoyctl list dataplanes I’ve been working on.

The root concern for me is compliance with our platform-agnosticity requirements.

What seems a natural approach to me might be perceived as non platform-agnostic by you.

So, I’ll better ask.

As part of konvoyctl list dataplanes use case, konvoyctl tool needs to fetch data about dataplanes.

There are a few options where to fetch those data from:

1: konvoyctl fetches data from environment-native API

  • k8s path: konvoyctl => kube-apiserver (k8s CRDs)
  • non-k8s path: konvoyctl => konvoy API => Postgres

2: konvoyctl fetches data from Konvoy API only (and doesn’t know about k8s CRDs)

  • k8s path: konvoyctl => konvoy API => kube-apiserver (k8s CRDs)
  • non-k8s path: konvoyctl => konvoy API => Postgres

Option 1:

  • Pros
    • Technically simpler solution
    • Embraces k8s RBAC model (a user can only see those dataplanes that he has permissions on)
  • Cons
    • konvoyctl must be aware of 2 different sources of data (k8s CRDs and Konvoy API)
    • Although interacting with kube-apiserver (CRDs) might be enough in this use case, in the future we might still need to make requests directly to konvoy API

Option 2:

  • Pros
    • konvoyctl has only 1 source of data (Konvoy API)
  • Cons
    • Konvoy API must return k8s specific information (e.g., Namespace)
    • k8s RBAC model is ignored by default (see notes below on how kubectl proxy can help)
  • Notes
    • Although konvoyctl might seem platform-agnostic at this point, it’s not a complete picture
    • konvoyctl must be able to connect to konvoy API deployed inside k8s
      • it is not acceptable to force users to expose konvoy API outside of the cluster
      • as a result, konvoyctl must use k8s api to connect directly to konvoy API. There 2 options
        • kubectl port-forward (analog of its behaviour)
        • kubectl proxy (analog of its behaviour)
      • kubectl port-forward establishes a direct TCP connection into a Pod where konvoy API is deployed
        • Kubernetes will check if a user has permission to do kubectl port-forward on a target Pod
        • However, after that security context is lost (we cannot restrict further what a user can or cannot request from konvoy API)
        • Which means that konvoyctl list dataplabes can be used by sys admins, but unlikely by regular users (app developers)
      • kubectl proxy is an HTTP proxy integrated into kube-apiserver
        • Instead of making an HTTP request directly into konvoy API, it could be made via kube-apiserver
          • Kubernetes will check if a user has permissions to do kubectl proxy on a Service of konvoy API
          • Kubernetes will proxy the HTTP request and forward it to konvoy API, including information about the user (name, groups)
          • konvoy API can use forwarded info about a user to enforce RBAC (by making a reverse call into k8s APIs)
          • konvoy API should support a version of API that includes Namespaces, e.g. all 3 options below
            • /dataplanes (to serve requests equivalent to kubectl get dataplanes --all-namespaces)
            • /meshes/:name/dataplanes (to serve requests equivalent to kubectl get dataplanes --field-selector=“.mesh=pilot” --all-namespaces)
            • /meshes/:name/namespaces/:ns/dataplanes (to serve requests equivalent to kubectl get dataplanes --field-selector=“.mesh=pilot” -n my-namespace)

Option 2 has a longer description, but it shouldn’t discourage you

  • I double checked, both Istio and Linkerd use kubectl port-forward in some use cases

Please let me know which option you prefer

make dev/tools does not include clang-format dependency

Summary

Clang-format is a dependency that is not stated or included in the Makefile.

Steps To Reproduce

  1. Follow DEVELOPER.MD steps and install dev tools with make dev/tools
  2. make build
  3. make run/universal/memory
    outputs:
go fmt ./...
make fmt -C pkg/plugins/resources/k8s/native
go fmt ./...
find . -name '*.proto' | xargs -L 1 clang-format -i
xargs: clang-format: No such file or directory
make: *** [fmt/proto] Error 127 

since clang-format is not installed. The documentation also does not recognize it as a dependency. Need to implement the following:

  1. Makefile installs clang-format if does not exist
    and
  2. Update DEVELOPER.md to state that clang-format is a dependency

Support DTLS and UDP routing

Summary

Support DTLS or UDP routing? This is useful for game server hosting that uses kuma as a load balancer and for things like internet of things endpoints.

Steps To Reproduce

Use kuma.

Additional Details & Logs

how kuma userd under kubernets

Summary

SUMMARY_GOES_HERE

Steps To Reproduce

Additional Details & Logs

  • Version
  • Error logs
  • Configuration
  • Platform and Operating System

can offer the functions kuma mange kubernets application,and give some examples

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.