【k8s部署flink在x86架构和arm架构服务器上的踩坑】

6 篇文章 0 订阅
2 篇文章 0 订阅

k8s部署flink在x86架构和arm架构服务器上的踩坑

在x86架构上使用k8s部署flink的yaml都已经没什么问题,教程如下
flink部署【使用k8s部署】

但是在arn架构下使用上述yaml部署文件部署时,出现了jobmanager能够部署成功,可是taskmanager报错如下的情况

flink-taskmanager-xx: Temporary failure in name resolution


flink Could not resolve local hostname to an IP address: flink-taskmanager-68d7ccbd4d-lzwb6: fli

于是百度查询和同事请教,认为是taskmanager对其pod内部的/etc/hosts文件的读写权限存在权限不足问题(本质原因):
参考资料
k8s中pod目录访问权限不足
k8s 容器内操作报Permission defined,以root运行容器,定义Pod的特权和访问控制权限

有多种解决办法,提供两种,推荐第二种

1、hostaliases的使用(暂未尝试)

yaml里设置好host,使得taskmanager能找到jobmanager的地址,可以搜索下k8s hostaliases如何使用

2、pod运行前的初始化

加入如下权限修改

      # 初始化容器
      # 初始化容器的作用是在应用容器启动之前做准备工作,每个init容器都必须在下一个启动之前成功完成
      initContainers:
        - name: fix-permissions
          image: busybox:1.34.1
          command: ["sh", "-c", "chmod 640 /opt/flink/conf; chmod 640 /etc"]
          securityContext:
            privileged: true

完整的taskmanager.yaml如下

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flink-taskmanager
  namespace: ai-poc
  annotations:
    flink-mode: "sesssion 模式"
spec:
  replicas: 2
  selector:
    matchLabels:
      app: flink
      component: taskmanager
  template:
    metadata:
      labels:
        app: flink
        component: taskmanager
    spec:
      nodeSelector:
        role: master
      # 初始化容器
      # 初始化容器的作用是在应用容器启动之前做准备工作,每个init容器都必须在下一个启动之前成功完成
      initContainers:
        - name: fix-permissions
          image: busybox:1.34.1
          command: ["sh", "-c", "chmod 640 /opt/flink/conf; chmod 640 /etc"]
          securityContext:
            privileged: true
      containers:
        - name: taskmanager
          image: flink:1.16
          resources:
            limits:
              cpu: 1
              memory: 4Gi
            requests:
              cpu: 500m
              memory: 2Gi
          args: ["taskmanager"]
          ports:
            - containerPort: 6122
              name: rpc
            - containerPort: 6125
              name: query-state
          volumeMounts:
            - name: flink-config-volume
              mountPath: /opt/flink/conf/
          securityContext:
            runAsUser: 9999 # 参考官方 flink 镜像中的 _flink_ 用户,如有必要可以修改
      volumes:
        - name: flink-config-volume
          configMap:
            name: flink-config
            items:
              - key: flink-conf.yaml
                path: flink-conf.yaml
              - key: log4j-console.properties
                path: log4j-console.properties

其他参考

关于临时容器与 Pod 调试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值