在Kubernetes中运行一个Ruby脚本的快速方法

99 阅读1分钟

有时我发现自己需要在一个实时的Kubernetes集群上运行一个Ruby脚本。在今天的例子中,它与生成MySQL的负载有关,这在我的笔记本电脑上做起来比较棘手。脚本必须在集群中的工作负载附近运行。

我很懒,要用我的脚本建立和推送一个Docker容器将是一个很大的额外工作。

幸运的是,由于K8S的配置图和Bundler的内联模式,这可以实现,而不必建立一个自定义的容器。

首先,让我们用我们的代码创建一个配置图。

apiVersion: v1
kind: ConfigMap
metadata:
  name: load-generator
data:
  writer.rb: |
    require 'bundler/inline'
    gemfile do
      source 'https://rubygems.org'
      gem 'mysql2'
    end

    require 'mysql2'
    client = Mysql2::Client.new(database: 'commerce')
    loop { client.query("select * from orders") }
    # more code follows...

然后进行部署,从我们的配置图中提取ruby:2.7 镜像并运行文件。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: load-generator
  name: load-generator
spec:
  replicas: 1
  selector:
    matchLabels:
      app: load-generator
  template:
    metadata:
      labels:
        app: load-generator
    spec:
      containers:
      - image: ruby:2.7
        name: ruby
        command: ["ruby"]
        args: ["/app/writer.rb"]
        volumeMounts:
          - name: load-generator
            mountPath: /app/writer.rb
            subPath: writer.rb
      restartPolicy: Always
      volumes:
        - name: load-generator
          configMap:
            name: load-generator

你只需要kubectl apply -f 上面的YAML,你就可以运行你的脚本了。