目标:使用本地flink环境自制flink镜像包上传到本地的私服,然后k8s使用本地的私服拉取镜像启动Flink集群
1、将本地的flink软件包打包成Docker镜像
从官网下载flink-1.13.6的安装包,修改其中的flink-conf.yaml,修改下面几项配置
rest.address: 0.0.0.0
rest.bind-address: 0.0.0.0
jobmanager.bind-host: 0.0.0.0
taskmanager.bind-host: 0.0.0.0
我本地解压的flink安装包路径为 /opt/flink-1.13.6,使用tar打包
tar -zcvf flink-1.13.6.tgz /opt/flink-1.13.6/
新建一个文件夹用于单独存放到打包用到的文件 mkdir -p /opt/docker-flink
参照 文章 编写Dockerfile并进行打包
上述文件可通过百度网盘提取
链接:https://pan.baidu.com/s/18SOMo1bdhlRfN0Tk1ot9iQ?pwd=iwsj
提取码:iwsj
打包执行
docker build ./ -t 192.168.101.141:5000/flink:1.13.6
成功后可以使用docker images查看是否在列表中
2、安装本地私服registry
本来是打算安装harbor的,奈何因为网络的原因只能作罢(换了国内源也没能解决)。
这里就安装registry测试吧,拉取镜像
docker pull m.daocloud.io/docker.io/library/registry:2.7.1
由于k8s拉取镜像时要求https,故参照 文章1 制作了自签证书
执行
openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt
然后将domain.key和domain.crt移动到/etc/docker/registry/ssl目录下面
参照文章2使用下面的命令启动registry
docker run -d \
--restart=always \
--name registry \
-v /opt/registry:/var/lib/registry \
-v /etc/docker/registry/ssl:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-p 5000:443 \
m.daocloud.io/docker.io/library/registry:2.7.1
启动成功后在浏览器中访问https://192.168.101.141:5000/v2/_catalog 验证是否启动成功
没有问题的话,可以将第一步的镜像推上去
docker push 192.168.101.141:5000/flink:1.13.6
推送成功后可以访问https://192.168.101.141:5000/v2/flink/tags/list验证
或者将docker images中的镜像使用docker rm 删掉,然后从registry私服拉下来
3、编写k8s所需的配置文件
通过百度网盘获取写好的模板,此模板也是参照flink官网进行改写的
链接:https://pan.baidu.com/s/1Y93J-xS9ylnEmrZIxdJhXg?pwd=y4ih
提取码:y4ih
下载下来后放在/opt/session-mode目录下,然后进入此目录执行 apply启动
# 根据配置文件部署flink集群
kubectl apply -f .
# 删除配置文件中启动的pod
kubectl delete -f .
# 查看正在运行的pod列表
kubectl get pods -A
# 查看指定pod 的启动描述
kubectl describe pod [pod name]
# 查看指定pod的运行日志
kubectl logs [pod name]
4、测试效果
启动成功后可以访问http://192.168.101.141:30081查看Flink WebUI
我这边执行kubectl apply -f .后没有启动成功,通过kubectl get pods -A看到下面这样
default flink-jobmanager-69d7f845b5-trjl9 0/1 ErrImagePull 0 3s
default flink-taskmanager-96757889-ktz4q 0/1 ErrImagePull 0 3s
default flink-taskmanager-96757889-pzml8 0/1 ErrImagePull 0 3s
default flink-taskmanager-96757889-rmrjn 0/1 ErrImagePull 0 3s
通过kubectl describe pod flink-jobmanager-69d7f845b5-trjl9
可以看到由于https安全的问题没有成功拉取镜像
Failed to pull image "192.168.101.141:5000/flink": rpc error: code = Unknown desc = Error response from daemon: Get https://192.168.101.141:5000/v2/: x509: certificate signed by unknown authority
5、遇到的一些问题
安装企业私服harbor时因为无法访问国外域名导致失败
prepare base dir is set to /opt/software/harbor
Unable to find image 'goharbor/prepare:v1.10.19' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --helpyanzyan'z
由于测试当日发现只有道客云才能拉取docker镜像,但无法注册账号,获取验证码的地址502,通过github账号注册回跳到道客云也报错