⭐️ RC
1️⃣ 查看版本
kubect api-resource
或
kubect explain rs
2️⃣ 编写 Yaml
文档
[root@master ~]# vim pod/rc.yaml
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
clusterName: nginx ##集群名
name: test ##rs的名字
spec:
replicas: 5 ##期望副本数
selector: ## 标签匹配 它要和下面的pod标签一样才能匹配,如果为空则一pod模板为主
matchLabels: ##标签
app: web
template: ##pod模板就和kind: Pod 一样
metadata:
labels:
app: web
spec:
containers:
- name: webapp
image: harbor.tanc.com/library/nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
protocol: TCP
//指向
[root@master ~]# kubectl create -f pod/rc.yaml
rs
并不会按照自己的标签来管理,而会按照selector
来管理
3️⃣ 查看
[root@master ~]# kubectl get pod --show-labels ##查看标签
NAME READY STATUS RESTARTS AGE LABELS
test-9pdcc 1/1 Running 0 146m app=web
test-fpzwh 1/1 Running 0 146m app=web
test-g8g86 1/1 Running 0 146m app=web
test-ljzgp 1/1 Running 0 146m app=web
test-xw6m6 1/1 Running 0 146m app=web
4️⃣ 修改一下标签
[root@master ~]# kubectl label pod test-9pdcc app=web1 --overwrite=true
pod/test-9pdcc labeled
overwrite
如果为false
则不允许覆盖标签,true
则允许
在来查看一下有什么不同
[root@master ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
test-7fjv6 1/1 Running 0 4s app=web
test-9pdcc 1/1 Running 0 149m app=web1
test-fpzwh 1/1 Running 0 149m app=web
test-g8g86 1/1 Running 0 149m app=web
test-ljzgp 1/1 Running 0 149m app=web
test-xw6m6 1/1 Running 0 149m app=web
5️⃣ 可以发现是多了一个pod,因为rs需要匹配标签,如果标签改了rs就匹配不到了,Pod就为2个了,没有达到期望值,他就会增加在增加一个Pod。
rs对pod副本数目的监控大多都是基于标签来管理的
6️⃣ 试一下把rs删除
[root@master ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
test 5 5 5 157m
[root@master ~]# kubectl delete rs test
replicaset.extensions "test" deleted
再来查看 pod
,发现 pod
,都在被删除中,可以看见是由rs管理的就会删除
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-9pdcc 1/1 Running 0 157m
test-g8g86 0/1 Terminating 0 157m
test-ljzgp 0/1 Terminating 0 157m
⭐️ Deployment
1️⃣ 编写yaml文档
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: http-delpoyment
spec:
replicas: 3
template:
metadata:
name: httpd
labels:
app: web
spec:
containers:
- name: webapp
image: harbor.tanc.com/library/httpd
imagePullPolicy: IfNotPresent
ports:
- protocol: TCP
containerPort: 80
2️⃣ 运行
[root@master ~]# kubectl apply -f pod/deployment.yaml ----record=true
deployment.extensions/http-delpoyment created
3️⃣ create 和 apply的区别
create 和 apply都可以创建deployment 区别
kubectl create
:
(1)kubectl create
命令,是先删除所有现有的东西,重新根据 yaml
文件生成新的。所以要求 yaml
文件中的配置必须是完整的
(2)kubectl create
命令,用同一个 yaml
文件执行替换 replace
命令,将会不成功,fail
掉。
kubectl apply
:
kubectl apply
命令,根据配置文件里面列出来的内容,升级现有的。所以 yaml
文件的内容可以只写需要升级的属性
ps2:
——record=false:在资源标注中记录当前
kubectl
命令。如果设置为false
,则不记录该命令。如果设置为true,记录命令。如果没有设置,则默认只在已有注释值时更新现有注释值。
查看pod
[root@master ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
http-delpoyment-7cffd4d96f-6d54x 1/1 Running 0 51s app=web,pod-template-hash=7cffd4d96f
http-delpoyment-7cffd4d96f-jvj46 1/1 Running 0 51s app=web,pod-template-hash=7cffd4d96f
http-delpoyment-7cffd4d96f-zntwn 1/1 Running 0 51s app=web,pod-template-hash=7cffd4d96f
4️⃣ 查看rs
[root@master ~]# kubectl get rs --show-labels
NAME DESIRED CURRENT READY AGE LABELS
http-delpoyment-7cffd4d96f 3 3 3 21m app=web,pod-template-hash=7cffd4d96f
5️⃣ 查看deployment
[root@master ~]# kubectl get deployment --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
http-delpoyment 3/3 3 3 21m app=web
⭐️ DaemonSet
⭐️ DaemonSet
保证在每个 Node 上都运行一个容器副本,常用来部署一些集群的日志、监 控或者其他系统管理应用
1️⃣ 编写 yaml
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: nginx-daemonset
labels:
app: daemonset-web
spec:
selector:
matchLabels:
app: web-nginx
template:
metadata:
name: nginx
labels:
app: web-nginx
spec:
containers:
- name: nginx
image: harbor.tanc.com/library/nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
protocol: TCP
ds
也并不会按照自己的标签来管理,而会按照selector来管理
2️⃣ 查看一下 pod
和 ds
[root@master ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-daemonset-fntnx 1/1 Running 0 6m57s app=web-nginx,controller-revision-hash=84b79765f6,pod-template-generation=1
nginx-daemonset-kll5r 1/1 Running 0 6m57s app=web-nginx,controller-revision-hash=84b79765f6,pod-template-generation=1
[root@master ~]# kubectl get ds --show-labels
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE LABELS
nginx-daemonset 2 2 2 2 2 <none> 7m19s app=daemonset-web
⭐️ job&&CronJob
job:
spec.template
格式同PodRestartPolicy
仅支持Never或OnFailure
就是从不重启和发生错误才重启- 单个
Pod
时,默认Pod
成功运行后Job
即结束 spec.completions
标志Job
结束需要成功运行的Pod
个数,默认为1 就是代表你这个job
要运行几次才算成功spec.parallelism
标志并行运行的Pod
的个数,默认为1 ##就是一次可以运行几个job来完成任务spec.activeDeadlineSeconds
标志失败Pod的重试最大时间,超过这个时间不会继续重试 默认为秒极
1️⃣ 编写yaml
[root@master ~]# vim pod/job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: echo-job
labels:
job: echo
spec:
completions: 4
parallelism: 1
activeDeadlineSeconds: 20
template:
metadata:
name: echo-job
spec:
containers:
- name: echo-job
image: harbor.tanc.com/library/busybox
imagePullPolicy: IfNotPresent
command: ['sh','-c','echo hello-word']
ports:
- containerPort: 80
protocol: TCP
restartPolicy: Never
3️⃣ 查看 job
[root@master ~]# kubectl get job
NAME COMPLETIONS DURATION AGE
echo-job 4/4 6s 17s
4️⃣ 查看 pod
,可以看见 job
都是完成
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
echo-job-rkjl5 0/1 Completed 0 17s
echo-job-scf47 0/1 Completed 0 20s
echo-job-tq4hp 0/1 Completed 0 19s
echo-job-zf896 0/1 Completed 0 15s
nginx-daemonset-fntnx 1/1 Running 0 54m
nginx-daemonset-kll5r 1/1 Running 0 54m
5️⃣ 查看日志可以看见输出了hello-word
[root@master ~]# kubectl log echo-job-rkjl5
log is DEPRECATED and will be removed in a future version. Use logs instead.
hello-word
CronJob:
CronJob Spec
-
spec.schedule
:调度,必需字段,指定任务运行周期,格式同Crontab
\* \* \* \* \* 分 时 日 月 星期
-
spec.jobTemplate
:job
模板,必需字段,指定需要运行的任务,格式同Job -
spec.startingDeadlineSeconds
: 启动Job的期限(秒级别) ,该字段是可选的。如果因为任何原因而错过了被调度的时间,那么错过执行时间的Job将被认为是失败的。如果没有指定,则没有期限 -
spec.concurrencyPolicy
:并发策略,该字段也是可选的。它指定了如何处理被Cron Job
创建的Jop
的并发执行。只允许指定下面策略中的一种:Allow
(默认) :允许并发运行Job
Forbid
:禁止并发运行,如果前-一个还没有完成,则直接跳过下一个Replace
:取消当前正在运行的Job
,用-个新的来替换
注意,当前策略只能应用于同- -个
Cron Job
创建的Job
。如果存在多个Cron Job,
它们创建的Job
之间总是允许并发运行 -
spec.suspend
: 挂起,该字段也是可选的。如果设置为true
,后续所有执行都会被挂起。它对已经开始执行的Job
不起作用。默认值为false
。 -
spec.successfullobsHistoryLimit
和spec.failedJobsHistoryLimit
] :历史限制,是可选的字段。它们指定了可以保留多少完成和失败的Job。默认情况下,它们分别设置为3和1。设置限制的值为0,相关类型的Job完成后将不会被保留。
1️⃣ 编写yaml文档
[root@master ~]# vim pod/cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: echo-cronjob
spec:
startingDeadlineSeconds: 25
concurrencyPolicy: Allow
schedule: "*/1 * * * * "
jobTemplate:
spec:
template:
metadata:
name: cronjob-app
spec:
containers:
- name: cronjob
image: harbor.tanc.com/library/busybox
imagePullPolicy: IfNotPresent
command: ['sh','-c','echo how are you??']
restartPolicy: OnFailure
2️⃣ 查看job
[root@master ~]# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
echo-cronjob */1 * * * * False 0 32s 116s
3️⃣ 查看 pod
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
echo-cronjob-1629463320-n9xx5 0/1 Completed 0 104s
echo-cronjob-1629463380-skghr 0/1 Completed 0 43s