{"id":13509945,"url":"https://github.com/kubernetes-retired/frakti","last_synced_at":"2026-01-14T14:22:07.368Z","repository":{"id":55647252,"uuid":"62069434","full_name":"kubernetes-retired/frakti","owner":"kubernetes-retired","description":"The hypervisor-based container runtime for Kubernetes.","archived":true,"fork":false,"pushed_at":"2020-12-15T16:30:13.000Z","size":74702,"stargazers_count":675,"open_issues_count":0,"forks_count":115,"subscribers_count":40,"default_branch":"master","last_synced_at":"2025-10-27T07:02:14.998Z","etag":null,"topics":["containers","cri","hypervisor","katacontainers","kernel","kubernetes","pod"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kubernetes-retired.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code-of-conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null}},"created_at":"2016-06-27T16:04:23.000Z","updated_at":"2025-09-22T19:19:53.000Z","dependencies_parsed_at":"2022-08-15T05:30:46.087Z","dependency_job_id":null,"html_url":"https://github.com/kubernetes-retired/frakti","commit_stats":null,"previous_names":["kubernetes/frakti"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/kubernetes-retired/frakti","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubernetes-retired%2Ffrakti","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubernetes-retired%2Ffrakti/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubernetes-retired%2Ffrakti/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubernetes-retired%2Ffrakti/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kubernetes-retired","download_url":"https://codeload.github.com/kubernetes-retired/frakti/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubernetes-retired%2Ffrakti/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28422745,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T13:30:50.153Z","status":"ssl_error","status_checked_at":"2026-01-14T13:29:08.907Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["containers","cri","hypervisor","katacontainers","kernel","kubernetes","pod"],"created_at":"2024-08-01T02:01:18.190Z","updated_at":"2026-01-14T14:22:07.347Z","avatar_url":"https://github.com/kubernetes-retired.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Frakti\n\n[![Build Status](https://travis-ci.org/kubernetes/frakti.svg?branch=master)](https://travis-ci.org/kubernetes/frakti) [![Go Report Card](https://goreportcard.com/badge/github.com/kubernetes/frakti)](https://goreportcard.com/report/github.com/kubernetes/frakti)\n\n## The hypervisor-based container runtime for Kubernetes\n\nFrakti lets Kubernetes run pods and containers directly inside hypervisors via [runV](https://github.com/hyperhq/runv). It is light weighted and portable, but can provide much stronger isolation with independent kernel than linux-namespace-based container runtimes.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/frakti.png\" width=\"800\"\u003e\n\u003c/p\u003e\n\nFrakti serves as a CRI container runtime server. Its endpoint should be configured while starting kubelet. In the deployment, [hyperd](https://github.com/hyperhq/hyperd) is also required as the API wrapper of runV.\n\n## QuickStart\n\nBuild frakti:\n\n```sh\nmkdir -p $GOPATH/src/k8s.io\ngit clone https://github.com/kubernetes/frakti.git $GOPATH/src/k8s.io/frakti\ncd $GOPATH/src/k8s.io/frakti\nmake \u0026\u0026 make install\n```\n\nInstall docker and hyperd:\n\n```sh\napt-get install qemu libvirt0 docker.io -y\ncurl -sSL https://hypercontainer.io/install | bash\n```\n\nConfigure hyperd with gRPC endpoint `127.0.0.1:22318`:\n\n```sh\ncat \u003e/etc/hyper/config \u003c\u003cEOF\n# Boot kernel\nKernel=/var/lib/hyper/kernel\n# Boot initrd\nInitrd=/var/lib/hyper/hyper-initrd.img\n# Storage driver for hyperd, valid value includes devicemapper, overlay, and aufs\nStorageDriver=overlay\n# Hypervisor to run containers and pods, valid values are: libvirt, qemu, kvm, xen\nHypervisor=qemu\n# The tcp endpoint of gRPC API\ngRPCHost=127.0.0.1:22318\nEOF\n\nsystemctl restart hyperd\n```\n\nSetup CNI networking using bridge plugin\n\n```sh\n$ sudo mkdir -p /etc/cni/net.d  /opt/cni/bin\n$ git clone https://github.com/containernetworking/plugins $GOPATH/src/github.com/containernetworking/plugins\n$ cd $GOPATH/src/github.com/containernetworking/plugins\n$ ./build.sh\n$ sudo cp bin/* /opt/cni/bin/\n$ sudo sh -c 'cat \u003e/etc/cni/net.d/10-mynet.conflist \u003c\u003c-EOF\n{\n    \"cniVersion\": \"0.3.1\",\n    \"name\": \"mynet\",\n    \"plugins\": [\n        {\n            \"type\": \"bridge\",\n            \"bridge\": \"cni0\",\n            \"isGateway\": true,\n            \"ipMasq\": true,\n            \"ipam\": {\n                \"type\": \"host-local\",\n                \"subnet\": \"10.30.0.0/16\",\n                \"routes\": [\n                    { \"dst\": \"0.0.0.0/0\"   }\n                ]\n            }\n        },\n        {\n            \"type\": \"portmap\",\n            \"capabilities\": {\"portMappings\": true},\n            \"snat\": true\n        }\n    ]\n}\nEOF'\n$ sudo sh -c 'cat \u003e/etc/cni/net.d/99-loopback.conf \u003c\u003c-EOF\n{\n    \"cniVersion\": \"0.3.1\",\n    \"type\": \"loopback\"\n}\nEOF'\n```\n\nThen start frakti:\n\n```sh\nfrakti --v=3 --logtostderr --listen=/var/run/frakti.sock --hyper-endpoint=127.0.0.1:22318 \u0026\n```\n\nFinally, start kubernetes with frakti runtime:\n\n```sh\ncd $GOPATH/src/k8s.io/kubernetes\nhack/install-etcd.sh\nexport PATH=$GOPATH/src/k8s.io/kubernetes/third_party/etcd:${PATH}\nexport KUBERNETES_PROVIDER=local\nexport CONTAINER_RUNTIME=remote\nexport CONTAINER_RUNTIME_ENDPOINT=/var/run/frakti.sock\nhack/local-up-cluster.sh\n```\n\nTo start using the cluster, open up another terminal and run:\n\n```sh\ncd $GOPATH/src/k8s.io/kubernetes\nexport KUBECONFIG=/var/run/kubernetes/admin.kubeconfig\ncluster/kubectl.sh\n```\n\n## Documentation\n\nFurther information could be found at:\n\n- [Deploying](docs/deploy.md)\n- [End-to-end testing](docs/e2e-tests.md)\n- [Kubelet container runtime API](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/runtime-client-server.md)\n- [runV](https://github.com/hyperhq/runv)\n- [hyperd](https://github.com/hyperhq/hyperd)\n- [The blog on k8s.io about Hypernetes](http://kubernetes.io/blog/2016/05/hypernetes-security-and-multi-tenancy-in-kubernetes.html)\n\n## The differences between `frakti` with other Linux container runtimes\n\n- Better Security and Isolation\n  - frakti provides hardware virtualization based Pod sandbox for Kubernetes.\n- No Kernel Sharing\n  - Every Pod in frakti has its own kernel (Bring Your Own Kernel), LinuxKit image support is on the way\n- Match k8s QoS Classes.\n  - 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.\n  - This behavior is configurable by `--defaultCPUNum` and `--defaultMemoryMB`  of frakti\n- Mixed Runtimes Mode.\n  - 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.\n  - Additionally, special cases like privileged Pods, host network Pods etc will be automatically run in Docker runtime.\n- Persistent Volume\n  - All k8s PVs are supported in frakti.\n  - **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: \n    - Cinder RBD: [Stackube](https://github.com/openstack/stackube) for an example (k8s + frakti + Cinder + Keystone + Neutron).\n    - GCE Persistent Disk\n- Cross-host Networking\n  - frakti is fully based on CNI (bridge mode only for now), so there's no big difference here.\n  - Network plug-ins like `Flannel` \u0026 `Calico` can work out-of-box with `frakti` based Kubernetes.\n\nBesides the lists above, all behaviors of frakti are 100% the same with other Linux container runtimes like Docker, please enjoy it!\n\n## License\n\nThe work done has been licensed under Apache License 2.0.The license file can be found [here](LICENSE). You can find out more about license at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkubernetes-retired%2Ffrakti","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkubernetes-retired%2Ffrakti","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkubernetes-retired%2Ffrakti/lists"}