2.12API资源对象Job

K8s中的Job可以理解成一次性运行后就退出的Pod。 它主要用于运行一次性任务,这些任务在完成后即退出,不会持续运行。例如,数据备份、定时清理等任务都可以使用 Job 来管理.

创建job示例的yaml文件:

kubectl create job job-demo --image=busybox  --dry-run=client  -o yaml > job-demo.yaml

[root@master01 app]# cat job-demo.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  creationTimestamp: null
  name: job-demo
spec:
  template:
    metadata:
      creationTimestamp: null
    spec:
      containers:
      - image: busybox
        name: job-demo
        command: ["/bin/echo"]
        args: ["hello  world!"]
        resources: {}
      restartPolicy: Never
status: {}

2.13API资源对象CronJob

CronJob(简称cj)是一种周期运行的Pod,比如有些任务需要每天执行一次,就可以使用CronJob。

使用命令创建yaml文件:

kubectl create cj cj-demo --image=busybox --schedule="" --dry-run=client  -o yaml > cj-demo.yaml

[root@master01 app]# cat cj-demo.yaml 
apiVersion: batch/v1
kind: CronJob
metadata:
  name: cj-demo
spec:
  schedule: '*/1 * * * *'
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
          - image: busybox
            name: cj-demo
            imagePullPolicy: IfNotPresent
            command: ["/bin/echo"]
            args: ["hello", "world"]

2.14API资源对象Endpoint

Endpoint(简称ep)资源是和Service一一对应的,也就是说每一个Service都会对应一个Endpoint。

kubernetes-2.2_API

apiVersion: v1
kind: Endpoints
metadata:
  name: external-mysql
subsets: ## 这里定义外部资源的IP和port
  - addresses:  
    - ip: 192.168.222.31
    ports:
      - port: 3306
---
apiVersion: v1
kind: Service  ##注意,该service里并不需要定义selector,只要Service name和Endpoint name保持一致即可
metadata:
  name: external-mysql
spec:
  ports:
    - port: 3306

说明: 定义完Endpoint同时也要定义一个对应的Service才能使用此Endpoint。此时k8s里的内部Pod只要访问external-mysql这个svc即可访问到192.168.222.31:3306。

创建Endpoint

kubectl apply -f testep.yaml

查看Endpoint

kubectl get  ep,svc

删除ep

kubectl delete -f testep.yaml

2.15API资源对象ConfigMap

在 K8s 中,ConfigMap(简称cm) 是一种用于存储非敏感信息(如配置文件、环境变量、运行参数、文件路径等)的 API 资源对象。它允许将配置数据与应用程序分离,以实现更好的可维护性和可移植性.

支持动态更新:在 Kubernetes 1.14 版本之后,ConfigMap 支持动态更新,即可以在不重启 Pod 的情况下更新 ConfigMap 中的数据,从而使得应用程序能够即时获取最新的配置信息

这个configmap一般生产上面以nginx的配置文件比较常见:

kubectl create cm ng-cm  --from-file=./nginx.conf  -n  namespace-test;

创建cm

kubectl apply -f mycm.yaml

查看cm

kubectl get cm

kubectl describe cm mycm

2.16API资源对象Secret

在 K8s 中,Secret 是一种用于存储敏感信息的 API 资源对象。它类似于 ConfigMap,但用于存储密钥、密码、令牌等敏感数据,而不是一般的配置信息。

加密存储:与 ConfigMap 不同,Secret 中的数据是加密存储的,因此提供了一定程度的安全性,可以减少敏感数据泄露的风险。

动态更新:与 ConfigMap 类似,Secret 也支持动态更新,在不重启 Pod 的情况下更新 Secret 中的数据,使得应用程序能够即时获取最新的敏感信息。

[root@master01 app]# cat mysecret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: mysecret

data:
  user: YW1pbmc=   ## echo -n "aming"|base64
  passwd: bGludXgxMjM=  ## echo -n "linux123"|base64
[root@master01 app]# cat mysecret-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: testpod2

spec:
  containers:
  - image: busybox
    name: busy
    imagePullPolicy: IfNotPresent
    command: ["/bin/sleep", "300"]

    env:
      - name: USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: user
      - name: PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: passwd

验证:

kubectl exec -it testpod2 -- sh  ##进去后可以 echo $PASSWORD查看变量值

kubernetes-2.2_API_02