目标:使用本地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账号注册回跳到道客云也报错

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐