K8s-应用管理(环境变量,Job)

这篇具有很好参考价值的文章主要介绍了K8s-应用管理(环境变量,Job)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

容器传参

构建一个测试镜像

FROM ubuntu
CMD ["sleep""5"]

运行这个容器发现睡眠了5秒以后退出,如果我们希望自己指定可以直接在docker后面加命令覆盖,写法如下

docker run sleeper sleep 10

上面的过程显得有些不合理,我们希望只传入参数,所以ENTRYPOINT出现了

FROM ubuntu
ENTRYPOINT ["sleep"]
#如果没有传参就会拼接这个到后面 如果传入了参数就会拼接我们传入的参数
CMD ["5"]
docker run sleeper #休眠5秒
docker run sleeper 10 #休眠10秒 覆盖 CMD ["5"] 并拼接在后面 也就是最后执行的是 sleep 10

Pod 传参

apiVersion: v1
kind: Pod
metadata:
  name: sleeper
spec:
  containers:
  - name: sleeper
    image: s09g/sleeper
    command: ["sleep"]
    args: ["10"]

pod文件使用command字段覆盖了入口点ENTRYPOINT指令,args字段覆盖了docker文件中的命令CMD指令。
不是command字段覆盖了docker文件中的cmd指令
生产环境中我们是不这样使用的,我们往往使用环境变量进行传参

环境变量

1 通过定义Env

apiVersion: v1
kind: Pod
metadata:
  name: ngix-demo
  labels:
    type: nginxservice
spec:
  containers:
  - name: ginxservice
    image: nginx
    env:
    - name: DEMO_GREETING
      value: "Hello from the environment"
    - name: DEMO_FAREWELL
      value: "Such a sweet sorrow"

当有Pod文件时,管理存储在文件中的环境数据会很复杂。除了使用plain text键值对格式指定环境变量的直接方法,还有使用ConfigMap和Secrets等方法来管理环境变量更加的方便。
2 使用ConfigMap
1)使用命令的方式
g给这个pod创建一个configmap 并且指定了两个键值

kubectl create configmap web-config --from-literal=UI_COLOR=red --from-literal=APP_MODE=prod

2)使用yml

  • 创建configMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: web-config
data:
  UI_COLOR: red
  APP_MODE: prod
#查看configMap
kubectl create -f config-map.yaml

kubectl get configmaps

kubectl describe configmaps
  • 配置pod
apiVersion: v1
kind: Pod
metadata:
  name: sample-webapp
labels:
  name: sample-webapp
spec:
  containers:
  - name: sample-webapp
    image: sample-webapp
    ports:
    - containerPort: 8080
    envFrom: #可以传入多个 每一个对应一个configMap
    - configMapRef:
        name: web-config

上面这个yml是整体配置,也可以指定单个值

apiVersion: v1
kind: Pod
metadata:
  name: sample-webapp
labels:
  name: sample-webapp
spec:
  containers:
  - name: sample-webapp
    image: sample-webapp
    ports:
    - containerPort: 8080
    env:
	- name: UI_COLOR
	  valueFrom:
	    configMapKeyRef:
	      name: web-config
	      key: UI_COLOR

还可以通过数据卷的方式进行注入

apiVersion: v1
kind: Pod
metadata:
  name: sample-webapp
labels:
  name: sample-webapp
spec:
  volumes:
  - name: web-config-volume
    configMap:
      name: web-config
  containers:
  - name: sample-webapp
    image: sample-webapp
    ports:
    - containerPort: 8080
    envFrom:
    - configMapRef:
        name: web-config

Secrets

ConfigMap以纯文本格式存储配置数据。如果需要通过用户名和密码连接数据库,虽然可以将主机名和用户名移到ConfigMap中,但ConfigMap不是存储密码的正确位置。和configMap的用法一样
1 命令的方式

kubectl create secret generic web-secret --from-literal=DB_User=root --from-literal=DB_Password=passwd #可以使用名文 命令行会自动编码

这里也可以使用--from-file指定文件路径文件路径存储用户名和密码

kubectl create secret generic db-user-pass \
  --from-file=username=./username.txt \
  --from-file=password=./password.txt

2 使用yml

apiVersion: v1
kind: Secret
metadata:
  name: webapp-secret
data:
  DB_User: cm9vdA==
  DB_Password: cGFzc3dk
#获取编码
echo -n "passwd" | base64 #可以得到编码以后的值
#创建secret
kubectl create –f secret-data.yaml
#获取secret
kubectl get secrets
kubectl describe secrets
#可以查看虽然是base64编码的但是也相当于是名文
kubectl get secret webapp-secret –o yaml
#我们可以进行解码 所以我们要注意不能向外透露这个 yaml文件
echo –n ‘cm9vdA==| base64 --decode

整个引入

apiVersion: v1
kind: Pod
metadata:
  name: sample-webapp
labels:
  name: sample-webapp
spec:
  containers:
  - name: sample-webapp
    image: sample-webapp
    ports:
    - containerPort: 8080
    envFrom:
    - secretRef:
        name: webapp-secret

也可以单独引用

env:
- name: DB_Password
  valueFrom:
    secretKeyRef:
      name: webapp-secret
      key: DB_Password

同样支持数据卷

volumes:
- name: webapp-secret-volume
  secret:
    secretName: webapp-secret

注意这个时候webapp-secret-volumes是两个文件,比如创建下面来两个文件

echo "my_psql_user" >> psql_user.txt
#创建一个用户
docker secret create psql_user psql_user.txt
#查看现在有的密匙
docker secret ls
#创建一个密码的密匙 这是另一种方式
echo "myDBpassWORD" | docker secret create psql_pass - #- 表示从终端输入的

Job

Job是为了解决如批处理、生成报告和发送电子邮件, 执行特定任务,然后完成。这些工作负载的生存期很短,执行一组任务, 然后退出。这样短时间运行任务,一般作为离线业务。离线业务的特点是必定会退出,不会无期限地运行下去,所以它的调度策略与在线业务存在很大的不同,需要考虑运行超时、状态检查、失败重试、获取计算结果等管理事项。
基础指令

#获取所有的job
kubectl get jobs
#查看JOB
kubectl get job error-job 
#查看日志
kubectl logs expr-job-kblhb 
#删除Job
kubectl delete job expr-job

1 离线任务,运行完直接退出

apiVersion: v1
kind: Pod
metadata:
  name: expr
spec:
  restartPolicy: Never #注意这个需要指定否则k8s会不停的拉起这个容器
  containers:
  - name: expr
    image: ubuntu
    command: ['expr', '3', '+', '2'] 

Kubernetes希望应用程序永远存在。pod的默认行为是尝试重新启动容器以使其保持运行。 Pod上有个重新启动策略restartPolicy,默认情况下设置为Always。所以pod总是退出后重新创建。这就是restartPolicy: Never的原因。 我们可以将这个属性设定为Never或OnFailure,来覆写这个行为。这样, Kubernetes在Job完成后不会重新启动容器。
2 定时任务

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: '*/1 * * * *'
  jobTemplate: #指定Job模板
    spec:
      template: #指定Jobpod模板
        spec:
          restartPolicy: Never
          containers:
          - image: busybox
            name: hello
            command: ["/bin/echo"]
            args: ["hello", "world"]
#查看任务
kubectl get cj

3 批处理文章来源地址https://www.toymoban.com/news/detail-823532.html

apiVersion: batch/v1
kind: Job
metadata:
  name: error-job
spec:
  completions: 3 #在这里指定下面几个比较重要的参数
  parallelism: 3
  template:
    spec:    
      restartPolicy: Never
      containers:
      - image: s09g/random-error
        name: error-job
  • activeDeadlineSeconds,设置 Pod 运行的超时时间
  • backoffLimit,设置 Pod 的失败重试次数
  • completions,Job 完成需要运行多少个 Success Pod,默认是 1 个
  • parallelism,与 completions 相关,表示允许并发运行的 Pod 数量,避免过多占用资源,不指定就是一个一个启动。

到了这里,关于K8s-应用管理(环境变量,Job)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【K8S系列】深入解析Job

    你只管努力,其他交给时间,时间会证明一切。 文章标记颜色说明: 黄色 :重要标题 红色 :用来标记结论 绿色 :用来标记一级论点 蓝色 :用来标记二级论点 Kubernetes (k8s) 是一个容器编排平台,允许在容器中运行应用程序和服务。今天学习一下Job-作业管理 希望这篇文章

    2023年04月15日
    浏览(44)
  • k8s搭建(一、环境配置与docker安装)

    天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 k8s搭建文章: k8s搭建(一、k8s环境配置与docker安装) k8s搭建(二、k8s组件安装) k8s搭

    2024年02月21日
    浏览(48)
  • k8s概念-Job和CronJob

    回到目录  对于非耐久性任务,比如压缩文件,任务完成后,pod需要结束运行,不需要pod继续保持在系统中,这个时候就要用到Job。 Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束 yaml文件 多次执行

    2024年02月14日
    浏览(39)
  • k8s控制器之job--第六弹Job的模式

    Kubernetes Job 对象可以用来支持 Pod 的并发执行,但是: Job 对象并非设计为支持需要紧密相互通信的Pod的并发执行,例如科学计算 Job 对象支持并发处理一系列相互独立但是又相互关联的工作任务,例如: 发送邮件 渲染页面 转码文件 扫描 NoSQL 数据库中的主键 其他 在一个复杂

    2024年02月10日
    浏览(45)
  • 17-k8s控制器资源-job控制

    job控制器:就是一次性任务的pod控制器,pod完成作业后不会重启,其重启策略是:Never         启动一个pod,执行完成一个事件,然后pod关闭;         事件:计算π的值,取前5000位; [root@k8s231 pi]# vim job.yaml apiVersion: batch/v1 kind: Job metadata:   name: job-pi spec:   #定义pod模板  

    2024年02月20日
    浏览(50)
  • Kubernetes(k8s)一次性任务:Job

    目录 一.系统环境 二.前言 三.Kubernetes Job简介 四.创建一次性任务job 4.1 创建一个简单任务的job 4.2 创建需要执行多次的job任务 五.测试job失败重试次数 六.job任务使用示例:计算圆周率 七.总结 本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。 服务器版本 docker软件版本 Kubern

    2024年02月07日
    浏览(38)
  • k8s中job与cronjob使用详解

    job,顾名思义就是任务,job的概念在很多框架中都有,而且实际业务场景中也使用非常广泛,比如大家熟悉的hadoop,客户端可以向集群提交一个job,然后集群根据一定的调度策略来处理这个job; k8s中的job,主要用于批量处理的业务场景,比如像那种短暂的一次性任务(每个任

    2024年01月17日
    浏览(45)
  • k8s控制器之job--第五弹Job的自动清理

    系统中已经完成的 Job 通常是不在需要里的,长期在系统中保留这些对象,将给 apiserver 带来很大的压力。如果通过更高级别的控制器(例如 CronJobs)来管理 Job,则 CronJob 可以根据其中定义的基于容量的清理策略(capacity-based cleanup policy)自动清理Job。 除了 CronJob 之外,TTL 机

    2024年02月11日
    浏览(44)
  • K8S应用流程安全(镜像安全 配置管理 访问安全)

    1.1.1 构建原则 学习目标 这一节,我们从 基础知识、原则解读、小结 三个方面来学习。 基础知识 k8s平台使用业务环境 需求 镜像的使用流程 Docker镜像加载 UnionFS 原则解读 构建样式 构建原则 实践原则 分层效果 功能效果 小结 1.1.2 Dockerfile实践 学习目标 这一节,我们从 基础

    2024年02月13日
    浏览(51)
  • 【云原生、k8s】管理Kubernetes应用搭建与部署

    官方提供Kubernetes部署3种方式 (一)minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。 官方文档:https://kubernetes.io/docs/setup/minikube/ (二)二进制包 从官方下载发行版的二进制包,手动部署每个组件,

    2024年01月21日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包