在Kubernetes中传递Docker容器的运行参数

时间:2017-08-23 16:31:26

标签: docker kubernetes rancher

我在RancherOS v1.0.3上运行了两个容器(GitLab和PostgreSQL)。我想让它们成为Kubernetes集群的一部分。

[rancher@rancher-agent-1 ~]$ cat postgresql.sh
docker run --name gitlab-postgresql -d \
    --env 'POSTGRES_DB=gitlabhq_production' \
    --env 'POSTGRES_USER=gitlab' --env 'POSTGRES_PASSWORD=password' \
    --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \
    postgres:9.6-2


[rancher@rancher-agent-1 ~]$ cat gitlab.sh
docker run --name gitlab -d \
    --link gitlab-postgresql:postgresql \
    --publish 443:443 --publish 80:80 \
    --env 'GITLAB_PORT=80' --env 'GITLAB_SSH_PORT=10022' \
    --env 'GITLAB_SECRETS_DB_KEY_BASE=64-char-key-A' \
    --env 'GITLAB_SECRETS_SECRET_KEY_BASE=64-char-key-B' \
    --env 'GITLAB_SECRETS_OTP_KEY_BASE=64-char-key-C' \
    --volume /srv/docker/gitlab/gitlab:/home/git/data \
    sameersbn/gitlab:9.4.5

查询:
1)我对如何使用YAML文件配置pod,复制控制器等有所了解,但我不知道如何将上述docker run参数传递给Kubernetes,以便它可以将相同的参数应用于图像正确。

2)我不确定是否还需要在Kubernetes中传递--link参数(在上面的gitlab.sh中使用)。虽然我目前正在单个主机上部署这两个容器,但稍后将创建每个容器的集群(PostgreSQL和GitLab),所以只想确认Kubernetes是否会自动处理主机间通信。如果没有,那么可以探索哪些选项?

1 个答案:

答案 0 :(得分:4)

您应首先尝试将运行语句表示为docker-compose.yml文件。这很简单,它会变成下面的

version: '3'

services:
  postgresql:
    image: postgres:9.6-2
    environment:
      - "POSTGRES_DB=gitlabhq_production"
      - "POSTGRES_USER=gitlab"
      - "POSTGRES_PASSWORD=password"
    volumes:
      - /srv/docker/gitlab/postgresql:/var/lib/postgresql
  gitlab:
    image: sameersbn/gitlab:9.4.5
    ports:
      - "443:443"
      - "80:80"
    environment:
      - "GITLAB_PORT=80"
      - "GITLAB_SSH_PORT=10022"
      - "GITLAB_SECRETS_DB_KEY_BASE=64-char-key-A"
      - "GITLAB_SECRETS_SECRET_KEY_BASE=64-char-key-B"
      - "GITLAB_SECRETS_OTP_KEY_BASE=64-char-key-C"
    volumes:
      - /srv/docker/gitlab/gitlab:/home/git/data

现在有一个来自kompose.io的惊人工具名kompose,它可以为您完成转换部分。如果转换上述内容,您将获得相关文件

$ kompose convert -f docker-compose.yml
WARN Volume mount on the host "/srv/docker/gitlab/gitlab" isn't supported - ignoring path on the host
WARN Volume mount on the host "/srv/docker/gitlab/postgresql" isn't supported - ignoring path on the host
INFO Kubernetes file "gitlab-service.yaml" created
INFO Kubernetes file "postgresql-service.yaml" created
INFO Kubernetes file "gitlab-deployment.yaml" created
INFO Kubernetes file "gitlab-claim0-persistentvolumeclaim.yaml" created
INFO Kubernetes file "postgresql-deployment.yaml" created
INFO Kubernetes file "postgresql-claim0-persistentvolumeclaim.yaml" created

现在你必须根据kubernetes修复音量安装部分。这完成了80%的工作,你只需要弄清楚剩下的20%

这是一张包含所有生成文件的猫,因此您可以看到生成了哪种文件

==> gitlab-claim0-persistentvolumeclaim.yaml <==
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: gitlab-claim0
  name: gitlab-claim0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
status: {}

==> gitlab-deployment.yaml <==
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: gitlab
  name: gitlab
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: gitlab
    spec:
      containers:
      - env:
        - name: GITLAB_PORT
          value: "80"
        - name: GITLAB_SECRETS_DB_KEY_BASE
          value: 64-char-key-A
        - name: GITLAB_SECRETS_OTP_KEY_BASE
          value: 64-char-key-C
        - name: GITLAB_SECRETS_SECRET_KEY_BASE
          value: 64-char-key-B
        - name: GITLAB_SSH_PORT
          value: "10022"
        image: sameersbn/gitlab:9.4.5
        name: gitlab
        ports:
        - containerPort: 443
        - containerPort: 80
        resources: {}
        volumeMounts:
        - mountPath: /home/git/data
          name: gitlab-claim0
      restartPolicy: Always
      volumes:
      - name: gitlab-claim0
        persistentVolumeClaim:
          claimName: gitlab-claim0
status: {}

==> gitlab-service.yaml <==
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: gitlab
  name: gitlab
spec:
  ports:
  - name: "443"
    port: 443
    targetPort: 443
  - name: "80"
    port: 80
    targetPort: 80
  selector:
    io.kompose.service: gitlab
status:
  loadBalancer: {}

==> postgresql-claim0-persistentvolumeclaim.yaml <==
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: postgresql-claim0
  name: postgresql-claim0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
status: {}

==> postgresql-deployment.yaml <==
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: postgresql
  name: postgresql
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: postgresql
    spec:
      containers:
      - env:
        - name: POSTGRES_DB
          value: gitlabhq_production
        - name: POSTGRES_PASSWORD
          value: password
        - name: POSTGRES_USER
          value: gitlab
        image: postgres:9.6-2
        name: postgresql
        resources: {}
        volumeMounts:
        - mountPath: /var/lib/postgresql
          name: postgresql-claim0
      restartPolicy: Always
      volumes:
      - name: postgresql-claim0
        persistentVolumeClaim:
          claimName: postgresql-claim0
status: {}

==> postgresql-service.yaml <==
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: postgresql
  name: postgresql
spec:
  clusterIP: None
  ports:
  - name: headless
    port: 55555
    targetPort: 0
  selector:
    io.kompose.service: postgresql
status:
  loadBalancer: {}