我应该如何为 Kubernetes 重写 docker-compose.yaml?
How should I rewrite docker-compose.yaml for Kubernetes?
我对 K8s 很陌生,所以我从来没有用过它。但是我已经熟悉了 nodes/pods 的概念。我知道 minikube 是 debug/etc 的本地 k8s 引擎,我应该通过 kubectl 工具与任何 k8s 引擎交互。现在我的问题是:
在我的本地 minikube 实例和生产 AWS/etc 实例上启动相同的配置是否保证结果相同?
如何为我的项目设置持续部署?现在我已经配置了 CI 将测试代码的图像推送到带有 :latest
标签的 docker 集线器。但我希望它们在不中断正常运行时间的情况下以滚动更新模式自动部署。
如果我应该执行正确的配置以使其在任何集群上运行,那会很棒吗?我不想保存 docker-compose 的符号并使用 kompose。我想在 k8s 上下文中正确设置它。
我当前的 docker-compose.yml 是(现在可以从 dockerhub 获得 django 和 React 服务):
version: "3.5"
services:
nginx:
build:
context: .
dockerfile: Dockerfile.nginx
restart: always
command: bash -c "service nginx start && tail -f /dev/null"
ports:
- 80:80
- 443:443
volumes:
- /mnt/wts_new_data_volume/static:/data/django/static
- /mnt/wts_new_data_volume/media:/data/django/media
- ./certs:/etc/letsencrypt/
- ./misc/ssl/server.crt:/etc/ssl/certs/server.crt
- ./misc/ssl/server.key:/etc/ssl/private/server.key
- ./misc/conf/nginx.conf:/etc/nginx/nginx.conf:ro
- ./misc/conf/passports.htaccess:/etc/passports.htaccess:ro
depends_on:
- react
redis:
restart: always
image: redis:latest
privileged: true
command: redis-server
celery:
build:
context: backend
command: bash -c "celery -A project worker -B -l info"
env_file:
- ./misc/.env
depends_on:
- redis
django:
build:
context: backend
command: bash -c "/code/manage.py collectstatic --no-input && echo donecollectstatic && /code/manage.py migrate && bash /code/run/daphne.sh"
volumes:
- /mnt/wts_new_data_volume/static:/data/django/static
- /mnt/wts_new_data_volume/media:/data/django/media
env_file:
- ./misc/.env
depends_on:
- redis
react:
build:
context: frontend
depends_on:
- django
简短的回答是肯定的,你可以用 docker 复制你拥有的东西-用 K8s 组合。
这取决于您的基础架构。例如,如果您的 AWS 部署中有一个外部 LoadBalancer,它在您的本地部署中就不会相同。
您可以采用 rolling updates (this typically works with stateless services). You can also take advantage of a GitOps 类型的方法。
docker-compose 表示法与 K8s 不同,所以是的,您必须将其转换为 Kubernetes 对象:Pods、Deployments、Secrets、ConfigMaps、Volumes等等,在大多数情况下,基本对象可以在任何集群上运行,但总会有一些与集群的物理特性相关的特定对象(即存储卷、负载均衡器等)。 Kubernetes docs 非常全面,非常有帮助。
我对 K8s 很陌生,所以我从来没有用过它。但是我已经熟悉了 nodes/pods 的概念。我知道 minikube 是 debug/etc 的本地 k8s 引擎,我应该通过 kubectl 工具与任何 k8s 引擎交互。现在我的问题是:
在我的本地 minikube 实例和生产 AWS/etc 实例上启动相同的配置是否保证结果相同?
如何为我的项目设置持续部署?现在我已经配置了 CI 将测试代码的图像推送到带有
:latest
标签的 docker 集线器。但我希望它们在不中断正常运行时间的情况下以滚动更新模式自动部署。如果我应该执行正确的配置以使其在任何集群上运行,那会很棒吗?我不想保存 docker-compose 的符号并使用 kompose。我想在 k8s 上下文中正确设置它。
我当前的 docker-compose.yml 是(现在可以从 dockerhub 获得 django 和 React 服务):
version: "3.5"
services:
nginx:
build:
context: .
dockerfile: Dockerfile.nginx
restart: always
command: bash -c "service nginx start && tail -f /dev/null"
ports:
- 80:80
- 443:443
volumes:
- /mnt/wts_new_data_volume/static:/data/django/static
- /mnt/wts_new_data_volume/media:/data/django/media
- ./certs:/etc/letsencrypt/
- ./misc/ssl/server.crt:/etc/ssl/certs/server.crt
- ./misc/ssl/server.key:/etc/ssl/private/server.key
- ./misc/conf/nginx.conf:/etc/nginx/nginx.conf:ro
- ./misc/conf/passports.htaccess:/etc/passports.htaccess:ro
depends_on:
- react
redis:
restart: always
image: redis:latest
privileged: true
command: redis-server
celery:
build:
context: backend
command: bash -c "celery -A project worker -B -l info"
env_file:
- ./misc/.env
depends_on:
- redis
django:
build:
context: backend
command: bash -c "/code/manage.py collectstatic --no-input && echo donecollectstatic && /code/manage.py migrate && bash /code/run/daphne.sh"
volumes:
- /mnt/wts_new_data_volume/static:/data/django/static
- /mnt/wts_new_data_volume/media:/data/django/media
env_file:
- ./misc/.env
depends_on:
- redis
react:
build:
context: frontend
depends_on:
- django
简短的回答是肯定的,你可以用 docker 复制你拥有的东西-用 K8s 组合。
这取决于您的基础架构。例如,如果您的 AWS 部署中有一个外部 LoadBalancer,它在您的本地部署中就不会相同。
您可以采用 rolling updates (this typically works with stateless services). You can also take advantage of a GitOps 类型的方法。
docker-compose 表示法与 K8s 不同,所以是的,您必须将其转换为 Kubernetes 对象:Pods、Deployments、Secrets、ConfigMaps、Volumes等等,在大多数情况下,基本对象可以在任何集群上运行,但总会有一些与集群的物理特性相关的特定对象(即存储卷、负载均衡器等)。 Kubernetes docs 非常全面,非常有帮助。