github.com/alibaba/sealer@v0.8.6-0.20220430115802-37a2bdaa8173/docs/design/global-config_zh.md (about) 1 # 全局配置 2 3 全局配置的特性是为了暴露出整个集群镜像里面分布式应用的参数,非常推荐的是只暴露出少量用户需要关心的参数。 4 5 如果需要暴露太多参数的话,比如整个helm的values都希望暴露出来,那更建议build一个新镜像把配置放进去覆盖。 6 7 以dashboard为例,我们制作了一个dashboard的集群镜像,但是不同用户在进行安装时希望使用不同的端口号,这种场景sealer提供 8 一种方式把这个端口号参数透出到Clusterfile的环境变量中去。 9 10 ## 使用全局配置能力 11 12 对于镜像的构建者在制作镜像时需要把这个参数抽离出来,以dashboard的yaml为例: 13 14 dashboard.yaml: 15 16 ```yaml 17 ... 18 kind: Service 19 apiVersion: v1 20 metadata: 21 labels: 22 k8s-app: kubernetes-dashboard 23 name: kubernetes-dashboard 24 namespace: kubernetes-dashboard 25 spec: 26 ports: 27 - port: 443 28 targetPort: {{ .DashBoardPort }} 29 selector: 30 k8s-app: kubernetes-dashboard 31 ... 32 ``` 33 34 编写kubefile,此时需要把yaml拷贝到manifests目录,sealer仅对这个目录下的文件进行渲染: 35 36 ```shell script 37 FROM kubernetes:1.16.9 38 COPY dashobard.yaml manifests/ 39 CMD kubectl apply -f manifests/dashobard.yaml 40 ``` 41 42 对于使用者只需要指定集群环境变量即可: 43 44 ```shell script 45 sealer run -e DashBoardPort=8443 mydashboard:latest -m xxx -n xxx -p xxx 46 ``` 47 48 或者在Clusterfile中指定: 49 50 ```yaml 51 apiVersion: sealer.aliyun.com/v1alpha1 52 kind: Cluster 53 metadata: 54 name: my-cluster 55 spec: 56 image: mydashobard:latest 57 provider: BAREMETAL 58 env: 59 - DashBoardPort=6443 # 在这里指定自定义端口, 会被渲染到镜像的yaml中 60 ssh: 61 passwd: 62 pk: xxx 63 ... 64 ``` 65 66 ## 与helm配合使用 67 68 sealer在运行时同样会生成一个非常全的Clusterfile文件到etc目录下,意味着helm chart中是可以通过一定的方法获取到这些参数的。 69 70 dashboard的chart values就可以这样写: 71 72 ```yaml 73 spec: 74 env: 75 - DashboardPort=6443 76 ``` 77 78 Kubefile: 79 80 ```yaml 81 FROM kubernetes:v1.16.9 82 COPY dashboard-chart . 83 CMD helm install dashboard dashboard-chart -f etc/global.yaml 84 ``` 85 86 这样global.yaml里面的值就会覆盖掉dashboard中的默认端口参数。 87 88 ## 开发文档 89 90 1. 在apply mountRootfs之前对etc,charts,manifest目录下的文件进行模板渲染,把环境变量和annotations渲染到[配置文件中]( 91 https://github.com/alibaba/sealer/blob/main/pkg/filesystem/filesystem.go#L145) 。 92 2. 生成global.yaml文件到etc目录下。