kubernetes - Kubernetes 作业和部署
问题描述
我可以在单个配置文件/操作中运行作业和部署吗?部署将在哪里等待作业完成并检查它是否成功,以便继续部署?
解决方案
根据您提供的信息,我相信您可以使用名为 InitContainer 的 Kubernetes 功能实现您的目标:
初始化容器与普通容器完全一样,除了:
- 初始化容器总是运行到完成。
- 每个 init 容器必须在下一个启动之前成功完成。
如果 Pod 的 init 容器失败,Kubernetes 会反复重启 Pod,直到 init 容器成功。但是,如果 Pod 有一个
restartPolicy
Never,Kubernetes 不会重启 Pod。
- 我将创建一个
initContainer
with abusybox
来运行命令 linux 以等待服务mydb
运行,然后再继续部署。
重现步骤:
- 创建一个部署,initContainer
其中将运行在进行部署之前需要完成的作业:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: my-app
name: my-app
spec:
replicas: 2
selector:
matchLabels:
run: my-app
template:
metadata:
labels:
run: my-app
spec:
restartPolicy: Always
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]
在这个领域可以使用多种命令,你只需要选择一个包含你需要的二进制文件的 docker 镜像(包括你的sequelize
工作)
- 现在让我们应用它来查看部署的状态:
$ kubectl apply -f my-app.yaml
deployment.apps/my-app created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-app-6b4fb4958f-44ds7 0/1 Init:0/1 0 4s
my-app-6b4fb4958f-s7wmr 0/1 Init:0/1 0 4s
pod 处于Init:0/1
等待 init 容器完成的状态。- 现在让我们创建 initcontainer 在完成任务之前等待运行的服务:
apiVersion: v1
kind: Service
metadata:
name: mydb
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9377
- 我们将应用它并监控 pod 中的变化:
$ kubectl apply -f mydb-svc.yaml
service/mydb created
$ kubectl get pods -w
NAME READY STATUS RESTARTS AGE
my-app-6b4fb4958f-44ds7 0/1 Init:0/1 0 91s
my-app-6b4fb4958f-s7wmr 0/1 Init:0/1 0 91s
my-app-6b4fb4958f-s7wmr 0/1 PodInitializing 0 93s
my-app-6b4fb4958f-44ds7 0/1 PodInitializing 0 94s
my-app-6b4fb4958f-s7wmr 1/1 Running 0 94s
my-app-6b4fb4958f-44ds7 1/1 Running 0 95s
^C
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/my-app-6b4fb4958f-44ds7 1/1 Running 0 99s
pod/my-app-6b4fb4958f-s7wmr 1/1 Running 0 99s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mydb ClusterIP 10.100.106.67 <none> 80/TCP 14s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-app 2/2 2 2 99s
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-app-6b4fb4958f 2 2 2 99s
如果您需要帮助将其应用于您的环境,请告诉我。
推荐阅读
- c++ - decltype(auto) 类型推导:return x vs. return (x)
- firebase - Firebase 托管 - 404 index.html - 想要指向 index.js
- python - Django - 在脚本中更改模型字段并迁移
- python - 更新 conda 会导致降级和取代软件包
- pytorch - 为自定义模型加载 state_dict 时出错
- sql - 使用递归查询从表中获取电子邮件线程
- java - Java中的MAC ISO 9797-1 MAC算法3和填充方法1?
- java - 如何将 html select 中的变量作为 PathVariable 传递?
- kong - 您如何查看 Kong 正在制作的请求详细信息,包括标头、主机?
- reactjs - 如何读取事件监听器中的状态?