k8s使用本地docker私服启动自制的flink集群

目标:使用本地flink环境自制flink镜像包上传到本地的私服,然后k8s使用本地的私服拉取镜像启动Flink集群

1、将本地的flink软件包打包成Docker镜像

从官网下载flink-1.13.6的安装包,修改其中的flink-conf.yaml,修改下面几项配置

bash 复制代码
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打包

bash 复制代码
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

打包执行

bash 复制代码
docker build ./ -t 192.168.101.141:5000/flink:1.13.6

成功后可以使用docker images查看是否在列表中

2、安装本地私服registry

本来是打算安装harbor的,奈何因为网络的原因只能作罢(换了国内源也没能解决)。

这里就安装registry测试吧,拉取镜像

bash 复制代码
docker pull m.daocloud.io/docker.io/library/registry:2.7.1

由于k8s拉取镜像时要求https,故参照 文章1 制作了自签证书

执行

bash 复制代码
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

bash 复制代码
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 验证是否启动成功

没有问题的话,可以将第一步的镜像推上去

bash 复制代码
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启动

bash 复制代码
# 根据配置文件部署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账号注册回跳到道客云也报错

相关推荐
悲伤的创可贴1 小时前
Docker安装以及简单使用
linux·docker·centos
方圆师兄1 小时前
docker快速搭建kafka
docker·容器·kafka
码爸1 小时前
flink kafka sink (scala)
flink·kafka·scala
诚诚k3 小时前
docker存储
运维·docker·容器
sorel_ferris3 小时前
Ubuntu-24.04中Docker-Desktop无法启动
linux·ubuntu·docker
数据智能老司机3 小时前
Kubernetes从入门到精通系列——外部 DNS 和全局负载均衡
云原生·容器·kubernetes
多多*3 小时前
OJ在线评测系统 登录页面开发 前端后端联调实现全栈开发
linux·服务器·前端·ubuntu·docker·前端框架
NiNg_1_2344 小时前
使用Docker Compose一键部署
运维·docker·容器
码爸4 小时前
flink 例子(scala)
大数据·elasticsearch·flink·scala