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

Passing Docker container's run parameters in Kubernetes

我在 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 文件提供 pods、复制控制器等有一些想法,但我不确定如何将上述 docker run 参数传递给 Kubernetes,以便它可以将相同的应用于图片正确。

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

您应该首先尝试将您的 运行 语句表示到 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 来自 kompose.io,它可以为您完成转换部分。如果你转换以上你会得到相关文件

$ 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: {}