一、前言
上回说到sealer的整体系统架构,我们这边文章来单独讲讲Clusterfile的设计理念和使用姿势。
二、基于Clusterfile的集群配置
2.1设计原则
sealer中kubefile决定集群如何打包,Clusterfile决定集群实例如何创建。Cluster API只暴露五分之四的常用参数使得集群create/update足够简单,针对那些低频率参数可以使用其他的方式去处理,如:通过Kubefile overwrite kubeadm配置进行自定义。如:
FROM kubernetes:1.19.9
COPY my-kubeadm.yaml.tmp kubeadm.yaml.tmp
Clusterfile把大部分用户不关心的参数都隐藏掉,把不同实现关心的参数放到annotations里,还有一部分配置放到一些约定的文件中,最终结果就是绝大多数人用起来更简单,还支持很多的方式扩展配置,应用的配置都应用自身去关心。
2.2集群配置参数详解
apiVersion: sealer.aliyun.com/v1alpha1
#定义的Kind类型,目前支持的Kind类型有三种,
# 1.Cluster:该类型说明你这个clusterfile是用于集群镜像启动的
# 2.Config:该类型说明你这个clusterfile是用于集群信息配置的
# 3.Plugin:该类型说明你这个clusterfile是用于配置一些插件的
kind: Cluster
metadata:
#~/sealer/my-cluster/Clusterfile里的my-cluster,代表你的集群名称
name: my-cluster
annotation:
trident.aliyun-inc.com/etcd: "/data/etcd"
trident.aliyun-inc.com/docker: "/var/lib/docker"
sea.aliyun.com/cloudrootfs/dir: "/var/lib/seadent/data/my-cluster"
spec:
#集群镜像
image: registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.9
## 这个是集群全局的环境变量
env:
- DOMAIN="sealer.alibaba.com"
#在已存在的集群安装类型BAREMETAL,在阿里云上安装类型是ALI_CLOUD
provider: BAREMETAL
ssh:
# ssh的登录密码,如果使用的密钥登录则无需设置
passwd:
## ssh的私钥文件绝对路径,例如/root/.ssh/id_rsa
pk: xxx
# ssh的私钥文件密码,如果没有的话就设置为""
pkPasswd: xxx
# ssh login user
user: root
network:
# in use NIC name
interface: eth0
# Network plug-in name
cniName: calico
podCIDR: 100.64.0.0/10
svcCIDR: 10.96.0.0/22
withoutCNI: false
certSANS:
# 把指定ip或域名放入apiserver证书使用
- aliyun-inc.com
- 10.0.0.2
masters: # 如果你的 provider 类型是 ALI_CLOUD, 你可以使用数量配置, 如果是 BAREMETAL 使用 ipList.
cpu: 6
memory: 6
count: 4
systemDisk: 200
dataDisks:
- 200
# ipList:
# - 10.10.10.1
# - 10.10.10.2
# - 10.10.10.3
nodes:
cpu: 3
memory: 6
count: 2
systemDisk: 200
dataDisks:
- 200
# ipList:
# - 10.10.10.1
# - 10.10.10.2
# - 10.10.10.3
三、基于Clusterfile增加集群配置信息
我们都知道在k8s上,使用了configmap用来放一些用户自定义的配置,在sealer中,如果用户想要改参数,该怎么办,总不能重新打个集群镜像吧,那不得裂开。而sealer巧妙利用overwrite的特性解决这一问题。之前说到Clusterfile决定集群实例如何创建,那它也可以决定集群是如何更新的。
如果你要增加集群的一些配置信息的话,需要编写类似如下的Clusterfile文件,一般在~/sealer/my-cluster/Clusterfile文件下追加配置信息就行,用---分隔
3.1集群Clusterfile注入配置参数详解
apiVersion: sealer.aliyun.com/v1alpha1
#定义的Kind类型,目前支持的Kind类型有三种,
# 1.Cluster:该类型说明你这个clusterfile是用于集群镜像启动的
# 2.Config:该类型说明你这个clusterfile是用于集群信息配置的
# 3.Plugin:该类型说明你这个clusterfile是用于配置一些插件的
kind: Cluster
metadata:
#集群名称
name: my-cluster
spec:
#集群镜像
image: registry.cn-qingdao.aliyuncs.com/sealer-app/my-SAAS-all-inone:latest
#提供着是那种类型
provider: BAREMETAL
#分割线上面是基础的集群信息,注意kind字段,分割线下面就是追加的配置信息
---
apiVersion: sealer.aliyun.com/v1alpha1
# Config类型说明是更改配置
kind: Config
metadata:
name: mysql-config
spec:
#对应你应用存放的文件地址,mysql为例
path: etc/mysql-valus.yaml
#你要修改数据的值,对应mysql-valus.yaml里的值
data: |
mysql-user: root
mysql-passwd: xxx
---
apiVersion: sealer.aliyun.com/v1alpha1
kind: Config
metadata:
name: redis-config
spec:
#对应你应用存放的文件地址,redis为例
path: etc/redis-valus.yaml
data: |
redis-user: root
redis-passwd: xxx
当你追加好这些信息之后,使用sealer的apply命令,就能让你的配置生效。 当然你的kubfile要这样去编写,才能保证sealer起起来的集群可以注入应用的配置了:
FROM kuberentes:v1.19.9
...
CMD helm install mysql -f etc/mysql-config.yaml
CMD helm install mysql -f etc/redis-config.yaml
3.2集群环境变量注入配置参数
如果是少量配置可以通过“集群环境变量”的方式注入。
例如:我需要配置集群中某个监听的端口号,可以这样写你的编排文件:
...
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-app
name: kubernetes-app
namespace: kubernetes-app
spec:
ports:
- port: 8080
#使用{{}}来规定你的变量参数
targetPort: {{ AppPort }}
selector:
k8s-app: kubernetes-app
...
然后需要编写kubefile
FROM kubernetes:1.16.9
COPY app.yaml manifests/
CMD kubectl apply -f manifests/app.yaml
最后运行镜像的时候设置参数
sealer run -e AppPort=8089 myApp:latest
当然,最开始的配置文件中提到env字段,也可以通过env字段设置进去
四、基于Clusterfile的集群插件
在一些特殊的场景下,eg.希望通过sealer去修改主机名,或者升级内核,或者同步时间这些“本不该”由sealer去做的事情,那么我们可以启用插件的方式来完成。 我们看看目前支持哪些插件机制,添加插件配置也是使用---在Clusterfile中追加配置信息
4.1HOSTNAME插件
---
apiVersion: sealer.aliyun.com/v1alpha1
#类型是Plugin
kind: Plugin
metadata:
#name表示插件的名称,HOSTNAME
name: HOSTNAME
spec:
#跟上你要修改的信息
data: |
10.10.0.2 master-0
10.10.0.3 master-1
10.10.0.4 master-2
10.10.0.5 node-0
10.10.0.6 node-1
10.10.0.7 node-2
4.2 SHELL插件
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: SHELL
spec:
action: PostInstall
#格式-表示连续的机器ip,等价于10.10.0.1,10.10.0.2,10.10.0.3 可以写成逗号分隔
on: 10.10.0.1-10.10.0.3
data: |
kubectl taint nodes node-role.kubernetes.io/master=:NoSchedule
4.3 LABEL插件
apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
name: LABEL
spec:
data: |
10.10.0.2 ssd=true
10.10.0.3 ssd=true
10.10.0.4 ssd=true
10.10.0.5 ssd=false,hdd=true
10.10.0.6 ssd=false,hdd=true
10.10.0.7 ssd=false,hdd=true
插件信息配置完成之后,使用sealer命令的apply即可生效
结语
好了,各位铁汁们,关于Clusterfile的详细内容,就介绍到这,更多信息请到sealer官方git地址上去了解。创作不易,请点个赞,点个关注,后续将分享更多有用信息。