# 集群镜像插件使用
# 插件类型列表
# 主机名插件
主机名插件将帮助您更改所有主机名
---
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: MyHostname # 指定插件名称,将会转储到$rootfs/plugins目录下。
spec:
type: HOSTNAME #插件类型
action: PreInit # 指定运行阶段
data: |
192.168.0.2 master-0
192.168.0.3 master-1
192.168.0.4 master-2
192.168.0.5 node-0
192.168.0.6 node-1
192.168.0.7 node-2
# 脚本插件
你可以在指定节点的任何阶段执行任何shell命令。
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: MyShell
spec:
type: SHELL
action: PostInstall # # 指定运行阶段【PreInit | PostInstall | PostClean】
'on': node-role.kubernetes.io/master=
data: |
kubectl get nodes
action : [PreInit| PostInstall] # 指定执行shell的时机
镜像挂载前阶段 | action: Originally
在初始化之前之前执行命令 | action: PreInit
在添加节点之前执行命令 | action: PreJoin
在添加节点之后执行命令 | action: PostJoin
在执行Kubefile CMD命令前 | action: PreGuest
在安装集群之后执行命令 | action: PostInstall
在清理集群前执行命令 | action: PreClean
在清理集群后执行命令 | action: PostClean
组合使用 | action: PreInit|PreJoin
on : #指定执行命令的机器
为空时默认在所有节点执行
在所有master节点上执行 'on': master
在所有node节点上执行 'on': node
在指定IP上执行 'on': 192.168.56.113,192.168.56.114,192.168.56.115,192.168.56.116
在有连续IP的机器上执行 'on': 192.168.56.113-192.168.56.116
在指定label节点上执行(action需为PostInstall或PreClean) 'on': node-role.kubernetes.io/master=
data : #指定执行的shell命令
例:
`data: echo "test shell plugin"`
调用cluster env 执行脚本:
执行shell 脚本命令: `data: echo $docker_dir $ips[@]`
执行shell 脚本文件: `data: . scripts/install.sh` 或者 `data: source scripts/install.sh`
## 当sealer执行脚本时env的设置类似于:`docker_dir=/data/docker ips=(192.168.0.2;192.168.0.3) && source scripts/install.sh`
## data中使用bash scripts/install.sh的方式将开启新的进程执行脚本导致无法获取当前环境env
## 因此install.sh中如需使用env需要使用source scripts/install.sh
# 标签插件
帮助您在安装kubernetes集群后设置标签
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: MyLabel
spec:
type: LABEL
action: PostInstall
data: |
192.168.0.2 ssd=true
192.168.0.3 ssd=true
192.168.0.4 ssd=true
192.168.0.5 ssd=false,hdd=true
192.168.0.6 ssd=false,hdd=true
192.168.0.7 ssd=false,hdd=true
# 集群检测插件
由于服务器以及环境因素(服务器磁盘性能差)可能会导致sealer安装完kubernetes集群后,立即部署应用服务,出现部署失败的情况。cluster check插件会等待kubernetes集群稳定后再部署应用服务。
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: checkCluster
spec:
type: CLUSTERCHECK
action: PreGuest
# 污点插件
如果你在Clusterfile后添加taint插件配置并应用它,sealer将帮助你添加污点和去污点:
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: taint
spec:
type: TAINT
action: PreGuest
data: |
192.168.56.3 key1=value1:NoSchedule
192.168.56.4 key2=value2:NoSchedule-
192.168.56.3-192.168.56.7 key3:NoSchedule
192.168.56.3,192.168.56.4,192.168.56.5,192.168.56.6,192.168.56.7 key4:NoSchedule
192.168.56.3 key5=:NoSchedule
192.168.56.3 key6:NoSchedule-
192.168.56.4 key7:NoSchedule-
data写法为
ips taint_argumentips : 多个ip通过,连接,连续ip写法为 首ip-末尾ip taint_argument: 同kubernetes 添加或去污点写法(key=value:effect #effect必须为:NoSchedule, PreferNoSchedule 或 NoExecute)。
# Etcd 备份插件
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: MyBackup
spec:
type: ETCD
action: PostInstall
# Out of tree plugin
at present, we only support the golang so file as out of tree plugin. More description about golang plugin see golang plugin website.
copy the so file and the plugin config to your cloud image at build stage use Kubefile,sealer will parse and execute
it. develop your own out of tree plugin see sealer plugin.
plugin config:
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: label_nodes.so # out of tree plugin name
spec:
type: LABEL_TEST_SO # define your own plugin type.
action: PostInstall # which stage will this plugin be applied.
data: |
192.168.0.2 ssd=true
Kubefile:
FROM kubernetes:v1.19.8
COPY label_nodes.so plugin
COPY label_nodes.yaml plugin
Build a cluster image that contains the golang plugin (or more plugins):
sealer build -m lite -t kubernetes-post-install:v1.19.8 .
# 如何使用插件
# 通过Clusterfile使用插件
例如,在安装kubernetes集群后设置节点标签:
apiVersion: sealer.cloud/v2
kind: Cluster
metadata:
name: default-kubernetes-cluster
spec:
image: kubernetes:v1.19.8
ssh:
passwd: xxx
hosts:
- ips: [ 192.168.0.2,192.168.0.3,192.168.0.4 ]
roles: [ master ]
- ips: [ 192.168.0.5 ]
roles: [ node ]
---
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: LABEL
spec:
type: LABEL
action: PostInstall
data: |
172.20.126.8 ssd=false,hdd=true
sealer apply -f Clusterfile
# 在Kubefile中使用默认插件
在很多情况下,可以不使用Clusterfile而使用插件,本质上是在使用插件之前存储了Clusterfile插件到$rootfs/plugins目录下 所以当我们构建镜像时可以添加自定义默认插件。
插件配置文件 shell.yaml:
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: taint
spec:
type: SHELL
action: PostInstall
'on': node-role.kubernetes.io/master=
data: |
kubectl get nodes
---
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: install-iscsi
spec:
type: SHELL
action: PostInstall
data: |
if type yum >/dev/null 2>&1;then
yum -y install iscsi-initiator-utils
systemctl enable iscsid
systemctl start iscsid
elif type apt-get >/dev/null 2>&1;then
apt-get update
apt-get -y install open-iscsi
systemctl enable iscsid
systemctl start iscsid
fi
Kubefile:
FROM kubernetes:v1.19.8
COPY shell.yaml plugin
构建一个包含安装iscsi的插件(或更多插件)的集群镜像:
sealer build -m lite -t kubernetes-iscsi:v1.19.8 .
通过镜像启动集群后插件也将被执行,而无需在Clusterfile中定义插件:
sealer run kubernetes-iscsi:v1.19.8 -m x.x.x.x -p xxx