丁轶群 | 2018-10-11
本文基官方knative serving的开发环境搭建文档,加自己的实践,给出以下knative serving开发环境的搭建方案。
开始之前请确保已按上面的开发环境搭建文档搭好Kubernetes(1.10以上)和istio。
安装开源docker registry
knative serving组件采用ko实现自动化的镜像构建,并将构建好的镜像上传到指定镜像仓库中。因此我们需要安装一个简单的开发用私有镜像仓库。
按照这个docker官方文档,下载并启动镜像仓库:
docker run -d -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 -p 5000:5000 --name registry registry:2
只有制定了bind address为0.0.0.0才能让kubernetes集群中的其他节点也能访问到该registry。
注意上面的镜像仓库默认对外提供http服务,如果需要提供https服务,则首先准备好https证书,然后按照这篇docker官方文档配置镜像仓库。由于我们手头没有https证书,因此在这里不配置镜像仓库的https服务。
修改所有需要访问私有镜像仓库的docker daemon配置文件
docker daemon默认采用https的方式访问镜像仓库,为了让docker daemon使用http访问镜像仓库,需要按照这篇docker官方文档配置docker daemon:
在/etc/docker/daemon.json添加如下内容
{ "insecure-registries" : ["<镜像仓库的ip地址>:5000"] }
如果是已经运行中的docker daemon,则需要如下指令重启docker daemon:
systemctl daemon-reload systemctl restart docker
修改ko源码,让它用http协议访问镜像仓库
ko默认采用https访问镜像仓库,并且无法通过配修改,只能通过修改源码。
下载ko源码
mkdir -p ~/go/src/github.com/google cd ~/go/src/github.com/google git clone https://github.com/google/go-containerregistry.git
修改
serving/pkg/name/repository.go
第91行reg, err := NewSecureRegistry(registry, strict)
改为
reg, err := NewInsecureRegistry(registry, strict)
重新编译ko工具
cd ~/go/src/github.com/google/go-containerregistry/cmd/ko go build
完成后得到新的ko可执行文件
修改ko配置
修改ko保存镜像的repo+namespace名称:
export KO_DOCKER_REPO=<镜像仓库的ip地址地址>:5000/knative
修改ko build镜像用到的基础镜像,在未来运行ko的目录下新建.ko.yaml
文件,并添加如下内容:
defaultBaseImage: <镜像仓库的ip地址>:5000/distroless/base:latest
把镜像push到私有仓库上
下载gcr.io/distroless/base:latest,执行docker tag把镜像重命名为 前面的名字,即<镜像仓库的ip地址>:5000/distroless/base:latest
部署knative serving组件
在Kubernetes masster上git clone knative serving代码,然后在master上执行如下命令来部署knative-serving组件
./ko apply -f ~/go/src/github.com/knative/serving/config/
应该可以在几秒钟内完成,结束之后执行kubectl get pods -n knative-serving
,可以得到部署成功的pod,状态为RUNNING:
- activator-547f9c88f-7kpnq
- autoscaler-6f497c9777-22fz8
- controller-fd8c88d89-k66c5
- webhook-85b7c954f7-zl65q