openshift 集群上的 Rhel 图像到 运行 shell 脚本
Rhel Image on openshift cluster to run shell script
我是 devops 和 openshift 的新手。我有一个简单的 .sh
脚本,它连接到下载网站并检查是否存在新版本,如果它收到 200
响应,它会下载文件。我需要知道是否可以 运行 这个脚本在每个 pod(在我的例子中是 1 个)上使用 cronjob 集中。如果有的话,有没有 cron 作业 运行 是 .sh
文件的例子(我遇到的那些只有 cronjob 的简单回显命令 运行)。
I need to know if it is possible to run this script using cronjob on each pod(1 in my case) centrally.
不,如果没有黑客攻击,这样的事情是不可能的,因为 Kubernetes pods 被设计为相对短暂的一次性实体。
如果您想更新 运行ning pods 中的一些二进制文件,我建议采用以下方法(由于您没有提供任何细节,我将展示如何使用 Nginx 部署示例实现您的目标):
1。创建一个 Kubernetes deployment for your app and add Init containers 部分(此处为 nginx 示例):
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: workdir
mountPath: /usr/share/nginx/html
initContainers:
- name: install
image: busybox
command:
- wget
- "-O"
- "/work-dir/index.html"
- http://time.is
volumeMounts:
- name: workdir
mountPath: "/work-dir"
dnsPolicy: Default
volumes:
- name: workdir
emptyDir: {}
此 init container
下载一些 html 文件,主 nginx 容器将此文件作为 index.html。
2。创建一个 k8s CronJob 以 运行 滚动更新部署:
apiVersion: batch/v1
kind: CronJob
metadata:
name: restart-deployment
spec:
concurrencyPolicy: Forbid
schedule: '0/5 * * * *'
jobTemplate:
spec:
backoffLimit: 2
activeDeadlineSeconds: 10
template:
spec:
serviceAccountName: restart-deployment
restartPolicy: Never
containers:
- name: kubectl
image: bitnami/kubectl
command:
- /bin/bash
- -c
- |
#place your new version check here, if true run:
kubectl rollout restart deployment/nginx-deployment
放置您的脚本来检查此 CronJob 中是否有新版本的二进制文件可用。
3。创建一个ServiceAccount、Role、RoleBinding 来让CronJob 操作k8s 集群:
apiVersion: v1
kind: ServiceAccount
metadata:
name: restart-deployment
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: restart-deployment
rules:
- apiGroups: ["apps", "extensions"]
resources: ["deployments"]
resourceNames: ["nginx-deployment"]
verbs: ["get", "patch", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: restart-deployment
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: restart-deployment
subjects:
- kind: ServiceAccount
name: restart-deployment
因此,您将拥有一个每 5 分钟检查一次的 k8s CronJob,如果是这样,运行s
kubectl rollout restart deployment/nginx-deployment
这将执行 Rolling Update ("RollingUpdate" is the default update strategy ).
新 pods 将使用最新下载的 init-containers 个文件。
我是 devops 和 openshift 的新手。我有一个简单的 .sh
脚本,它连接到下载网站并检查是否存在新版本,如果它收到 200
响应,它会下载文件。我需要知道是否可以 运行 这个脚本在每个 pod(在我的例子中是 1 个)上使用 cronjob 集中。如果有的话,有没有 cron 作业 运行 是 .sh
文件的例子(我遇到的那些只有 cronjob 的简单回显命令 运行)。
I need to know if it is possible to run this script using cronjob on each pod(1 in my case) centrally.
不,如果没有黑客攻击,这样的事情是不可能的,因为 Kubernetes pods 被设计为相对短暂的一次性实体。
如果您想更新 运行ning pods 中的一些二进制文件,我建议采用以下方法(由于您没有提供任何细节,我将展示如何使用 Nginx 部署示例实现您的目标):
1。创建一个 Kubernetes deployment for your app and add Init containers 部分(此处为 nginx 示例):
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: workdir
mountPath: /usr/share/nginx/html
initContainers:
- name: install
image: busybox
command:
- wget
- "-O"
- "/work-dir/index.html"
- http://time.is
volumeMounts:
- name: workdir
mountPath: "/work-dir"
dnsPolicy: Default
volumes:
- name: workdir
emptyDir: {}
此 init container
下载一些 html 文件,主 nginx 容器将此文件作为 index.html。
2。创建一个 k8s CronJob 以 运行 滚动更新部署:
apiVersion: batch/v1
kind: CronJob
metadata:
name: restart-deployment
spec:
concurrencyPolicy: Forbid
schedule: '0/5 * * * *'
jobTemplate:
spec:
backoffLimit: 2
activeDeadlineSeconds: 10
template:
spec:
serviceAccountName: restart-deployment
restartPolicy: Never
containers:
- name: kubectl
image: bitnami/kubectl
command:
- /bin/bash
- -c
- |
#place your new version check here, if true run:
kubectl rollout restart deployment/nginx-deployment
放置您的脚本来检查此 CronJob 中是否有新版本的二进制文件可用。
3。创建一个ServiceAccount、Role、RoleBinding 来让CronJob 操作k8s 集群:
apiVersion: v1
kind: ServiceAccount
metadata:
name: restart-deployment
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: restart-deployment
rules:
- apiGroups: ["apps", "extensions"]
resources: ["deployments"]
resourceNames: ["nginx-deployment"]
verbs: ["get", "patch", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: restart-deployment
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: restart-deployment
subjects:
- kind: ServiceAccount
name: restart-deployment
因此,您将拥有一个每 5 分钟检查一次的 k8s CronJob,如果是这样,运行s
kubectl rollout restart deployment/nginx-deployment
这将执行 Rolling Update ("RollingUpdate" is the default update strategy ).