GithubHelp home page GithubHelp logo

isabella232 / frakti Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kubernetes-retired/frakti

0.0 0.0 0.0 72.95 MB

The hypervisor-based container runtime for Kubernetes.

License: Apache License 2.0

Shell 7.91% Python 1.29% Go 90.19% Makefile 0.43% Dockerfile 0.17%

frakti's Introduction

Frakti

Build Status Go Report Card

The hypervisor-based container runtime for Kubernetes

Frakti lets Kubernetes run pods and containers directly inside hypervisors via runV. It is light weighted and portable, but can provide much stronger isolation with independent kernel than linux-namespace-based container runtimes.

Frakti serves as a CRI container runtime server. Its endpoint should be configured while starting kubelet. In the deployment, hyperd is also required as the API wrapper of runV.

QuickStart

Build frakti:

mkdir -p $GOPATH/src/k8s.io
git clone https://github.com/kubernetes/frakti.git $GOPATH/src/k8s.io/frakti
cd $GOPATH/src/k8s.io/frakti
make && make install

Install docker and hyperd:

apt-get install qemu libvirt0 docker.io -y
curl -sSL https://hypercontainer.io/install | bash

Configure hyperd with gRPC endpoint 127.0.0.1:22318:

cat >/etc/hyper/config <<EOF
# Boot kernel
Kernel=/var/lib/hyper/kernel
# Boot initrd
Initrd=/var/lib/hyper/hyper-initrd.img
# Storage driver for hyperd, valid value includes devicemapper, overlay, and aufs
StorageDriver=overlay
# Hypervisor to run containers and pods, valid values are: libvirt, qemu, kvm, xen
Hypervisor=qemu
# The tcp endpoint of gRPC API
gRPCHost=127.0.0.1:22318
EOF

systemctl restart hyperd

Setup CNI networking using bridge plugin

$ sudo mkdir -p /etc/cni/net.d  /opt/cni/bin
$ git clone https://github.com/containernetworking/plugins $GOPATH/src/github.com/containernetworking/plugins
$ cd $GOPATH/src/github.com/containernetworking/plugins
$ ./build.sh
$ sudo cp bin/* /opt/cni/bin/
$ sudo sh -c 'cat >/etc/cni/net.d/10-mynet.conflist <<-EOF
{
    "cniVersion": "0.3.1",
    "name": "mynet",
    "plugins": [
        {
            "type": "bridge",
            "bridge": "cni0",
            "isGateway": true,
            "ipMasq": true,
            "ipam": {
                "type": "host-local",
                "subnet": "10.30.0.0/16",
                "routes": [
                    { "dst": "0.0.0.0/0"   }
                ]
            }
        },
        {
            "type": "portmap",
            "capabilities": {"portMappings": true},
            "snat": true
        }
    ]
}
EOF'
$ sudo sh -c 'cat >/etc/cni/net.d/99-loopback.conf <<-EOF
{
    "cniVersion": "0.3.1",
    "type": "loopback"
}
EOF'

Then start frakti:

frakti --v=3 --logtostderr --listen=/var/run/frakti.sock --hyper-endpoint=127.0.0.1:22318 &

Finally, start kubernetes with frakti runtime:

cd $GOPATH/src/k8s.io/kubernetes
hack/install-etcd.sh
export PATH=$GOPATH/src/k8s.io/kubernetes/third_party/etcd:${PATH}
export KUBERNETES_PROVIDER=local
export CONTAINER_RUNTIME=remote
export CONTAINER_RUNTIME_ENDPOINT=/var/run/frakti.sock
hack/local-up-cluster.sh

To start using the cluster, open up another terminal and run:

cd $GOPATH/src/k8s.io/kubernetes
export KUBECONFIG=/var/run/kubernetes/admin.kubeconfig
cluster/kubectl.sh

Documentation

Further information could be found at:

The differences between frakti with other Linux container runtimes

  • Better Security and Isolation
    • frakti provides hardware virtualization based Pod sandbox for Kubernetes.
  • No Kernel Sharing
    • Every Pod in frakti has its own kernel (Bring Your Own Kernel), LinuxKit image support is on the way
  • Match k8s QoS Classes.
    • frakti is best to run Pod with resources.limits being set (i.e. all Guaranteed and most Burstable Pods), otherwise, frakti will set default resource limit for Pod.
    • This behavior is configurable by --defaultCPUNum and --defaultMemoryMB of frakti
  • Mixed Runtimes Mode.
    • frakti support mixed runtimes on the same Node (runV and Docker). We recommend user to run BestEffort Pods, daemon Pods in Docker runtime by adding runtime.frakti.alpha.kubernetes.io/OSContainer annotation to them.
    • Additionally, special cases like privileged Pods, host network Pods etc will be automatically run in Docker runtime.
  • Persistent Volume
    • All k8s PVs are supported in frakti.
    • Block device as volume directly: in this way, frakti will mount block device directly to VM based Pod, which gives you better performance than first approach, now we support:
      • Cinder RBD: Stackube for an example (k8s + frakti + Cinder + Keystone + Neutron).
      • GCE Persistent Disk
  • Cross-host Networking
    • frakti is fully based on CNI (bridge mode only for now), so there's no big difference here.
    • Network plug-ins like Flannel & Calico can work out-of-box with frakti based Kubernetes.

Besides the lists above, all behaviors of frakti are 100% the same with other Linux container runtimes like Docker, please enjoy it!

License

The work done has been licensed under Apache License 2.0.The license file can be found here. You can find out more about license at http://www.apache.org/licenses/LICENSE-2.0.

frakti's People

Contributors

feiskyer avatar crazykev avatar resouer avatar heartlock avatar xlgao-zju avatar yaozengzeng avatar bergwolf avatar liyanyanli avatar lily922 avatar hangyan avatar adamdang avatar mbssaiakhil avatar asifdxtreme avatar joelsmith avatar dchen1107 avatar spiffxp avatar dixudx avatar eduartua avatar nikhita avatar gnawux avatar zourui89 avatar cjhomour avatar hintss avatar mmsakura avatar wangxy518 avatar windayski avatar xichengliudui avatar xuchenhao001 avatar yankay avatar

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.