一、Delpoyment
Deployment是最为常见的一种Controller,定义和编排一个或多个Pod
如何创建一个Deployment?
1.命令创建 kubectl run
参数清晰直观、使用便捷,可用于测试
2.配置文件创建 kubectl apply
- 配置文件的形式,提供了创建资源的模板,有利于重复使用
- 可以形成版本,同代码一起进行管理
- 适合生产的交付流程
kubectl get deployment <name>
kubectl describe deployment <name>
创建了 Deployment 后就会隐式创建一个 ReplicaSet
可以通过kubectl describe replicaset
来查看
流程:
- (1)kubectl 创建Deploymnet
- (2)Deploymnet 创建ReplicaSet
- (3)ReplicaSet 创建Pod
相关操作的指令有:
- kubectl apply
- kubectl create
- kubectl replace
- kubectl edit
- kubectl patch
YAML文件配置格式主要为,test.yaml:
apiVersion: v1
kind: Deployment
metadata:
name: test-deploy
spec:
replicas: 2
template:
metadata:
labels:
app:testdeploy
spec:
containers:
name: test
image: busybox:latest
使用 kubectl apply -f test.yaml
就能发布一个2个副本的服务,可以通过 kubectl get pods -n <namespace>
来查看状态。
通常使用可以通过yaml配置,轻松控制副本数。如果Node节点故障,原Pod状态变为UNKONWN,而后在其他Node节点创建Pod以满足副本数要求。
二、DaemonSet
不同于普通Deployment,它在每个Node上只能最多运行一个副本,应用场景有
- 数据存储,例如ceph/glusterd
- 日志收集,例如flunentd/logstash
- 业务监控,例如Prometheus Node Exporter/collectd
k8s自身的DaemonSet服务类型主要有 kube-proxy,kube-flannel-ds
主要的区别就是:yaml文件中,kind是DaemonSet,test.yaml 如下:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset
spec:
selector:
matchLabels:
app: my-daemon
template:
metadata:
labels:
app: my-daemon
spec:
containers:
- name: daemonset-container
image: httpd
ports:
- containerPort : 80
三、Job
容器分为服务类容器
和工作类容器
:
- 服务类容器需要一直运行,Deployment\ReplicaSet\DaemonSet用于管理服务类容器
- Job用于管理工作类容器,用完就可以销毁
Kind有: Job、CronJob
restartPolicy有: Never/OnFailure
test.yaml 如下
apiVersion: batch/v1
kind: Job
metadata:
name: example-job
spec:
template:
spec:
containers:
- name: example-container
image: example-image
command: ["echo", "Hello, Kubernetes!"]
restartPolicy: Never
通过 kubectl get job
获取任务列表。
DESIRED 和 SUCCESSFUL 不符合时,
- restartPolicy: Never,job会不断新建来达到DESIRED的要求;
- restartPolicy: OnFailure,job会不断重启来达到DESIRED的要求;
可以通过parallelism 可以设置Job的并行度。
CronJob 的schedule配置cron表达式,K8S默认不开启CronJob功能,可以通过kube-apiserver的配置文件打开 --runtime-config=batch/v2alphha1=true,重启来生效。