K8S教程(8)使用控制器创建Pods
一、K8S控制器的作用使用配置清单创建Pod的时候通常会加入控制器的配置,否则没有控制器的Pod不支持故障漂移、横向扩容、滚动升级等高级特性。控制器(Controller)可以确保资源符合我们的需求,常用的控制器有DeemonSet、Deployment、ReplicaSet、Jobs等,有关控制器的详细介绍可以参考官网https://kubernetes.io/docs/concepts/wor
一、K8S控制器的作用
使用配置清单创建Pod的时候通常会加入控制器的配置,否则没有控制器的Pod不支持故障漂移、横向扩容、滚动升级等高级特性。控制器(Controller)可以确保资源符合我们的需求,常用的控制器有DeemonSet、Deployment、ReplicaSet、Jobs等,有关控制器的详细介绍可以参考官网https://kubernetes.io/docs/concepts/workloads/controllers/。最常用的2种控制器的主要用途和特点:
DaemonSet:用于确保所有节点运行同一个Pod的场景,比如日志采集、监控系统
Deployment:使用最多的无状态应用控制器,相比ReplicaSet来说,Deployment能直接对Pod进行滚动更新和回滚等操作(如果使用的是ReplicaSet控制器,yaml文件发生变化后直接apply是不会生效的,需要先手动删除Pod让控制器重新创建才可以,如果Pod很多的话就需要重复很多次)。
二、Deployment控制器配置示例
1、创建一个包含控制器的配置清单以创建Pod,这里的配置清单选项比较精简,主要关注控制器内容,更详尽的可以参考本站文章《K8S教程(6)使用YAML资源配置清单创建Pods》
vi nginx-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3 #Pod的副本数量,多节点实现负载均衡与高可用
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
2、应用配置清单
kubectl apply -f nginx-text.yaml
3、使用kubectl get命令查看控制器(由于这里是用的deployment,所以get的也就是deployment,使用其他控制器的话需要替换成对应的名字),可以看到会自动生成一个strategy字段,这个是用于滚动更新的策略
kubectl get deployment #显示所有deployment和其状态
kubectl get deployment nginx-test -o yaml
4、使用Deployment实现滚动更新发布
spec:
...
strategy:
rollingupdate:
maxSurge: 1
maxUnavailabe: 1
template:
metadata:
labels:
contraoller: deployment
app: nginx
version: 1.7.9
spec:
containers:
- name: nginx
image: nginx:1.8.1
...
应用配置文件创建好Pod,然后可以查看下历史版本
kubectl apply -f nginx-test.yaml
kubectl rollout history deployment nginx-test
回滚方法
kubectl rollout undo deloyment nginx-test --to-version=1 #回滚到版本号1
5、为控制器创建Service,暴露服务
二、ReplicaSet的创建实例
apiVersion: apps/v1
kind: ReplicaSet #定义控制器
metadata:
name: frontend
labels:
tier: frontend #定义标签
spec:
replicas: 3 #Pod的副本数量
selector: #标签选择器,符合条件的Pod才被控制
matchLabels:
tier: frontend
template: #由控制器所创建的Pod的信息在这里定义
metadata:
labels: #容器的标签和控制器需要一致
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
三、DaemonSet创建示例
vi daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec: #相比deployment少了replicase的定义,因为它是每个pod上都会运行
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
tolerations: #容忍度相关设置
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/container
更多推荐
所有评论(0)