Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Taipei.rb 像 Capistrano 一樣用 Kubernetes 部署 Rails

蒼時弦や
February 14, 2018

Taipei.rb 像 Capistrano 一樣用 Kubernetes 部署 Rails

蒼時弦や

February 14, 2018
Tweet

More Decks by 蒼時弦や

Other Decks in Programming

Transcript

  1. wc -l vendor/template/* 33 vendor/template/cronjob.yaml 70 vendor/template/app.yaml 62 vendor/template/app_admin.yaml 49

    vendor/template/elasticsearch.yaml 41 vendor/template/memcached.yaml 59 vendor/template/mysql.yaml 49 vendor/template/redis.yaml 363 total
  2. apiVersion: extensions/v1beta1 kind: Deployment metadata: name: rails labels: app: web

    spec: replicas: 1 template: metadata: labels: app: web spec: containers: - name: rails image: example/rails ports: - containerPort: 3000
  3. apiVersion: extensions/v1beta1 kind: Deployment metadata: name: rails labels: app: web

    spec: replicas: 1 template: metadata: labels: app: web spec: containers: - name: rails image: example/rails ports: - containerPort: 3000
  4. apiVersion: extensions/v1beta1 kind: Deployment metadata: name: rails labels: app: web

    spec: replicas: 1 template: metadata: labels: app: web spec: containers: - name: rails image: example/rails ports: - containerPort: 3000
  5. apiVersion: extensions/v1beta1 kind: Deployment metadata: name: rails labels: app: web

    spec: replicas: 1 template: metadata: labels: app: web spec: containers: - name: rails image: example/rails ports: - containerPort: 3000
  6. apiVersion: extensions/v1beta1 kind: Deployment metadata: name: rails labels: app: web

    spec: replicas: 1 template: metadata: labels: app: web spec: containers: - name: rails image: example/rails ports: - containerPort: 3000
  7. apiVersion: v1 kind: Service metadata: name: web labels: app: web

    spec: type: LoadBalancer loadBalancerIP: 172.31.1.10 ports: - port: 80 targetPort: 3000 selector: app: web
  8. apiVersion: v1 kind: Service metadata: name: web labels: app: web

    spec: type: LoadBalancer loadBalancerIP: 172.31.1.10 ports: - port: 80 targetPort: 3000 selector: app: web
  9. apiVersion: v1 kind: Service metadata: name: web labels: app: web

    spec: type: NodePort ports: - port: 80 targetPort: 3000 selector: app: web
  10. deployment :web do label :app, :web template do label :app,

    :web container :web do image fetch(:image, 'elct9620/example') port 3000 env 'DATABASE_URL', 'postgres://...' end end end service :web do select :app, :web node_port port 80, 3000 end
  11. config :example do file './config/application.yaml' end deployment :web do label

    :app, :ruby template do label :app, :ruby container :web do # ... config_file 'application.yaml', path: '/usr/src/app/config', from: :config end volume :config do config :configs, 'application.yaml' => 'application.yaml' end end end