Kubernetes中API资源对象Job;API资源对象CronJob;API资源对象Endpoint;API资源对象ConfigMap;API资源对象Secret
有时候K8s里的Pod需要访问外部资源,比如访问外部的MySQL服务,就可以定义一个对外资源的Ednpoint,然后再定义一个Service,就可以让K8s里面的其它Pod访问了。Endpoint(简称ep)资源是和Service一一对应的,也就是说每一个Service都会对应一个Endpoint。CronJob简称(cj)是一种周期运行的Pod,比如有些任务需要每天执行一次,就可以使用CronJ
Kubernetes中的API资源对象Job;API资源对象CronJob;API资源对象Endpoint;API资源对象ConfigMap;API资源对象Secret
API资源对象Job
可以理解成一次性运行后就退出的Pod。
先来生成一个YAML文件:
kubectl create job job-demo --image=busybox --dry-run=client -o yaml > job-demo.yaml
vi job-demo.yaml ##编辑此配置
apiVersion: batch/v1
kind: Job
metadata:
name: job-demo
spec:
template: ##模板,基于此模板来创建pod,它用来定义pod的属性,比如container
spec:
restartPolicy: OnFailure ##定义Pod运行失败时的策略,可以是OnFailure和Never,其中OnFailure表示失败的话需要重启容器,Never表示失败的话不重启容器,而是重新生成一个新的Pod
containers:
- image: busybox
name: job-demo
command: ["/bin/echo"]
args: ["hellow", "world"]
创建Job
kubectl apply -f job-demo.yaml
查看Job
kubectl get job,pod
可以看到该容器运行完成后状态就变成了Completed。
对于Job,还有几个特殊字段:
- activeDeadlineSeconds,设置 Pod 运行的超时时间。
- backoffLimit,设置 Pod 的失败重试次数。
- completions,Job 完成需要运行多少个 Pod,默认是 1 个。
- parallelism,它与 completions 相关,表示允许并发运行的 Pod 数量,避免过多占用资源。
vi myjob.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: sleep-job
spec:
activeDeadlineSeconds: 15 #15s就超时
backoffLimit: 2 #失败重试2次就放弃
completions: 4 #要运行4个pod,才算完成
parallelism: 2 #允许并发运行2个pod
template:
spec:
restartPolicy: Never
containers:
- image: busybox
name: echo-job
imagePullPolicy: IfNotPresent
command:
- sh
- -c
- sleep 10; echo done
创建job,并查看job情况
kubectl apply -f myjob.yaml ; kubectl get pod -w
API资源对象CronJob
CronJob简称(cj)是一种周期运行的Pod,比如有些任务需要每天执行一次,就可以使用CronJob。
先来生成一个YAML文件:
kubectl create cj cj-demo --image=busybox --schedule="" --dry-run=client -o yaml > cj-demo.yaml
vi job-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"]
运行并查看
kubectl apply -f cj-demo.yaml
kubectl get cj
kubectl get pod
API资源对象Endpoint
Endpoint(简称ep)资源是和Service一一对应的,也就是说每一个Service都会对应一个Endpoint。
kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.222.131:6443 3d5h
ngx-svc 10.18.235.159:80,10.18.236.173:80 21h
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.15.0.1 <none> 443/TCP 3d5h
ngx-svc ClusterIP 10.15.41.113 <none> 80/TCP 21h
Endpoint可以理解成Service后端对应的资源。
有时候K8s里的Pod需要访问外部资源,比如访问外部的MySQL服务,就可以定义一个对外资源的Ednpoint,然后再定义一个Service,就可以让K8s里面的其它Pod访问了。
vim testep.yaml
apiVersion: v1
kind: Endpoints
metadata:
name: external-mysql
subsets:
- addresses:
- ip: 192.168.222.128
ports:
- port: 3306
---
apiVersion: v1
kind: Service ##注意,该service里并不需要定义selector,只要Service name和Endpoint name保持一致即可
metadata:
name: external-mysql
spec:
ports:
- port: 3306
应用YAML文件
kubectl apply -f testep.yaml
测试
kubectl get ep
kubectl get svc
API资源对象ConfigMap
ConfigMap(简称cm)用来存储配置信息,比如服务端口、运行参数、文件路径等等。
直接上示例吧:
vi mycm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mycm
data:
DATABASE: 'db'
USER: 'wp'
PASSWORD: '123456'
ROOT_PASSWORD: '123456'
创建cm
kubectl apply -f mycm.yaml
查看
kubectl get cm
kubectl describe cm mycm
在其它pod里引用ConfigMap
vi testpod.yaml
apiVersion: v1
kind: Pod
metadata:
name: testpod
labels:
app: testpod
spec:
containers:
- image: mariadb:10
name: maria
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
envFrom: ##将cm里的字段全部导入该pod
- prefix: 'MARIADB_' ##将导入的字段名前面自动加上前缀,例如MARIADB_DATABASE, MARIADB_USER
configMapRef: ##定义哪个cm
name: mycm
验证:
kubectl exec -it testpod -- bash ##进入pod,查看变量$MARIADB_DATABASE
API资源对象Secret
Secret和cm的结构和用法很类似,不过在 K8s里Secret 对象又细分出很多类,比如:
- 访问私有镜像仓库的认证信息
- 身份识别的凭证信息
- HTTPS 通信的证书和私钥
- 一般的机密信息(格式由用户自行解释)
前几种我们现在暂时用不到,所以就只使用最后一种。
YAML示例:
vi mysecret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
data:
user: YW1pbmc= ## echo -n "aming"|base64
passwd: bGludXgxMjM= ## echo -n "linux123"|base64
查看:
kubectl apply -f mysecret.yaml
kubectl get secret
kubectl describe secret mysecret
在其它pod里引用Secret
vi testpod2.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查看变量值
更多推荐
所有评论(0)