在 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: {}
我在 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: {}