Replication Controller和ReplicaSet
Deployment
Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。
典型的应用场景:
DaemonSet
DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
DaemonSet 的典型用法:
一个简单的用法是在所有的节点上都启动一个 DaemonSet,将被作为每种类型的 daemon 使用。
一个稍微复杂的用法是单独对每种 daemon 类型使用多个 DaemonSet,但具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。
StatefulSet
StatefulSet 是用来管理有状态应用的工作负载 API 对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”
StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供序号和唯一性保证。
StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值:
Job
CronJob
Cron Job 创建基于时间调度的 Jobs。
一个 CronJob 对象就像 crontab (cron table) 文件中的一行,它用 Cron 格式进行编写,并周期性地在给定的调度时间执行 Job。
HPA
步骤一:编辑资源清单文件,创建pod
vim rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-example
spec:
replicas: 2 #两个副本
selector:
matchLabels:
app: nginx #标签
template:
metadata:
labels:
app: nginx #标签
spec:
containers:
- name: nginx
image: nginx
kubectl apply -f rs.yaml #创建pod
注意:我们之前创建的pod时,都是使用create来创建的,创建的都是自主式的pod(即一次性创建的,创建后不再做任何更改),但是在ReplicaSet中我们会涉及到更新、重建等操作,所以一般使用apply来创建。
kubectl get pod
kubectl get pod -o wide
步骤二:做拉伸
vim rs.yaml #增加副本的个数
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-example
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
kubectl apply -f rs.yaml
kubectl get pod
kubectl get pod -o wide
步骤三:查看标签
kubectl get pod --show-labels
kubectl label pod replicaset-example-nfwzl app=myapp --overwrite #修改pod的标签
kubectl get pod --show-labels #查看pod的标签
kubectl label pod replicaset-example-4lf7z app=myapp --overwrite
kubectl get pod --show-labels
kubectl label pod replicaset-example-4lf7z app=nginx --overwrite
kubectl get pod --show-labels
步骤一:编辑资源清单文件,创建pod
vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: reg.westos.org:5000/myapp:v1
ports:
- containerPort: 80
kubectl apply -f deployment.yaml
kubectl get pod
kubectl get pod -o wide
kubectl get rs
kubectl get deployments.apps
kubectl get all
vim deployment.yaml #增加副本数
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: reg.westos.org:5000/myapp:v1
ports:
- containerPort: 80
kubectl apply -f deployment.yaml
kubectl get pod
kubectl get pod -o wide
vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: reg.westos.org:5000/myapp:v2
ports:
- containerPort: 80
kubectl apply -f deployment.yaml
kubectl get pod -w #查看pod的创建和结束过程
kubectl get pod
kubectl get rs
步骤一:编辑资源清单文件,创建pod
vim daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-example
labels:
k8s-app: zabbix-agent
spec:
selector:
matchLabels:
name: zabbix-agent
template:
metadata:
labels:
name: zabbix-agent
spec:
containers:
- name: zabbix-agent
image: reg.westos.org:5000/zabbix-agent
kubectl apply -f daemonset.yaml
步骤二:查看创建的pod
kubectl get pod
kubectl get pod -o wide
步骤三:删除其中一个pod,集群会自动重建一个pod
kubectl get pod
kubectl delete pod daemonset-example-smmb2
kubectl get pod
vim job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: reg.westos.org:5000/perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
kubectl apply -f job.yaml
kubectl get pod
kubectl get pod -o wide
cat cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob-example
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: cronjob
image: reg.westos.org:5000/busybox
args:
- /bin/sh
- -c
- date; echo Hello from k8s cluster
restartPolicy: OnFailure
kubectl apply -f cronjob.yaml