Text
Page: 1
OCI-compatible
haconiwa
─ hurdles and advantages ─
2019-04-12
RejectKaigi 2019 @ pixiv Inc
Yusuke Nakamura (unasuke)
Page: 2
about me
Yusuke Nakamura (also known as “unasuke”)
Employee of BANK Inc
Develop Rails application, manage Infrastructure
https://cash.jp/
RubyKaigi 2019 helper
GitHub @unasuke
Twitter @yu_suke1994
Mastodon @unasuke@mstdn.unasuke.com
Page: 3
introduction
First, to clearly where we stand.
Page: 4
Your perception of containers
Are you use container?
In production env? or(and) development env?
Use Docker? or the other one?
Orchestrate by ECS? or GKE? or on-premises?
Page: 5
We use Docker mostly
de facto standard of a Linux container
Easy installation
for Mac, for Windows…
The first famous Linux container inplementation
Page: 6
“Container” is not equal “Docker”
Before Docker
LXC (Linux)
Jail (FreeBSD)
etc…
After Docker
cri-o
Kata Container
etc…
Page: 7
What’s haconiwa
The Linux contianer runtime written by C and
mruby
https://speakerdeck.com/udzura/the-alternative-
container?slide=11
OCIのspecを必ずしも満たすことは想定していな
い
Independent from “Container” world
“Container” means OCI
Page: 8
What’s OCI
The initialism of “Open Container Initiative”
https://www.opencontainers.org/
OCI specs
Image spec
specifitation of the container image format
Runtime spec
specification of the container runtime interface
Page: 9
CRI and Kubernetes world
kubelet uses Container-Runtime-Interface(CRI) to
communicate to container runtime
The kubelet is the primary “node agent” that runs
on each node.
Page: 10
Diff of OCI/CRI compatible means…
CRI compatible
usable as backend of kubelet
OCI compatible
Exchangeable image and runtime
easy → CRI compatible → OCI compatible → hard
Page: 11
Why CRI-compatible?
haconiwa is just run container. Doesn’t orchestrate.
Pros
Orchestration by Kubernetes
Cons
Cannot use haconiwa-specific functions (hook)
maybe…
Page: 12
Why OCI-compatible?
Pros
possible to share the existing assets
hub.docker.com
Cons
Cannot use haconiwa-specific functions (hook)
https://github.com/haconiwa/haconiwa/blob/master/
sample/hooks.haco
maybe…
Page: 13
hurdles and advantages
hurdles
it’s hard to comply with the standard
advantages
more users
wealth of existing assets
Page: 14
How to implement CRI
https://github.com/kubernetes/kubernetes/blob/
release-1.14/pkg/kubelet/apis/cri/runtime/v1alpha2/
api.proto
Protocol Buffer
RuntimeService
ImageService
and many messages
middleware?
Page: 15
CRI interface and haconiwa
should start process to respond rpc
currently, haconiwa is just a command not service(or
daemon)
should implement rpc response interface
Page: 16
OCI specification and haconiwa
image spec
should import/export OCI image
https://blog.unasuke.com/2018/read-oci-image-spec-
v101/
runtime spec
https://udzura.hatenablog.jp/entry/
2016/08/02/155913
Page: 17
conclusion
more resources, more users in OCI/CRI world
but…
compliant to CRI is hard
compliant to OCI is harder than CRI
Page: 18
conclusion
https://twitter.com/yu_suke1994/status/
1068355444928741376