一,建立控制器
仍旧是先使用kubectl命令进行YAML格式文件的创立
bash
[root@master controler]# kubectl create deployment webcluster --image myapp:v1 --dry-run=client -o yaml > repset.yml
然后再进入到YAML文件进行具体的修改
bash
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: webcluster
name: webcluster
spec:
replicas: 2
selector:
matchLabels:
app: webcluster
# strategy: {}
template:
metadata:
labels:
app: webcluster
spec:
containers:
- image: myapp:v1
name: myapp
之后使用apply命令进行容器的运行
二,deployment
此时需要另开一台shell进行监控,具体的监控命令如下
bash
[root@k8s-master ~]# watch -n 1 " kubectl get pods --show-labels;echo ====;kubectl get replicasets.apps"
然后新建立deployment控制器来管理无状态应用,控制 Pod 副本同时也可以完成滚动更新、版本回滚、扩缩容的任务,具体命令如下
bash
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: webcluster
name: webcluster
spec:
minReadySeconds: 5
replicas: 2
selector:
matchLabels:
app: webcluster
template:
metadata:
labels:
app: webcluster
spec:
containers:
- image: myapp:v1 #修改这里来进行容器的升级与回滚
name: myapp
三,版本的更新优化及管理
先查看容器的更新策略,同时另一台的监控不要断开,便于直接观察容器版本的更新
bash
[root@master controler]# kubectl describe deployments.apps webcluster
RollingUpdateStrategy: 25% max unavailable, 25% max surge
根据命令返回的结果可以发现,跟新为百分之二十五的额外容器来进行更新的,可以打开前面deployment控制器的YAML来进行修改
bash
spec:
minReadySeconds: 5
replicas: 6
selector:
matchLabels:
app: webcluster
strategy:
rollingUpdate:
maxSurge: 1 #更新时pod数量最多比期望值多一个
maxUnavailable: 0 #不能使用pod数量比期望值数量多0
template:
metadata:
labels:
app: webcluster
spec:
containers:
- image: myapp:v1
name: myapp
同时也可以结合我上一篇文章提出的rollout命令来完成更新的回滚和暂停
四.DaemonSet控制器
DaemonSet控制器的作用是在集群每一个(或者符合标签选择器的)Node 上运行且仅运行一个 Pod 副本,具体的YAML 文件如下
bash
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: daemonset
name: daemonset
spec:
selector:
matchLabels:
app: daemonset
template:
metadata:
labels:
app: daemonset
spec:
containers:
- image: myapp:v1
name: myapp
同时添加一台新的node进入到k8s的集群中,具体添加方法参考我的k8s环境的部署
五.Job控制器
job控制器的作用为执行一次性任务,保证任务 Pod 成功完成退出,确保任务执行结束(成功终止),适合一次性批量任务、数据备份、计算任务,具体文件内容如下
bash
apiVersion: batch/v1
kind: Job
metadata:
name: testjob
spec:
completions: 6
parallelism: 2
backoffLimit: 4
template:
spec:
containers:
- image: busybox
name: testjob
command: ["/bin/sh", "-c"]
args:
- |
echo this is testjob message
sleep 10
restartPolicy: Never
六.Cronjob控制器
Cronjob控制器的作用是基于 cron 表达式定时创建 Job 对象,Job 再去跑一次性 Pod 任务。相当于 K8s 里面的 crontab 定时任务。具体的YAML文件内容如下
bash
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob
spec:
jobTemplate:
metadata:
name: cronjob
spec:
template:
spec:
containers:
- image: busybox
name: cronjob
command:
- /bin/sh
- -c
- echo "hello timinglee"
restartPolicy: OnFailure
schedule: '* * * * *'
控制器的作用是为了更好的使用YAML文件格式来便捷操作k8s使用过程