美文网首页我爱编程
如何使用 cri-o

如何使用 cri-o

作者: Lis_ | 来源:发表于2018-05-17 15:50 被阅读0次
image.png

本教程将引导你如何安装CRI-O(基于Open Container Initiative的Kubernetes Container Runtime Interface的实现)以及创建运行在Pod中的Redis服务器。

系统要求

ubntu16.04

安装

需要安装的组件:

  • crio - 管理pods,实现了kubernetes的CRI
  • crictl - CRI的client
  • cni - 容器网络接口
  • runc - 启动容器的OCI运行时

runc

下载runc的二进制可执行文件

wget https://github.com/opencontainers/runc/releases/download/v1.0.0-rc4/runc.amd64

设置可执行权限并移动到指定的目录

chmod +x runc.amd64
sudo mv runc.amd64 /usr/bin/runc

检查runc的版本

runc --version
runc --version
runc version 1.0.0-rc4
spec: 1.0.0

cri-o

cri-o没有release的二进制可执行文件,所以需要从源码build。

下载Go安装包

wget https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz

安装Go 1.10.2

tar -C /usr/local -zxf go1.10.2.linux-amd64.tar.gz
mkdir -p $HOME/go/src
export GOPATH=$HOME/go
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin

Go应该安装好啦

go version
go version go1.10.2 linux/amd64

下载crictl

go get github.com/kubernetes-incubator/cri-tools/cmd/crictl
cd $GOPATH/src/github.com/kubernetes-incubator/cri-tools
make
make install

编译可执行文件

sudo apt-get update && apt-get install -y libglib2.0-dev \
                                          libseccomp-dev \
                                          libgpgme11-dev \
                                          libdevmapper-dev \
                                          make \
                                          git
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

验证注册信息

如果没有这些配置项,需要自己配置。

registries = ['registry.access.redhat.com', 'registry.fedoraproject.org', 'docker.io']

启动进程crio

sudo sh -c 'echo "[Unit]
Description=OCI-based implementation of Kubernetes Container Runtime Interface
Documentation=https://github.com/kubernetes-incubator/cri-o

[Service]
ExecStart=/usr/local/bin/crio --log-level debug
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target" > /etc/systemd/system/crio.service'
systemctl daemon-reload
systemctl enable crio
systemctl start crio

检查进程是否启动成功

crictl --runtime-endpoint unix:///var/run/crio/crio.sock version
Version:  0.1.0
RuntimeName:  cri-o
RuntimeVersion:  1.10.0-dev
RuntimeApiVersion:  v1alpha1

cni 插件安装

下载cni的源代码

go get -d github.com/containernetworking/plugins
cd $GOPATH/src/github.com/containernetworking/plugins

编译CNI二进制文件

./build.sh

输出信息

Building plugins
  bandwidth
  flannel
  portmap
  tuning
  bridge
  host-device
  ipvlan
  loopback
  macvlan
  ptp
  vlan
  dhcp
  host-local
  static
  sample

安装CNI插件

mkdir -p /opt/cni/bin
cp bin/* /opt/cni/bin/

配置CNI

mkdir -p /etc/cni/net.d
sudo sh -c 'cat >/etc/cni/net.d/10-mynet.conf <<-EOF
{
    "cniVersion": "0.2.0",
    "name": "mynet",
    "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'
sudo sh -c 'cat >/etc/cni/net.d/99-loopback.conf <<-EOF
{
    "cniVersion": "0.2.0",
    "type": "loopback"
}
EOF'

安装skopeo-containers

sudo add-apt-repository ppa:projectatomic/ppa
sudo apt-get update
sudo apt-get install skopeo-containers -y

重启cri-o来启动CNI

systemctl restart crio

现在CNI安装并且配置好啦,使用10.88.0.0/16的网段来分配给容器。
一切准备就绪,现在我们可以创建pods,接下来演示如何在pod中创建一个redis server。

创建一个pod

首先需要设置pod sandbox的配置

cd $GOPATH/src/github.com/kubernetes-incubator/cri-o
mkdir /etc/containers/
cp test/policy.json /etc/containers

创建pod并且获得pod的ID

POD_ID=$(sudo crictl runp test/testdata/sandbox_config.json)

用crictl查看pod的信息

sudo crictl inspectp --output table $POD_ID

输出信息

ID: f66df6126fe9a2e4cf056598afeb1c13a54568c850ead8582924b47b0decc128
Name: podsandbox1
UID: redhat-test-crio
Namespace: redhat.test.crio
Attempt: 1
Status: SANDBOX_READY
Created: 2018-05-17 03:25:19.327406442 +0000 UTC
IP Address: 10.88.0.2
Labels:
    group -> test
    io.kubernetes.container.name -> POD
Annotations:
    owner -> hmeng
    security.alpha.kubernetes.io/seccomp/pod -> unconfined
Info: map[version:{"version":"1.11.0-dev"}]

在pod中创建redis容器

crictl 拉取redis镜像,根据配置文件创建redis容器,并且附着到之前创建的pod中。

crictl pull quay.io/crio/redis:alpine
CONTAINER_ID=$(sudo crictl create $POD_ID test/testdata/container_redis.json test/testdata/sandbox_config.json)

启动redis容器

crictl start $CONTAINER_ID

查看容器的日志

crictl inspect $CONTAINER_ID
{
  "status": {
    "id": "90688b328b0345e682d407ca99472e30bda036d9a0803878328ee43c2b5cf11b",
    "metadata": {
      "attempt": 0,
      "name": "podsandbox1-redis"
    },
    "state": "CONTAINER_RUNNING",
    "createdAt": "2018-05-17T03:26:28.363615962Z",
    "startedAt": "2018-05-17T03:26:36.152514904Z",
    "finishedAt": "1970-01-01T00:00:00Z",
    "exitCode": 0,
    "image": {
      "image": "quay.io/crio/redis:alpine"
    },
    "imageRef": "quay.io/crio/redis@sha256:1780b5a5496189974b94eb2595d86731d7a0820e4beb8ea770974298a943ed55",
    "reason": "",
    "message": "",
    "labels": {
      "tier": "backend"
    },
    "annotations": {
      "pod": "podsandbox1"
    },
    "mounts": null,
    "logPath": "/var/log/crio/pods/f66df6126fe9a2e4cf056598afeb1c13a54568c850ead8582924b47b0decc128/90688b328b0345e682d407ca99472e30bda036d9a0803878328ee43c2b5cf11b.log"
  }
}

测试redis容器

连接容器

telnet 10.88.0.2 6379
Trying 10.88.0.2...
Connected to 10.88.0.2.
Escape character is '^]'.

根据提示出入MONITOR

Trying 10.88.0.2...
Connected to 10.88.0.2.
Escape character is '^]'.
MONITOR
+OK

输入ctrl+ 」quit退出连接

^]

telnet> quit
Connection closed.

查看redis的日志

journalctl -u crio --no-pager

停止并且删除容器

crictl stop $CONTAINER_ID
crictl rm $CONTAINER_ID
crictl stopp $POD_ID
crictl rmp $POD_ID

查看是否删除

crictl pods
crictl ps

相关文章

网友评论

    本文标题:如何使用 cri-o

    本文链接:https://www.haomeiwen.com/subject/vgpbdftx.html