Here is a single node Kubernetes on CRI-O. This setup is done on Fedora 25.
Installing OS dependencies
dnf -y install \
go \
git \
btrfs-progs-devel \
device-mapper-devel \
glib2-devel \
glibc-devel \
glibc-static \
gpgme-devel \
libassuan-devel \
libgpg-error-devel \
libseccomp-devel \
libselinux-devel \
pkgconfig \
wget \
etcd \
iptables
Creating go environment
cd ~
mkdir -p ~/go
export GOPATH=~/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
echo 'GOPATH=~/go' >> ~/.bashrc
echo 'GOBIN=$GOPATH/bin' >> ~/.bashrc
echo 'PATH=$PATH:$GOBIN' >> ~/.bashrc
Pull all the code dependencies
go get -d k8s.io/kubernetes
go get -u github.com/cloudflare/cfssl/cmd/...
Install runc
go get -d github.com/opencontainers/runc
cd $GOPATH/src/github.com/opencontainers/runc
git reset --hard v1.0.0-rc3
make BUILDTAGS='seccomp selinux' && make install
Build cri-o
cd
go get -d github.com/kubernetes-incubator/cri-o
cd $GOPATH/src/github.com/kubernetes-incubator/cri-o
make install.tools
make && make install
make install.config
Set up CNI
go get -d github.com/containernetworking/cni
cd $GOPATH/src/github.com/containernetworking/cni
./build.sh
mkdir -p /opt/cni/bin
cp bin/* /opt/cni/bin/
mkdir -p /etc/cni/net.d/
cat > /etc/cni/net.d/10-ocid-bridge.conf <<EOF
{
"cniVersion": "0.2.0",
"name": "ocid-bridge",
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"subnet": "10.88.0.0/16",
"routes": [
{ "dst": "0.0.0.0/0" }
]
}
}
EOF
cat > /etc/cni/net.d/99-loopback.conf <<EOF
{
"cniVersion": "0.2.0",
"type": "loopback"
}
EOF
Create policy.json
mkdir -p /etc/containers
cat > /etc/containers/policy.json <<EOF
{
"default": [
{
"type": "insecureAcceptAnything"
}
]
}
EOF
Make SELinux happy
mkdir -p /var/lib/containers/
chcon -Rt svirt_sandbox_file_t /var/lib/containers/
Start ocid service
export PATH=$PATH:/usr/local/bin/
echo 'PATH=$PATH:/usr/local/bin/' >> ~/.bashrc
ocid --runtime /usr/local/sbin/runc --log /root/ocid.log --debug --selinux true
Start k8s cluster with crio
cd $GOPATH/src/k8s.io/kubernetes/
CONTAINER_RUNTIME=remote CONTAINER_RUNTIME_ENDPOINT='/var/run/ocid.sock --runtime-request-timeout=15m' ./hack/local-up-cluster.sh
To use kubectl
(in new terminal)
alias kubectl=$GOPATH/src/k8s.io/kubernetes/cluster/kubectl.sh
echo 'alias kubectl=$GOPATH/src/k8s.io/kubernetes/cluster/kubectl.sh' >> ~/.bashrc
Ref:
- Bangalore Kubernetes Meetup - April 2017 - Slides.
- runcom’s Setup script for Fedora.
- cri-o project
- cri-o tutorial
- Running cri-o on kubernetes cluster
- CRI-O: A kubernetes runtime - video