github.com/alibaba/sealer@v0.8.6-0.20220430115802-37a2bdaa8173/docs/design/plugin_zh.md (about) 1 # 集群镜像插件 2 3 插件可以帮助用户做一些之外的事情,比如更改主机名,升级内核,或者添加节点标签等…… 4 5 ## 主机名插件 6 7 如果你在Clusterfile后添加插件配置并应用它,sealer将帮助你更改所有的主机名: 8 9 ```yaml 10 --- 11 apiVersion: sealer.aliyun.com/v1alpha1 12 kind: Plugin 13 metadata: 14 name: hostname 15 spec: 16 type: HOSTNAME 17 data: | 18 192.168.0.2 master-0 19 192.168.0.3 master-1 20 192.168.0.4 master-2 21 192.168.0.5 node-0 22 192.168.0.6 node-1 23 192.168.0.7 node-2 24 ``` 25 26 > Hostname Plugin 将各个节点在安装集群前修改为对应的主机名。 27 28 ## 脚本插件 29 30 如果你在Clusterfile后添加Shell插件配置并应用它,sealer将帮助你执行shell命令(执行路径为镜像Rootfs目录): 31 32 ```yaml 33 --- 34 apiVersion: sealer.aliyun.com/v1alpha1 35 kind: Plugin 36 metadata: 37 name: shell 38 spec: 39 type: SHELL 40 action: PostInstall 41 'on': node-role.kubernetes.io/master= 42 data: | 43 kubectl taint nodes node-role.kubernetes.io/master=:NoSchedule 44 ``` 45 46 ```shell 47 action : [PreInit| PostInstall] # 指定执行shell的时机 48 在初始化之前执行命令 | action: PreInit 49 在添加节点之前执行命令 | action: PreJoin 50 在添加节点之后执行命令 | action: PostJoin 51 在执行Kubefile CMD之前 | action: PreGuest 52 在安装集群之后执行命令 | action: PostInstall 53 在清理集群前执行命令 | action: PreClean 54 在清理集群后执行命令 | action: PostClean 55 组合使用 | action: PreInit|PreJoin 56 on : #指定执行命令的机器 57 为空时默认在所有节点执行 58 在所有master节点上执行 | 'on': master 59 在所有node节点上执行 | 'on': node 60 在指定IP上执行 | 'on': 192.168.56.113,192.168.56.114,192.168.56.115,192.168.56.116 61 在有连续IP的机器上执行 | 'on': 192.168.56.113-192.168.56.116 62 在指定label节点上执行(action需为PostInstall或PreClean) | 'on': node-role.kubernetes.io/master= 63 data : #指定执行的shell命令 64 ``` 65 66 ## 标签插件 67 68 如果你在Clusterfile后添加label插件配置并应用它,sealer将帮助你添加label: 69 70 ```yaml 71 apiVersion: sealer.aliyun.com/v1alpha1 72 kind: Plugin 73 metadata: 74 name: label 75 spec: 76 type: LABEL 77 action: PreGuest 78 data: | 79 192.168.0.2 ssd=true 80 192.168.0.3 ssd=true 81 192.168.0.4 ssd=true 82 192.168.0.5 ssd=false,hdd=true 83 192.168.0.6 ssd=false,hdd=true 84 192.168.0.7 ssd=false,hdd=true 85 ``` 86 87 > 节点ip与标签之前使用空格隔开,多个标签之间使用逗号隔开。 88 89 ## 集群检测插件 90 91 由于服务器以及环境因素(服务器磁盘性能差)可能会导致sealer安装完kubernetes集群后,立即部署应用服务,出现部署失败的情况。cluster check插件会等待kubernetes集群稳定后再部署应用服务。 92 93 ```yaml 94 apiVersion: sealer.aliyun.com/v1alpha1 95 kind: Plugin 96 metadata: 97 name: checkCluster 98 spec: 99 type: CLUSTERCHECK 100 action: PreGuest 101 ``` 102 103 ## 污点插件 104 105 如果你在Clusterfile后添加taint插件配置并应用它,sealer将帮助你添加污点和去污点: 106 107 ```yaml 108 apiVersion: sealer.aliyun.com/v1alpha1 109 kind: Plugin 110 metadata: 111 name: taint 112 spec: 113 type: TAINT 114 action: PreGuest 115 data: | 116 192.168.56.3 key1=value1:NoSchedule 117 192.168.56.4 key2=value2:NoSchedule- 118 192.168.56.3-192.168.56.7 key3:NoSchedule 119 192.168.56.3,192.168.56.4,192.168.56.5,192.168.56.6,192.168.56.7 key4:NoSchedule 120 192.168.56.3 key5=:NoSchedule 121 192.168.56.3 key6:NoSchedule- 122 192.168.56.4 key7:NoSchedule- 123 ``` 124 125 > data写法为`ips taint_argument` 126 > ips : 多个ip通过`,`连接,连续ip写法为 首ip-末尾ip 127 > taint_argument: 同kubernetes 添加或去污点写法(key=value:effect #effect必须为:NoSchedule, PreferNoSchedule 或 NoExecute)。 128 129 ## 插件使用步骤 130 131 Clusterfile内容: 132 133 ``` 134 apiVersion: sealer.aliyun.com/v1alpha1 135 kind: Cluster 136 metadata: 137 name: my-cluster 138 spec: 139 image: registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.8 140 provider: BAREMETAL 141 ssh: 142 # ssh的私钥文件绝对路径,例如/root/.ssh/id_rsa 143 pk: xxx 144 # ssh的私钥文件密码,如果没有的话就设置为"" 145 pkPasswd: xxx 146 # ssh登录用户 147 user: root 148 # ssh的登录密码,如果使用的密钥登录则无需设置 149 passwd: xxx 150 network: 151 podCIDR: 100.64.0.0/10 152 svcCIDR: 10.96.0.0/22 153 certSANS: 154 - aliyun-inc.com 155 - 10.0.0.2 156 masters: 157 ipList: 158 - 192.168.0.2 159 - 192.168.0.3 160 - 192.168.0.4 161 nodes: 162 ipList: 163 - 192.168.0.5 164 - 192.168.0.6 165 - 192.168.0.7 166 --- 167 apiVersion: sealer.aliyun.com/v1alpha1 168 kind: Plugin 169 metadata: 170 name: hostname 171 spec: 172 type: HOSTNAME 173 data: | 174 192.168.0.2 master-0 175 192.168.0.3 master-1 176 192.168.0.4 master-2 177 192.168.0.5 node-0 178 192.168.0.6 node-1 179 192.168.0.7 node-2 180 --- 181 apiVersion: sealer.aliyun.com/v1alpha1 182 kind: Plugin 183 metadata: 184 name: taint 185 spec: 186 type: SHELL 187 action: PostInstall 188 on: node-role.kubernetes.io/master= 189 data: | 190 kubectl taint nodes node-role.kubernetes.io/master=:NoSchedule 191 ``` 192 193 ``` 194 sealer apply -f Clusterfile #plugin仅在安装时执行,后续apply不生效。 195 ``` 196 197 > 执行上述命令后hostname,shell plugin将修改主机名并在成功安装集群后执行shell命令。 198 199 ## 在Kubefile中定义默认插件 200 201 很多情况下在不使用Clusterfile的情况下也能使用插件,本质上sealer会先把Clusterfile中的插件配置先存储到 rootfs/plugins目录,再去使用,所以我们可以在制作镜像时就定义好默认插件。 202 203 插件配置文件 shell.yaml: 204 205 ```yaml 206 apiVersion: sealer.aliyun.com/v1alpha1 207 kind: Plugin 208 metadata: 209 name: taint 210 spec: 211 type: SHELL 212 action: PostInstall 213 on: node-role.kubernetes.io/master= 214 data: | 215 kubectl get nodes 216 --- 217 apiVersion: sealer.aliyun.com/v1alpha1 218 kind: Plugin 219 metadata: 220 name: SHELL 221 spec: 222 action: PostInstall 223 data: | 224 if type yum >/dev/null 2>&1;then 225 yum -y install iscsi-initiator-utils 226 systemctl enable iscsid 227 systemctl start iscsid 228 elif type apt-get >/dev/null 2>&1;then 229 apt-get update 230 apt-get -y install open-iscsi 231 systemctl enable iscsid 232 systemctl start iscsid 233 fi 234 ``` 235 236 Kubefile: 237 238 ```shell script 239 FROM kubernetes:v1.19.8 240 COPY shell.yaml plugin 241 ``` 242 243 构建一个包含安装iscsi的插件(或更多插件)的集群镜像: 244 245 ```shell script 246 sealer build -m lite -t kubernetes-iscsi:v1.19.8 . 247 ``` 248 249 通过镜像启动集群后插件也将被执行,而无需在Clusterfile中定义插件: 250 `sealer run kubernetes-iscsi:v1.19.8 -m x.x.x.x -p xxx`