控制器管理podnode
记录的版本,用于回滚:nginx
总结
一、deployment 认为pod都保持一致
二、不用考虑启动顺序
三、不用考虑在哪一个node上运行,在哪一个node上运行都同样
四、随意的扩容、缩容web
部署有状态应用redis
总结
一、好比etcd就须要部署在这个控制器下,由于集群之间的配置会变化
二、不对等的关系,须要用外部存储,相似于3台web,存储附件,不要用一个nfs共享存储,让每一个web均可以正常访问docker
service:外部能够访问,经过CLUSTER-IP 转发到容器的节点上来提供服务数据库
现须要将CLUSTER-IP 设置为None,这样就能保证转发到一台节点上,须要用到的是dns的通讯
设置:clusterIP: None 如果不设置,默认都是有clusterIPapi
配置dns服务:
kubectl apply -f coredns.yaml网络
验证:(如果running,就没问题)app
验证开始
[root@docker demo]# cat sys.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:运维
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: nginx-statefulset
namespace: default
spec:
serviceName: nginx
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
说明:一、serviceName: nginx 与service 中的name: nginx 绑定
二、kind: StatefulSet 指定这个控制器
建立
kubectl apply -f sys.yaml
建立一个pod,在这里用dns解析
[root@docker demo]# kubectl apply -f pod1.yaml
[root@docker demo]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: dns-test
spec:
containers:
说明:一、必需要加上参数,否则启动就退出了,保证不被退出
进入到容器里解析:
说明:一、nginx-statefulset-0.nginx 中nginx-statefulset-0 是pod的主机名,nginx是service名称,这样来保证稳定
主机名获取:
StatefulSet与Deployment区别:有身份的!
身份三要素:
• 固定域名
• 固定主机名
• 存储(PVC)
ClusterIP A记录格式:<service-name>.<namespace-name>.svc.cluster.local
ClusterIP=None A记录格式:<statefulsetName-index>.<service-name>.svc.cluster.local
示例:web-0.nginx.default.svc.cluster.local
官网:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
• 在每个Node上运行一个Pod
• 新加入的Node也一样会自动运行一个Pod
应用场景:Agent
验证:
说明:一、DaemonSet 不须要指定副本数( replicas: 3),由于是根据node的数量才定的,好比node数为3个,就建立3个pod
官网: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
Job分为普通任务(Job)和定时任务(CronJob)
• 一次性执行
应用场景:离线数据处理,视频解码等业务,适用临时跑个任务
说明:一、 backoffLimit: 4 异常重启的限制次数
二、[root@docker demo]# kubectl get jobs
CronJob
官网:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
定时任务,像Linux的Crontab同样。
• 定时任务
应用场景:通知,备份
说明:一、查看kubectl get cronjob
Secret
官网:https://kubernetes.io/docs/concepts/configuration/secret/
加密数据并存放Etcd中,让Pod的容器以挂载Volume方式访问。
应用场景:凭据
ConfigMap
官网:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
与Secret相似,区别在于ConfigMap保存的是不须要加密配置信息。
应用场景:应用配置
一、新建一个redis.properties
[root@docker demo]# vi redis.properties
redis.gost=127.0.0.1
redis.port=6379
redis.password=123456
二、建立 [root@docker demo]# kubectl create configmap redis-config --from-file=redis.properties
三、查看kubectl get configmaps
四、这个是不须要加密的数据,因此都是明文的
五、编辑cm.yaml
说明:一、将config-volume(name: redis-config) 挂载到/etc/config下
二、cat /etc/config/redis.properties
结果:
说明:将上线的代码和configmaps 联系在一块儿,指定configmaps,就能够访问了