刚读完Nigel Poulton的 Kubernetes书,但是我对服务有些困惑。
是否可以以某种方式将服务添加到部署清单中?还是必须自行发布服务?部署的全部目的不是为了指定应用程序运行所需的所有内容吗?
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: hello-deploy
spec:
replicas: 10
selector:
matchLabels:
app: hello-world
minReadySeconds: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-pod
image: nigelpoulton/k8sbook : latest
ports:
- containerPort: 8080
答案 0 :(得分:5)
它们是不同的对象,您必须分别提交它们(HTTP POST,kubectl apply
,...)。
您可以采取一些技巧来最大程度地减少这种影响:
您可以使用multi-document YAML file并将其作为单个内容提交,例如
---
apiVersion: apps/v1
kind: Deployment
...
---
apiVersion: v1
kind: Service
...
有一个未记录的kind: List
,可以嵌入多个对象
apiVersion: v1
kind: List
items:
- apiVersion: apps/v1
kind: Deployment
...
- apiVersion: v1
kind: Service
...
您可以使用更高级别的部署管理器,例如Helm,该管理器使您可以将每个对象保留在单独的文件中,但可以在单个命令中进行部署。
可能不幸的是,两个Kubernetes对象的名称与它们的普通英语含义不同(部署未涵盖部署整个应用程序的所有步骤或部分;服务只是IP / DNS指针而不是服务实现),但事实就是这样。当它会消除歧义时,我倾向于大写Kubernetes对象名称。
答案 1 :(得分:0)
部署的全部目的不是为了指定应用程序运行所需的一切吗?
“部署”的整个目的是管理pod /复制包的部署,包括复制,缩放,滚动更新,回滚。 DeploymentController是主节点控制器管理器的一部分,它可以确保当前状态始终与所需状态匹配。
该服务是否必须单独发布?
如果您熟悉负载均衡器术语,则“服务”是前端,而“ Pods”是其后端。由于它是前端,因此Service会将请求转发到其后端(pod)。