标签:实现 pat ssi 安全 mys 的区别 memory policy sch
上次我们说到了deployment来管理pod容器的副本数量,如果挂掉之后容器再次启动就可以了,但是如果要是启动的是mysql集群、zookeeper集群、etcd这种集群,里面都有id号,这种有关联的,如果一旦挂掉之后,在启动之后呢,集群id是否会变化呢?答案是肯定会变的。稳定的、唯一的网络标识。
稳定的、持久的存储。
有序的、优雅的部署和伸缩。
有序的、优雅的删除和停止。
有序的、自动的滚动更新。
接下来看一下statefulset和deployment的区别:
1、接下来我们开始实践一下statefulset这种模式,来部署zookeeper集群
docker pull leolee32/kubernetes-library:kubernetes-zookeeper1.0-3.4.10
安装zk的机器下载这个镜像
2、Zookeeper集群需要用到存储,这里需要准备持久卷(PersistentVolume,简称PV),我这里以yaml文件创建3个PV,供待会儿3个Zookeeper节点创建出来的持久卷声明
3、创建一个pv;{persistent-volume.yaml}
cat persistent-volume.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: k8s-pv-zk1
annotations:
volume.beta.kubernetes.io/storage-class: "anything"
labels:
type: local
spec:
capacity:
storage: 3Gi
accessModes:
kind: PersistentVolume
apiVersion: v1
metadata:
name: k8s-pv-zk2
annotations:
volume.beta.kubernetes.io/storage-class: "anything"
labels:
type: local
spec:
capacity:
storage: 3Gi
accessModes:
kind: PersistentVolume
apiVersion: v1
metadata:
name: k8s-pv-zk3
annotations:
volume.beta.kubernetes.io/storage-class: "anything"
labels:
type: local
spec:
capacity:
storage: 3Gi
accessModes:
4、部署Zookeeper集群
cat zookeeper.yaml
apiVersion: v1
kind: Service
metadata:
name: zk-hs
labels:
app: zk
spec:
ports:
apiVersion: v1
kind: Service
metadata:
name: zk-cs
labels:
app: zk
spec:
ports:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: zk
spec:
selector:
matchLabels:
app: zk
serviceName: zk-hs
replicas: 3
updateStrategy:
type: RollingUpdate
podManagementPolicy: Parallel
template:
metadata:
labels:
app: zk
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
完成之后开始创建
没起来看一下啥原因
发现没有zookeeper用户
创建一下并给个权限
【注意】{每个安装zk的机器都要执行}
发现有2个已经启动了,有1个pening状态,在master上面没有安装
接下来看一下日志发现报这个错误
使用kubeadm初始化的集群,出于安全考虑Pod不会被调度到Master Node上,也就是说Master Node不参与工作负载
我们这里让master也运行一个,机器有限就三台
允许master节点部署pod,使用命令如下:
kubectl taint nodes --all node-role.kubernetes.io/master-
执行完成过一会再看看
启动了
【禁止master部署pod:】
kubectl taint nodes k8s node-role.kubernetes.io/master=true:NoSchedule
好了,接下来我们看一下效果是不是集群模式
说明已经成功了
但是我们3个zk,一般允许宕机一个,另外2个可以对外工作
接下来我们模拟一下宕机一个
模拟k8s-node1节点故障
看一下效果:
说明机器故障了,接下来
机器启动之后看一下
看到了吧,节点恢复之后会自动加入到原来的集群之中
为啥会这样呢
因为StatefulSet的稳定的唯一的网络标识特性,我们能比较轻松的实现Pod的固定IP需求,但是要是deployment就复杂的多了,会随机给你拉起,但是这个不会的
这里有个其他的知识点:
PodDisruptionBudget控制器可以设置应用POD集群处于运行状态最低个数,也可以设置应用POD集群处于运行状态的最低百分比,这样可以保证在主动销毁应用POD的时候,不会一次性销毁太多的应用POD,从而保证业务不中断或业务SLA不降级
咱们这里会保留一个对外提供服务
通过两个参数来配置PodDisruptionBudget:
1、 MinAvailable参数:表示最小可用POD数,表示应用POD集群处于运行状态的最小POD数量,或者是运行状态的POD数同总POD数的最小百分比。
2、 MaxUnavailable参数:表示最大不可用PO数,表示应用POD集群处于不可用状态的最大POD数,或者是不可用状态的POD数同总POD数的最大百分比。
!!!!!这里需要注意的是,MinAvailable参数和MaxUnavailable参数是互斥的,也就是说如果使用了其中一个参数,那么就不能使用另外一个参数了
这个在后面专门会讲到,这里只是提一下用到了。
今天演示讲到这里,后面有问题欢迎私信留言给我,一起讨论
标签:实现 pat ssi 安全 mys 的区别 memory policy sch
原文地址:https://blog.51cto.com/xiaorenwutest/2482932