一、replicaset控制器
1.建立控制器
[root@master controller]# vim repset.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: replica
name: replica
spec:
replicas: 2
selector:
matchLabels:
app: replica
#strategy: {}
template:
metadata:
labels:
app: replica
spec:
containers:
- image: myapp:v1
name: myapp

[root@master controller]# kubectl scale replicaset replica --replicas 4
replica-54ljm 1/1 Running 0 18s app=replica
replica-nplj2 1/1 Running 0 3m49s app=replica
replica-rv2sd 1/1 Running 0 18s app=replica
replica-z596j 1/1 Running 0 3m49s app=replica
可以拉伸
二.deployment
1.建立控制器
[root@master controller]# kubectl create deployment deploy --image myapp:v1 --dry-run=client -o yaml > dep.yml
[root@master controller]# vim dep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: deploy
name: deploy
spec:
minReadySeconds: 5
replicas: 2
selector:
matchLabels:
app: deploy
# strategy: {}
template:
metadata:
labels:
app: deploy
spec:
containers:
- image: myapp:v1
name: myapp
# resources: {}
[root@master controller]# kubectl apply -f dep.yml
deployment.apps/deploy created

[root@master controller]# kubectl expose deployment deploy --port 80 --target-port 80
service/deploy exposed
[root@master controller]# kubectl describe services deploy
Name: deploy
Namespace: default
Labels: app=deploy
Annotations: <none>
Selector: app=deploy
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.101.113.8
IPs: 10.101.113.8
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.244.1.19:80,10.244.2.16:80
Session Affinity: None
Internal Traffic Policy: Cluster
Events: <none>
[root@master controller]# curl 10.101.113.8
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
2.升级和回滚
#升级
[root@master controller]# vim dep.yml
- image: myapp:v2 #升级为版本2
[root@master controller]# kubectl apply -f dep.yml
deployment.apps/deploy configured
[root@master controller]# curl 10.101.113.8
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
#回滚
[root@master controler]# vim dep.yml
- image: myapp:v1 #回滚为版本1
[root@master controler]# kubectl apply -f dep.yml
[root@master controler]# curl 10.107.142.60
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
三.DaemonSet
[root@master controler]# kubectl create deployment daemonset --image myapp:v1 --dry-run=client -o yaml > daemonset.yml
[root@master controler]# vim daemonset.yml
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
#另外开启一个主机node3,并设定在初始化集群时的所有设定确保所有服务的开启
#在master中重新生成集群主机注册时需要的token
[root@master controler]# kubeadm token create --print-join-command
kubeadm join 172.25.254.100:6443 --token lqcz14.6f4krq91w75h58bt --discovery-token-ca-cert-hash sha256:6b5950ef2cdba85d6dfdb564ee90d4187fa3d341767dc9852cbdd5c9dee4f927
[root@node3 ~]# kubeadm join 172.25.254.100:6443 --token lqcz14.6f4krq91w75h58bt --discovery-token-ca-cert-hash sha256:6b5950ef2cdba85d6dfdb564ee90d4187fa3d341767dc9852cbdd5c9dee4f927 --cri-socket unix:///var/run/cri-dockerd.sock
#当node3加入集群后会在node3中立即群星指定的pod,其原因是因为运行了daemonset
#可以在master中观察pod的状态
四、Job控制器
[root@master ~]# docker load -i perl-5.34.tar.gz
[root@master ~]# docker tag perl:5.34.0 reg.timinglee.org/library/perl:5.34.0
[root@master ~]# docker login reg.timinglee.org -u admin
Password:
Login Succeeded
[root@master ~]# docker push reg.timinglee.org/library/perl:5.34.0
[root@master controler]# kubectl create job job --image perl:5.34.0 --dry-run=client -o yaml > job.yml
[root@master controler]# vim job.yml
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
[root@master controler]# kubectl apply -f job.yml
job.batch/job created
[root@k8s-master controller]# kubectl logs pods/testjob-4cdlr
this is testjob message
五、Cronjob控制器
[root@master controler]# kubectl create cronjob cronjob --image busybox --schedule "* * * * *" --dry-run=client -o yaml > cronjob.yml
[root@master controler]# vim cronjob.yml
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 foldwin"
restartPolicy: OnFailure
schedule: '* * * * *'
[root@master controler]# kubectl apply -f cronjob.yml #整分运行
[root@master controler]# kubectl get cronjobs.batch
NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob * * * * * <none> False 0 17s 70s
[root@master controler]# kubectl logs cronjob-29598241-pxggh
hello foldwin