【问题标题】:Expose container in Kubernetes在 Kubernetes 中公开容器
【发布时间】:2020-07-03 21:09:01
【问题描述】:
我想创建特定版本的 redis 用作缓存。任务:
- Pod 必须在 Web 命名空间中运行
- Pod 名称应该是缓存
- 镜像名称是 lfcccnf/redis,带有 4.0-alpine 标签
- 暴露端口 6379
- pod 需要在完成后运行
这是我的步骤:
k create ns web
k -n web run cache --image=lfccncf/redis:4.0-alpine --port=6379 --dry-run=client-o yaml > pod1.yaml
- vi pod1.yaml
- 吊舱看起来像这样
-
k create -f pod1.yaml
当未定义公开服务名称时,此命令是否可以完全完成任务?
k expose pod cache --port=6379 --target-port=6379。
使用如下命令保持 pod 运行的最佳方法是:["/bin/sh", "-ec", "sleep 1000"] 吗?
【问题讨论】:
-
首先,请查看this 文章,并尝试将您的代码示例发布为代码示例而不是屏幕截图。您只需粘贴代码,选择它并按 Ctrl+K。它更具可读性。其次,您的实际问题是什么?好的做法是在标题中明确表述。您为什么想在 Pod 已经正常运行时做一些额外的事情来保持它的运行?你试过了吗?我做到了。并且可以确认从这个镜像创建的 pod 运行良好,不需要任何额外的命令来运行。
标签:
kubernetes
kubernetes-pod
【解决方案1】:
您不应该使用sleep 来保持redis pod 运行。只要 redis 进程在容器中运行,pod 就会运行。
【解决方案2】:
最好的方法是从https://hub.helm.sh/charts/stable/redis-ha 获取稳定的舵图。执行 helm pull 并根据需要修改值。
出于各种原因,应将 Redis 定义为 Statefulset。你也可以做一个
mkdir my-redis
helm fetch --untar --untardir . 'stable/redis' #makes a directory called redis
helm template --output-dir './my-redis' './redis' #redis dir (local helm chart), export to my-redis dir
如果你愿意,请使用Kustomise。
当您看到稳定图表中有多少代码时,您会注意到 redis 部署定义并不是那么简单。
然后您可以通过各种方式公开它,但通常您只需要在集群内进行访问。
如果您需要一种从集群外部快速测试的方法或将其用作开发环境,请查看官方方法。